Sekali lagi, saya ingin memberi tahu Anda tentang hasil studi desain situs yang menarik perhatian saya. Terakhir kali saya menulis tentang mekanisme CSS yang mendasari desain Facebook baru. Dan sekarang saya ingin menjelajahi Twitter CSS. Desain Twitter baru muncul hampir setahun yang lalu. Saya menemukan banyak hal menarik di CSS CSS: sesuatu tampak baik-baik saja bagi saya, dan ada sesuatu yang aneh.
Rasio aspek avatar pengguna
Saya perhatikan implementasi menarik dari avatar pengguna di halaman profil. Implementasi ini menggunakan teknik CSS untuk mempertahankan rasio aspek elemen.Avatar pengguna di halaman profilKode HTML dan CSS berikut menggambarkan penerapan avatar.<a href="#" class="avatar">
<div class="avatar-aspect-ratio"></div>
<img alt="" src="me.jpg">
</a>
.avatar {
position: relative;
width: 25%;
display: block;
}
.avatar-aspect-ratio {
width: 100%;
padding-bottom: 100%;
}
.avatar img {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
}
Teknik melestarikan aspek rasio elemen bekerja karena fakta bahwa ketika elemen memiliki indentasi vertikal (properti padding-bottom
atau padding-top
), indentasi tergantung pada lebar elemen. Lihatlah contoh berikut:.element {
width: 250px;
padding-bottom: 100%;
}
Nilai yang dihitung padding-bottom
sama 250px
. Ini berarti bahwa kita memiliki kotak yang sempurna. Tim Twitter menggunakan teknik yang sama, tetapi diterapkan pada elemen <img>
yang, dalam kaitannya dengan elemen induk, benar-benar diposisikan. Mengapa? Ini alasannya.Ada yang salah dengan avatar tersebut.Ketika gambar tidak diposisikan sepenuhnya, avatar akan terlihat seperti yang ditunjukkan pada gambar sebelumnya. Gambar harus diposisikan menggunakan nilai100%
lebar dan tinggi. Dengan pendekatan ini, ukurannya akan diatur sesuai dengan ukuran elemen pembungkus.Sekarang kita telah menemukan ide di balik solusi ini, mari kita kembali ke bagaimana ide ini diterapkan di Twitter.Properti iniwidth: 25%
didasarkan pada lebar elemen pembungkus. Di layar saya itu -600px
. Saya bertanya-tanya mengapa teknik seperti itu dipilih. Setelah saya mempelajari lebih lanjut tentang kode CSS, saya perhatikan bahwa komponen yang sama digunakan di jendela modal Edit Profile. Benar, elemen di sini lebih kecil karena penggunaan gaya berikut:.avatar {
max-width: 8rem;
}
Saya sangat menyukai gagasan mengelola gambar dengan hanya memengaruhi properti width
. Ini adalah video yang menggambarkan ide ini.Kontrol Lebar GambarDi sini Anda dapat menemukan proyek demo untuk bagian ini.Persentase indentasi atas
Agar avatar pengguna tumpang tindih dengan foto yang terletak di bagian atas halaman profil, digunakan indentasi eksternal negatif yang ditentukan dalam persen:.avatar {
margin-top: -18%;
}
Benar, di jendela Edit Profile modal, desain sudah digunakan untuk menyesuaikan lekukan atas margin-top: -3rem
. Perhatikan bahwa lekukan di jendela modal diatur menggunakan unit rem
. Unit yang sama digunakan untuk mengatur properti max-width
.Penggunaan aneh dari fungsi calc () CSS
Saya perhatikan bahwa CSS berikut digunakan untuk menata beberapa tombol:.button {
min-width: calc(45.08px)
}
Mengapa fungsi lulus calc()
nilai tunggal? Saya tidak mengerti intinya. Mungkin mereka ingin membulatkan angka 45,08? Tetapi dengan pendekatan ini, tidak dibulatkan ke 45. Lebar tombol sangat kecil. Tombol, ketika menerjemahkan aplikasi ke dalam bahasa RTL, seperti bahasa Arab, akan terlalu kecil.Tombol yang terlalu kecilFungsicalc()
muncul di CSS sebaris. Oleh karena itu, saya percaya bahwa ini adalah hasil dari penataan dinamis tombol menggunakan React.Campur latar belakang CSS dan gambar HTML
Di banyak tempat di situs, saya menemukan campuran gambar latar belakang yang didefinisikan oleh gambar CSS dan HTML. Lihatlah contoh berikut:<div style="background-image: url(me.jpg);"></div>
<img alt="" src="me.jpg">
Saya melihat ini di profil pengguna, dan dalam komponen yang digunakan dalam pembentukan tata letak kotak. Menariknya, properti opacity
elemen <img>
diatur ke 0
. Sumber gambar aktif adalah properti background-image
. Selain itu, properti digunakan di sini background-size: cover
yang menghindari distorsi gambar.Saya mencoba melakukan yang sebaliknya, yaitu untuk menampilkan elemen <img>
dan menyembunyikan latar belakang CSS, dan membandingkan tata letak kotak. Hasil perbandingan ini ditunjukkan di bawah ini.Di sebelah kiri adalah opsi di mana gambar latar belakang digunakan, dan di sebelah kanan adalah opsi di mana gambar HTML digunakan.Jelas, gambar di sebelah kanan terdistorsi! Saya tidak tahu mengapa tim pengembangan tidak menggunakan properti CSSobject-fit: cover
untuk mencegah distorsi. Dan saya ingin tahu mengapa dua gambar digunakan di sini.Setel Ulang Gaya
Saya perhatikan satu pola, yang merupakan penggunaan konstan dari kelas CSS yang ditambahkan ke elemen <div>
. Berikut ini adalah CSS yang relevan:.css-1dbjc4n {
align-items: stretch;
border: 0 solid black;
box-sizing: border-box;
display: flex;
flex-basis: auto;
flex-direction: column;
flex-shrink: 0;
margin-bottom: 0px;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
min-height: 0px;
min-width: 0px;
padding-bottom: 0px;
padding-left: 0px;
padding-right: 0px;
padding-top: 0px;
position: relative;
z-index: 0;
}
Gaya ini berlaku untuk setiap elemen <div>
pada halaman. Mengapa? Apakah pengaturan ulang gaya CSS tidak cukup di sini?Beberapa gaya yang dijelaskan di atas cukup dimengerti oleh saya, semacam min-width: 0
, karena ada beberapa koneksi dengan Flexbox. Tapi bagaimana dengan lekukan, lekukan, batas? Mengapa satu elemen <div>
perlu direset gaya, mengingat fakta bahwa elemen ini tidak memiliki properti yang sesuai?Flexbox dan min-width: 0
Nilai default dari properti min-width
adalah auto
, yang ternyata nol. Ketika sesuatu ditampilkan sebagai elemen fleksibel, nilai propertinya min-width
sama dengan ukuran isinya. Mengizinkan perilaku ini dapat melanggar tata letak jika konten elemen lebih besar dari itu.Untuk menghindari masalah ini, Anda perlu mengatur ulang properti min-width
untuk keturunan elemen-fleksibel.Elemen Flex dan pembungkus FlexboxTata letak yang ditunjukkan di atas menunjukkan apa yang mungkin terjadi jika konten elemen flex terlalu panjang. Perhatikan bahwa teks melampaui batas elemen pembungkus. Tetapi apa yang terjadi ketika menggunakan propertimin-width: 0
.Konten tidak melampaui elemen fleksibelMenggunakan posisi: properti lengket
Saya perhatikan penggunaan properti position: sticky
di sidebar kanan Twitter (di mana tren media dan rekomendasi mengenai pengguna untuk diikuti ditampilkan). Tampaknya menarik bagi saya bagaimana pekerjaan dengan nilai properti diatur bottom
dan top
ketika menggulir. Nilai default adalah sebagai berikut:.sidebar {
position: sticky;
width: 350px;
bottom: -470.5px;
}
Saat halaman bergulir ke bawah, properti bottom
diganti dengan properti top: -480.5px
. Saya pikir perancang melakukan ini untuk memungkinkan pengguna mencapai ujung bilah sisi terlebih dahulu. Properti top
ditambahkan setelah itu.Elemen Pemisah
Sama seperti dalam desain Facebook yang saya analisis sebelumnya, dalam desain Twitter, di banyak tempat, elemen pemisah digunakan. Semua ini adalah elemen fleksibel yang lebarnya diatur menggunakan properti flex-basis
.Elemen Pemisah Elemenpertama yang ditunjukkan pada gambar sebelumnya menggunakan properti saat mengatur elemen pemisahflex-grow: 1
. Yang kedua menggunakan lebar tetap yang ditentukan dalam piksel.Membuat Konten Tweet
TweetDi atas dibuat oleh saya tweet. Sekilas, mungkin tampak bahwa kita memiliki elemen di hadapan kita<p>
atau<span>
, di mana teks ditambahkan. Tetapi, ternyata, setiap smiley diwakili oleh tag yang terpisah<span>
, dan jika teks berada di antara dua elemen tersebut, itu juga dibuat sebagai tag<span>
.Desain teks tweetEmoticon - ini<span>
, di mana ada elemen<div>
,<div>
berisi dua gambar. Salah satunya adalah latar belakang CSS, yang kedua adalah gambar HTML.Karena kalimat pertama dibungkus dengan tag<span>
, harus ada pemisah antara itu dan elemen dari tingkat yang sama seperti itu. Desainer menambahkan baris baru di awal kalimat kedua untuk memisahkan kalimat.Kalimat keduaMenggunakan nilai yang dihitung untuk memisahkan item
Tombol KembaliSaat melakukan pencarian di Twitter, atau saat membuka halaman profil, tombol dapat dilihat
. Gaya telah diterapkan pada tombol inimargin-left: -4px
, menentukan indentasi kiri luar negatif. Saya tertarik dengan prosedur untuk menghitung nilai ini..back-button {
margin-left: calc(5px + (-1 * (39px - 1.5em)) / 2);
}
Perhitungan di atas menghasilkan nilai -4px
. Kenapa tidak bertanya saja -4px
? Apakah ini lebih baik dalam hal ini daripada menggunakan fungsi calc()
?Lebar tautan navigasi
Tautan navigasiSejak hari pertama, ketika saya menemukan panel tautan navigasi, saya perhatikan bahwa ketika Anda mengarahkan kursornya, lebarnya sama dengan kontennya. Saya bertanya-tanya mengapa tidak membuat ikon dan label menutupi seluruh lebar elemen navigasi.Di sini, perhatian saya tertuju pada penggunaan propertiflex-direction: column
untuk setiap elemen bilah navigasi. Mengapa? Apakah ini perlu dalam situasi di mana hanya satu anak digunakan di sini?Indentasi eksternal ditambahkan untuk berjaga-jaga
Lekukan yang dimaksud hadir dalam desain untuk mencegah perilaku tata letak halaman yang tidak diinginkan. Saya menarik perhatian pada dua contoh penggunaan indentasi yang ditambahkan ke elemen, sehingga bisa dikatakan, "berjaga-jaga". Mari lihat mereka.Lekukan ditambahkan ke elemen "berjaga-jaga". Di sebelah kiri adalah konten normal elemen. Di sebelah kanan adalah konten yang terasa lebih lama dari biasanya.Perhatikan apa yang terjadi ketika konten elemen terasa lebih lama dari konten normalnya. Yaitu, hal berikut terjadi di sini:- Teks terpotong.
- Ada lekukan di antara elemen-elemen.
Lekukan eksternal memainkan peran placeholder, yang mencegah elemen dari menempati seluruh ruang. Jika Anda mempertimbangkan ini tepat waktu, Anda dapat menghindari masalah tak terduga yang mungkin timbul selama proyek. Disarankan agar Anda selalu menguji tata letak halaman menggunakan konten yang panjangnya lebih dari "normal".Modal windows di area tampilan kecil
Saya memeriksa jendela pengeditan profil modal. Ternyata pada ketinggian tertentu area tampilan, tombol untuk Save
jendela seperti itu tidak tersedia. Ini tampilannya.Tombol Simpan tidak dapat diaksesKarena jendela modal tidak mendukung pengguliran,Save
saya tidakdapat membuka tombol. Tetapi jendela yang digunakan untuk mengontrol tampilan elemen mendukung ketinggian dinamis dan gulir.Jendela yang mendukung perubahan ketinggian dinamis.Mengapa satu jendela mendukung pengguliran dan yang lainnya tidak? Sangat menarik untuk mengetahui yang mana, menurut desainer Twitter, yang lebih penting? Adapun saya - ini persis jendela yang digunakan untuk mengedit profil.Apakah Anda berencana mengadopsi ide apa pun dari desain Twitter?