Jika beberapa elemen halaman web berdekatan satu sama lain, maka pengguna merasa bahwa elemen-elemen ini memiliki kesamaan. Pengelompokan elemen membantu pengguna memahami hubungan mereka dengan mengevaluasi jarak di antara mereka. Jika semua elemen terletak pada jarak yang sama satu sama lain, akan sulit bagi pengguna untuk menelusuri halaman untuk mencari tahu mana dari mereka yang terkait satu sama lain dan mana yang tidak. Artikel ini didedikasikan untuk semua yang perlu Anda ketahui tentang pengaturan jarak antar elemen dan tentang pengaturan ruang elemen internal. Secara khusus, kita akan berbicara tentang situasi mana yang layak menggunakan padding internal, dan di mana - eksternal (margin).
Jenis jarak CSS
Jarak antara elemen dan bagian-bagiannya, dapat disesuaikan dengan CSS, terdiri dari dua jenis. Mereka, dalam kaitannya dengan elemen, dibagi menjadi internal dan eksternal. Bayangkan kita memiliki elemen. Jika di dalamnya ada jarak tertentu antara beberapa bagiannya, maka ini adalah indentasi internal. Jika kita berbicara tentang jarak antara elemen-elemen individual - ini adalah indentasi luar.Ruang dalam dan ruang luarDalam CSS, jarak antara elemen dan komponennya dapat disesuaikan sebagai berikut:.element {
padding: 1rem;
margin-bottom: 1rem;
}
Properti padding
digunakan di sini untuk menyesuaikan indentasi, dan properti margin
digunakan untuk mengkonfigurasi indentasi. Semuanya sangat sederhana. Kebenaran? Tetapi menyesuaikan jarak dalam CSS bisa sangat rumit jika Anda bekerja dengan komponen yang memiliki banyak bagian kecil dan anak-anak.▍ Properti Margin - Indent
Properti ini margin
digunakan untuk mengatur jarak antara elemen individu. Sebagai contoh, contoh sebelumnya menggunakan properti CSS margin-bottom: 1rem
untuk menambahkan jarak vertikal antara dua elemen yang terletak satu di atas yang lain.Lekukan eksternal dapat diatur untuk empat sisi elemen (atas, kanan, bawah, kiri - atas, kanan, bawah, kiri). Oleh karena itu, sebelum beralih ke contoh dan diskusi tentang berbagai cara pengaturan jarak, penting untuk menjelaskan beberapa konsep dasar.▍ Tutup bantalan luar
Jika kita menggambarkan konsep "keruntuhan margin luar" dengan kata-kata sederhana, maka kita dapat mengatakan bahwa ini terjadi jika dua elemen yang terletak satu di atas yang lain memiliki margin luar, dan indentasi salah satunya lebih besar daripada indentasi yang lain. Dalam hal ini, indentasi yang lebih besar akan digunakan, dan yang lebih kecil akan diabaikan.Lekukan yang lebih besar menang.Pada diagram di atas, properti dikonfigurasikan pada elemen atas dan propertimargin-bottom
pada elemen bawahmargin-top
. Jarak vertikal antara elemen-elemen sesuai dengan indentasi yang lebih besar.Untuk menghindari masalah ini, disarankan untuk mengkonfigurasi lekukan yang sama di semua elemen (seperti dijelaskan di sini ). Dan inilah fakta menarik lainnya. Sumber daya Trik CSSmemberikan suara pada penggunaan propertimargin-bottom
danmargin-top
. Ternyata, properti itumargin-bottom
menang, mengambil 61% suara.Inilah cara mengatasi masalah ini:.element:not(:last-child) {
margin-bottom: 1rem;
}
Menggunakan pemilih CSS :not
membuatnya mudah untuk menghapus indentasi luar dari anak terakhir untuk menghilangkan ruang yang tidak perlu di antara elemen-elemen.→ Ini adalah demo bekerja dengan margin luar.Contoh lain yang terkait dengan collapsing margin luar terkait dengan elemen anak dan orang tua. Misalkan Anda memiliki HTML berikut:<div class="parent">
<div class="child">I'm the child element</div>
</div>
Inilah gayanya:.parent {
margin: 50px auto 0 auto;
width: 400px;
height: 120px;
}
.child {
margin: 50px 0;
}
Beginilah hasil dari memvisualisasikan semua ini.Anak dan orang tuaPerhatikan bahwa anak berbatasan dengan bagian atas orang tua. Ini adalah hasil dari keruntuhan margin luar mereka. Menurut W3C , ada beberapa opsi untuk menyelesaikan masalah ini:- Menambahkan properti
border
ke elemen induk. - Menetapkan properti
display
elemen anak ke nilai inline-block
.
Solusi yang lebih dapat dimengerti untuk masalah ini adalah dengan mengatur properti dari padding-top
elemen induk.Mengatur indentasi atas elemen induk▍ Indentasi Negatif
Nilai negatif dapat digunakan untuk indentasi luar. Dalam beberapa kasus, teknik ini sangat berguna. Lihatlah gambar berikut.Hasil pengaturan properti padding dari elemeninduk Elemen induk memiliki propertipadding: 1rem
. Ini menyebabkan anak memiliki offset dari atas, kiri, dan kanan. Tetapi anak harus berdekatan dengan perbatasan orang tua. Margin luar negatif akan membantu untuk mencapai ini..parent {
padding: 1rem
}
.child {
margin-left: -1rem;
margin-right: -1rem;
margin-top: -1rem;
}
Itulah yang terjadi sebagai akibat dari gaya seperti itu.Margin luar negatif anak membantu mencapai efek yang diinginkan→ Berikut ini demonstrasi.Jika Anda tertarik dengan topik margin luar negatif, saya sarankanartikel ini .▍ Properti Padding - bantalan dalam
Seperti yang telah disebutkan, properti padding
memungkinkan Anda untuk mengontrol ruang di dalam elemen. Tujuan penerapan properti ini tergantung pada situasi di mana ia digunakan.Misalnya, ini dapat digunakan untuk menambah ruang di sekitar tautan. Ini mengarah pada peningkatan ruang tautan yang dapat diklik .Diindentasi dengan warna hijau▍ Situasi di mana properti padding tidak berfungsi
Penting untuk dicatat bahwa lekukan vertikal tidak berfungsi dengan elemen yang memiliki properti display: inline
. Sebagai contoh, ini adalah elemen <span>
dan <a>
. Jika Anda mengonfigurasi properti padding
elemen seperti itu, pengaturan seperti pada elemen ini tidak akan berfungsi. Ini hanya pengingat ramah bahwa elemen sebaris perlu mengubah properti display
:.element span {
display: inline-block;
padding-top: 1rem;
padding-bottom: 1rem;
}
Spasi Antara Elemen Layout Kotak CSS
Di Grid CSS, Anda dapat dengan mudah menyesuaikan jarak antara kolom dan baris menggunakan properti grid-gap
. Ini adalah singkatan untuk properti yang menentukan jarak antara kolom dan baris.Jarak antara kolom dan baris.element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 16px;
}
Catatan lengkap dari properti ini terlihat seperti ini:.element {
display: grid;
grid-template-columns: 1fr 1fr;
grid-row-gap: 24px;
grid-column-gap: 16px;
}
Ruang Antara Elemen CSS pada Tata Letak Flexbox
Ada satu properti yang disarankan untuk tata letak kotak dan flexbox. Ini properti gap
. Saat ini, hanya Firefox yang mendukungnya ..element {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
Selain itu, properti ini tidak dapat digunakan dengan CSS @supports
untuk menentukan apakah didukung, dan untuk membuat keputusan yang tepat berdasarkan ini. Jika Anda menyukai properti ini - pilih untuk menambahkannya ke Chrome.Elemen Posisi dalam CSS
Mungkin penentuan posisi elemen tidak dapat secara langsung dikaitkan dengan cara untuk menyesuaikan jarak di antara mereka, tetapi dalam beberapa kasus, penentuan posisi memainkan peran. Misalnya, jika ada elemen anak yang benar-benar diposisikan yang perlu ditempatkan di 16px
tepi kiri dan atas elemen induk.Perhatikan contoh berikut. Ada kartu di mana ada ikon yang perlu ditempatkan agak jauh dari tepi atas dan kiri elemen induk. Untuk mencapai efek ini, Anda dapat menggunakan gaya berikut:.category {
position: absolute;
left: 16px;
top: 16px;
}
Jarak antara batas-batas elemen induk dan anak disorot dalam warna hijau.Gunakan Skenario dan Studi Kasus
Pada bagian ini, kita akan melihat skenario untuk menggunakan cara untuk mengatur jarak antar elemen. Sesuatu yang serupa mungkin muncul dalam pekerjaan harian Anda dengan CSS.▍ Komponen tajuk
Komponen adalah header yang memiliki pengaturan berikut: margin kiri dan kanan, ruang di sekitar logo, ruang di sekitar elemen navigasi, jarak antara elemen navigasi dan nama pengguna.Dalam hal ini, komponen header memiliki logo, area navigasi, dan area di mana informasi ditampilkan tentang profil pengguna. Bisakah Anda menebak seperti apa kode stylization dari elemen seperti itu? Di sini, untuk membuatnya lebih mudah, markup skematis dari elemen seperti itu:<header class="c-header">
<h1 class="c-logo"><a href="#">Logo</a></h1>
<div class="c-header__nav">
<nav class="c-nav">
<ul>
<li><a href="#">...</a></li>
</ul>
</nav>
<a href="#" class="c-user">
<span>Ahmad</span>
<img class="c-avatar" src="shadeed.jpg" alt="">
</a>
</div>
</header>
Margin dalam dan luar Marginkiri dan kanan digunakan. Tujuannya adalah untuk memastikan bahwa isi tajuk tidak melekat pada tepinya..c-header {
padding-left: 16px;
padding-right: 16px;
}
Saat mengatur tautan navigasi, seseorang harus memperhitungkan fakta bahwa masing-masing dari mereka harus memiliki ruang internal yang cukup baik secara vertikal maupun horizontal. Karena ini, area yang dapat diklik mereka akan cukup besar, yang akan meningkatkan aksesibilitas proyek..c-nav a {
display: block;
padding: 16px 8px;
}
Jika kita berbicara tentang jarak antara unsur-unsur, maka Anda dapat menggunakan properti margin
, atau - Anda dapat mengubah properti dari display
elemen <li>
untuk inline-block
. Karena itu, ruang kecil ditambahkan antara elemen-elemen yang terletak pada tingkat yang sama, karena fakta bahwa elemen-elemen tersebut dianggap sebagai simbol..c-nav li {
display: inline-block;
}
Akhirnya, nama pengguna dan avatar memiliki indentasi luar kiri..c-user img,
.c-user span {
margin-left: 10px;
}
Harap dicatat bahwa jika Anda membuat situs web multibahasa, disarankan untuk menggunakan properti CSS logis dalam situasi ini :.c-user img,
.c-user span {
margin-inline-start: 1rem;
}
Jarak sebelum dan sesudah pemisah tidak sama.Perhatikan bahwa jarak sebelum dan sesudah pemisah tidak sama. Alasannya adalah lebar blok navigasi tidak disetel. Sebaliknya, hanya indentasi internal yang dikonfigurasi di sini. Akibatnya, lebar elemen navigasi tergantung pada kontennya. Berikut adalah solusi untuk masalah ini:- Mengatur lebar minimum untuk item navigasi.
- Tingkatkan lekukan horisontal.
- Menambahkan indentasi tambahan di sisi kiri pemisah.
Cara terbaik dan termudah adalah dengan menggunakan metode ketiga, yaitu mengkonfigurasi properti margin-left
:.c-user {
margin-left: 8px;
}
→ Ini demo▍ Jarak dalam tata letak kotak - CSS Flexbox
Layout grid adalah tempat di mana teknologi untuk mengatur jarak antar elemen sering digunakan. Perhatikan contoh berikut.Layout GridKita perlu mengatur jarak antara baris dan kolom tabel. Ini markupnya:<div class="wrapper">
<div class="grid grid--4">
<div class="grid__item">
<article class="card"><!-- --></article>
</div>
<div class="grid__item">
<article class="card"><!-- --></article>
</div>
<!-- .. -->
</div>
</div>
Saya biasanya lebih suka menyimpan komponen dalam keadaan enkapsulasi dan menghindari pengaturan indentasi luarnya. Untuk alasan ini, saya memiliki elemen grid_item
di mana elemen kartu akan ditemukan..grid--4 {
display: flex;
flex-wrap: wrap;
}
.grid__item {
flex-basis: 25%;
margin-bottom: 16px;
}
Berkat kode CSS ini, akan ada empat kartu di setiap baris. Berikut adalah salah satu cara yang mungkin untuk mengatur jarak di antara mereka:.grid__item {
flex-basis: calc(25% - 10px);
margin-left: 10px;
margin-bottom: 16px;
}
Dengan menggunakan fungsi CSS, calc()
indentasi dikurangi flex-basis
. Seperti yang Anda lihat, ini bukan solusi yang sederhana. Saya sebenarnya lebih suka yang berikut ini:- Setel properti item kisi
padding-left
. - Atur elemen induk untuk memiliki margin luar negatif
margin-left
dengan nilai yang sama dengan y padding-left
.
Saya belajar tentang metode ini bertahun-tahun yang lalu, setelah membaca di sini beberapa artikel, yang namanya sudah dilupakan (jika Anda tahu artikel seperti apa - tolong beri tahu saya)..grid--4 {
display: flex;
flex-wrap: wrap;
margin-left: -10px;
}
.grid__item {
flex-basis: 25%;
padding-left: 10px;
margin-bottom: 16px;
}
Alasan saya menggunakan nilai negatif untuk di sini margin-left
adalah karena kartu pertama memiliki properti padding-left
yang, pada kenyataannya, tidak diperlukan. Akibatnya, saya memindahkan elemen pembungkus ke kiri dan menyingkirkan ruang yang tidak perlu.→ Ini adalah contoh yang berfungsi.Gagasan lain yang serupa adalah menggunakan indentasi dan indentasi negatif. Ini adalah contoh dari situs Facebook.Margin dalam dan luarBerikut adalah kode CSS yang menggambarkan ide ini:.wrapper {
margin-left: -4px;
margin-right: -4px;
}
.story {
padding-left: 4px;
padding-right: 4px;
}
Istance Jarak dalam tata letak kotak - Kotak CSS
Dan sekarang - bagian terbaik! Dalam tata letak berbasis CSS Grid, jarak antar elemen sangat mudah untuk disesuaikan menggunakan properti grid-gap
. Selain itu, Anda tidak perlu khawatir tentang lebar elemen dan batas eksternal yang lebih rendah. Layout grid CSS menangani semua ini..grid--4 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 1rem;
}
Itu saja. Saya percaya tidak ada yang akan berpendapat bahwa mengatur tata letak Grid lebih mudah dan lebih mudah dipahami daripada mengatur tata letak Flexbox.▍Mengatur jarak antar elemen hanya jika perlu
Dalam tata letak Grid, saya sangat menyukai kenyataan bahwa properti grid-gap
hanya diterapkan ketika harus ada jarak antara elemen. Lihatlah tata letak berikut.Tata letak grid di mana elemen-elemen di lingkungan ponsel diatur secara vertikal, dan di desktop - secara horizontal.Adabagian situs dengan dua kartu. Saya membutuhkan mereka untuk dipisahkan baik dalam lingkungan mobile, dengan susunan kartu vertikal, dan pada desktop, dengan susunan horizontal mereka. Tanpa CSS Grid, fleksibilitas tata letak seperti itu tidak mungkin tercapai. Lihatlah kode berikut:.card:not(:last-child) {
margin-bottom: 16px;
}
@media (min-width: 700px) {
.card:not(:last-child) {
margin-bottom: 0;
margin-left: 1rem;
}
}
Sangat tidak nyaman. Kebenaran? Bagaimana dengan gaya selanjutnya?.card-wrapper {
display: grid;
grid-template-columns: 1fr;
grid-gap: 1rem;
}
@media (min-width: 700px) {
.card-wrapper {
grid-template-columns: 1fr 1fr;
}
}
Sudah selesai! Dan semuanya jauh lebih sederhana.▍Bekerja dengan indentasi luar bawah
Misalkan kita memiliki komponen-komponen berikut yang terletak satu di atas yang lain. Masing-masing dari mereka memiliki indentasi luar yang lebih rendah.Seperangkat komponen yang disusun secara horizontalPerhatikan bahwa ada margin luar bawah untuk elemen terakhir. Dan ini salah, karena indentasi seharusnya hanya ada di antara elemen.Anda dapat memperbaiki masalah ini dengan menggunakan salah satu solusi yang sekarang akan kami analisis.Solusi # 1: pemilih CSS: tidak
.element:not(:last-child) {
margin-bottom: 16px;
}
Solusi No. 2: kombinasi elemen tetangga dari tingkat yang sama
.element + .element {
margin-top: 16px;
}
Analisis keputusan
Meskipun solusi # 1 tampaknya lebih menarik, ia memiliki kelemahan berikut:- Ini mengarah ke masalah spesifik CSS. Itu tidak dapat didefinisikan ulang sampai pemilih digunakan
:not
. - Itu tidak berlaku ketika ada lebih dari satu kolom item. Ini diilustrasikan di bawah ini.
Dua kolom elemen dan masalah solusi No. 1Jika kita berbicara tentang solusi No. 2, maka penerapannya tidak mengarah pada masalah dengan spesifisitas. Benar, solusi ini juga hanya cocok dalam kasus-kasus ketika datang ke satu kolom elemen.Dalam situasi ini, yang terbaik adalah mengambil keputusan untuk menghapus ruang yang tidak perlu dengan menambahkan lekukan eksternal negatif ke elemen induk:.wrapper {
margin-bottom: -16px;
}
Di sini hal berikut terjadi. Berkat pengaturan ini, elemen digeser ke bawah dengan jarak yang sama dengan lekukan eksternal yang ditentukan. Tapi di sini Anda harus berhati-hati untuk tidak mengatur indentasi eksternal saat menggunakan elemen yang tumpang tindih.▍ Kartu Komponen
Sekarang saya ingin membahas secara rinci pengaturan kartu komponen. Mungkin pada akhirnya saya akan mendapatkan seluruh buku tentang itu. Di sini saya akan mempertimbangkan pola universal untuk mengonfigurasi kartu dan berbicara tentang cara mengelolanya.Kartu komponen (jika Anda ingin makan - maaf)Pikirkan di mana tepatnya dalam kartu ini jarak antara elemen dan bagian-bagiannya digunakan. Inilah jawaban saya untuk pertanyaan ini.Margin dalam dan luarInilah markupnya:<article class="card">
<a href="#">
<div class="card__thumb"><img src="food.jpg" alt=""></div>
<div class="card__content">
<h3 class="card__title">Cinnamon Rolls</font></h3>
<p class="card__author">Chef Ahmad</p>
<div class="card__rating"><span>4.9</span></div>
<div class="card__meta"></div>
</div>
</a>
</article>
Inilah gaya kelasnya card__content
:.card__content {
padding: 10px;
}
Berkat indentasi yang ditetapkan di sini, offset untuk semua anak akan ditetapkan. Kemudian atur margin luar:.card__title,
.card__author,
.card__rating {
margin-bottom: 10px;
}
Saat mengatur pemisahan peringkat dan informasi, saya menggunakan perbatasan:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
}
Tapi di sini kita dihadapkan dengan masalah! Perbatasan tidak terikat ke tepi, yang disebabkan oleh card__content
lekukan elemen induk dengan kelas .Pemisah tidak terikat ke tepi.Anda, mungkin, sudah menebak bahwa indentasi negatif akan membantu kami di sini:.card__meta {
padding-top: 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
Tapi di sini lagi, ada yang tidak beres. Sekarang teks telah tersangkut di tepi kartu.Pemisahnya normal, tetapi isi kartu tidak terletak dengan benar.Untuk mengatasi masalah ini, Anda perlu mengonfigurasi indentasi kiri dan kanan untuk isi kartu..card__meta {
padding: 10px 10px 0 10px;
border-top: 1px solid #e9e9e9;
margin: 0 -10px;
}
Kartu dikonfigurasikan sebagaimana mestinya→ Ini adalah contohnya▍ Konten artikel
Saya yakin apa yang akan kita bicarakan di sini adalah situasi yang sangat, sangat umum. Intinya di sini adalah bahwa konten artikel biasanya pergi ke halaman dari CMS (Content Management System - sistem manajemen konten), atau dihasilkan secara otomatis berdasarkan file penurunan harga. Anda tidak dapat menentukan kelas elemen di sini.Perhatikan contoh berikut, yang menunjukkan markup yang berisi campuran judul, paragraf, dan gambar.<div class="wrapper">
<h1>Spacing Elements in CSS</h1>
<p></p>
<h2><font color="#3AC1EF">Types of Spacing</font></h2>
<img src="spacing-1.png" alt="">
<p></p>
<p></p>
<h2><font color="#3AC1EF">Use Cases</font></h2>
<p></p>
<h3><font color="#3AC1EF">▍Card Component</font></h3>
<img src="use-case-card-2.png" alt="">
</div>
Agar penampilannya layak, jarak antar elemen harus seragam dan harus digunakan secara bertanggung jawab. Saat mengerjakan contoh ini, saya meminjam beberapa gaya dari type-scale.com .h1, h2, h3, h4, h5 {
margin: 2.75rem 0 1.05rem;
}
h1 {
margin-top: 0;
}
img {
margin-bottom: 0.5rem;
}
Berikut adalah diagram halaman dengan teks artikel.Tata letak halaman dan penerapan properti margin-top dan margin-bottomJika suatu elemen<p>
diikuti oleh tajuk, misalnya, tajukTypes of Spacing
, maka propertimargin-bottom
elemen<p>
tersebut akan diabaikan. Ini, seperti yang bisa Anda tebak, adalah konsekuensi dari runtuhnya margin luar.→ Ini sebuah contoh▍ Lekukan eksternal, sebagaimana berlaku
Lihatlah tata letak berikut.Elemen dalam kondisi normal dan dalam situasi kehabisan ruangElemen tidak terlihat sangat baik ketika mereka terlalu dekat satu sama lain. Saya membuat tata letak ini menggunakan Flexbox. Teknik ini disebut "Alignment Shifting Wrapping". Saya tahu tentang namanya dari sini ..element {
display: flex;
flex-wrap: wrap;
}
Sebagai hasil dari penerapan teknik ini, pembungkus garis dilakukan jika area tampilan kurang dari batas tertentu. Ini tampilannya.Elemen anak berada pada baris baru.Di sini Anda perlu berurusan dengan situasi menengah di mana dua elemen masih bersebelahan, tetapi jarak di antara mereka adalah nol. Dalam hal ini, saya lebih memilih untuk menggunakan propertimargin-right
, yang mencegah elemen-elemen saling bersentuhan dan mempercepat responsflex-wrap
.Elemen tidak saling bersentuhanMode penulisan properti ▍CSS
Pertama kami mengutip MDN : "Properti writing-mode
menetapkan posisi horizontal atau vertikal teks, serta arah blok."Pernahkah Anda berpikir tentang bagaimana lekukan eksternal harus berperilaku ketika mereka digunakan dengan elemen yang propertinya writing-mode
berbeda dari standar? Perhatikan contoh berikut.Kartu dengan header vertikal.Berikut adalah gaya-gayanya:.wrapper {
display: flex;
}
.title {
writing-mode: vertical-lr;
margin-right: 16px;
}
Header diputar 90 derajat. Harus ada ruang kosong di antara itu dan gambar. Ternyata, properti margin-right
itu menunjukkan dirinya dengan sempurna dengan nilai properti yang berbeda writing-mode
.→ Ini contohnya.Saya yakin kita sudah membahas cukup skenario indentasi. Sekarang pertimbangkan beberapa konsep menarik.Enkapsulasi komponen
Sistem desain besar mengandung banyak komponen. Apakah logis untuk menyesuaikan margin luarnya?Perhatikan contoh berikut.Tombol<button class="button">Save Changes</button>
<button class="button button-outline">Discard</button>
Di mana saya perlu menyesuaikan jarak antara tombol? Apakah saya perlu mengkonfigurasi beberapa properti tombol kiri atau kanan? Mungkin Anda bisa menggunakan kombinasi elemen tetangga dengan level yang sama?.button + .button {
margin-left: 1rem;
}
Tidak ada yang baik tentang itu. Bagaimana jika hanya ada satu tombol? Dan bagaimana cara kerjanya pada perangkat seluler, dalam kasus ketika tombol berada secara vertikal, dan tidak horizontal? Secara umum, di sini kita dihadapkan dengan banyak pertanyaan sulit.▍Menggunakan komponen yang diabstraksi
Solusi untuk masalah di atas adalah penggunaan komponen yang diabstraksi, yang digunakan untuk menempatkan komponen lain di dalamnya. Ini, seperti yang dikatakan di sini , adalah sedikit pergeseran dalam tanggung jawab untuk mengelola padding ke elemen induk. Kami memikirkan kembali contoh sebelumnya berdasarkan ide ini.Komponen induk dan anak<div class="list">
<div class="list__item">
<button class="button">Save Changes</button>
</div>
<div class="list__item">
<button class="button button-outline">Discard</button>
</div>
</div>
Harap dicatat bahwa ada elemen pembungkus. Setiap tombol memiliki pembungkusnya sendiri..list {
display: flex;
align-items: center;
margin-left: -1rem;
}
.list__item {
margin-left: 1rem;
}
Itu saja! Dan terlebih lagi, konsep ini mudah diterapkan pada kerangka JavaScript apa pun. Contohnya:<List>
<Button>Save Changes</Button>
<Button outline>Discard</Button>
</List>
Dan alat JS yang digunakan harus meletakkan setiap elemen dalam pembungkusnya sendiri.Komponen Digunakan sebagai Pemisah
Jika Anda ragu membaca judulnya dengan benar - jangan ragu. Kita berbicara tentang komponen yang digunakan sebagai pemisah. Secara khusus, di sini saya merujuk pada artikel ini , yang membahas konsep yang menghindari penggunaan indentasi dan menggunakan komponen pemisah sebagai gantinya.Bayangkan bahwa di bagian tertentu dari situs Anda memerlukan indentasi luar kiri ukuran 24px
. Dalam hal ini, persyaratan berikut diajukan untuk indentasi:- Lekukan eksternal tidak boleh dikonfigurasikan secara langsung pada komponen, karena merupakan bagian dari sistem desain yang sudah dibuat.
- Lekukan harus fleksibel. Pada satu halaman dapat memiliki ukuran
X
, dan di sisi lain - ukuran Y
.
Saya pertama kali memperhatikan trik ini saat menjelajahi desain Facebook baru .Elemen Pemisah Desain FacebookDi sini digunakan sebagai elemen pemisah<div>
dengan gaya inlinewidth: 16px
. Tujuan utamanya adalah untuk menambah ruang kosong antara elemen kiri dan elemen kontainer.Berikut ini kutipan darimanual pelatihan Bereaksi ini : “Tetapi di dunia nyata, kita membutuhkan ruang yang ditentukan di luar komponen untuk mengatur komponen menjadi halaman dan adegan. Di sinilah pengaturan indentasi luar masuk ke dalam kode komponen untuk menyesuaikan jarak antara komponen ketika mereka dirakit. ”Saya setuju dengan itu. Dalam sistem desain besar, menambahkan lekukan ke komponen akan tidak rasional. Ini akan menghasilkan kode yang tidak terlalu bagus.▍ Masalah komponen pemisah
Sekarang setelah Anda membiasakan diri dengan gagasan komponen pemisah, mari kita bicara tentang beberapa masalah yang diperkirakan terjadi ketika bekerja dengannya. Inilah beberapa pertanyaan yang saya pikirkan:- Bagaimana komponen pemisah mengambil ruang dalam komponen induk? Bagaimana dia berperilaku dalam tata letak horizontal dan vertikal? Sebagai contoh, bagaimana komponen seperti itu memisahkan komponen secara vertikal dan horizontal?
- Apakah saya perlu menata komponen ini berdasarkan properti
display
dari komponen induk (Flexbox, Grid)?
Mari kita periksa pertanyaan-pertanyaan ini.▍ Ukuran komponen pemisah
Anda dapat membuat komponen pemisah yang menerima berbagai parameter. Saya bukan pengembang JavaScript, tetapi saya rasa inilah yang disebut "alat peraga". Perhatikan contoh berikut, diambil dari sini .Ada komponen pemisah yang terletak di antara Header
dan Section
.<Header />
<Spacer mb={4} />
<Section />
Dan ini adalah situasi yang sedikit berbeda. Di sini, pemisah digunakan untuk membuat jarak yang dapat diatur secara otomatis antara logo (komponen Logo
) dan area navigasi yang diwakili oleh komponen Link
.<Flex>
<Logo />
<Spacer m="auto" />
<Link>Beep</Link>
<Link>Boop</Link>
</Flex>
Tampaknya menerapkan pemisah seperti itu menggunakan CSS sangat sederhana, dan itu cukup untuk menggunakan desain justify-content: space-between
. Tetapi bagaimana jika Anda perlu mengubah desain? Dalam hal ini, Anda harus mengubah stylization.Lihatlah contoh berikut. Apakah kode ini terlihat fleksibel?<Flex>
<Logo />
<Link>Beep</Link>
<Link>Boop</Link>
<Spacer m="auto" />
<Link>Boop</Link>
</Flex>
Dalam hal ini, stilisasi perlu diubah.Dalam hal ukuran, kita dapat mengatakan bahwa ukuran pemisah dapat disesuaikan berdasarkan ukuran elemen induk. Dalam kasus di atas, mungkin masuk akal untuk membuat properti grow
yang diatur ke nilai dalam CSS flex-grow: 1
.<Flex>
<Spacer grow="1" />
</Flex>
▍Gunakan elemen pseudo
Gagasan lain yang muncul di benak saya adalah menggunakan elemen semu untuk membuat pemisah..element:after {
content: "";
display: block;
height: 32px;
}
Mungkin kita memiliki kesempatan untuk membuat elemen pseudo sebagai pemisah, dan tidak menggunakan elemen terpisah untuk ini? Contohnya:<Header spacer="below" type="pseudo" length="32">
<Logo />
<Link>Home</Link>
<Link>About</Link>
<Link>Contact</Link>
</Header>
Sejauh ini, saya belum menggunakan komponen pemisah di proyek saya. Tapi saya mencari skenario di mana mereka bisa berguna bagi saya.Fungsi matematika CSS min (), max (), clamp ()
Bisakah lekukan menjadi dinamis? Misalnya, apakah mungkin untuk menggunakan lekukan seperti itu, ukuran minimum dan maksimum yang tergantung pada lebar area tampilan? Saya dapat menjawab pertanyaan ini secara positif. Fungsi CSS, menurut data CanIUse , didukung oleh semua browser terkemuka.Ingat tata letak Grid dan bicarakan bagaimana indentasi dinamis dapat digunakan di dalamnya..wrapper {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: min(2vmax, 32px);
}
Konstruksi min(2vmax, 32px)
artinya sebagai berikut: gunakan jarak yang sama 2vmax
dengan tetapi tidak melebihi 32px
.→ Ini adalah demonstrasi video dari tata letak semacam itu→ Ini adalah contohnya.Fleksibilitas semacam itu sungguh menakjubkan. Ini memberi kami banyak peluang untuk membuat tata letak halaman web yang dinamis dan fleksibel.Ringkasan
Pada artikel ini, kami memeriksa fitur menyesuaikan jarak antara elemen halaman web menggunakan CSS dan berbicara tentang mengelola ruang internal elemen. Kami harap Anda merasa berguna apa yang Anda pelajari hari ini.Pembaca yang budiman! Alat apa yang paling sering Anda gunakan untuk menyesuaikan jarak antara elemen halaman web?