Katakanlah saya punya HTML ini:
<h3>Features</h3>
<ul>
<li><img src="alphaball.png">Smells Good</li>
<li><img src="alphaball.png">Tastes Great</li>
<li><img src="alphaball.png">Delicious</li>
<li><img src="alphaball.png">Wholesome</li>
<li><img src="alphaball.png">Eats Children</li>
<li><img src="alphaball.png">Yo' Mama</li>
</ul>
dan CSS ini:
li { text-align:center; display:inline-block; padding:0.1em 1em }
img { width:64px; display:block; margin:0 auto }
Hasilnya bisa dilihat di sini: http://jsfiddle.net/YMN7U/1/
Sekarang bayangkan saya ingin memecah ini menjadi tiga kolom, setara dengan menyuntikkan <br>
setelah ketiga <li>
. (Sebenarnya melakukan hal itu secara semantik dan sintaksis tidak valid.)
Saya tahu cara memilih yang ketiga <li>
dalam CSS, tetapi bagaimana cara memaksa pemecah baris setelahnya? Ini tidak bekerja:
li:nth-child(4):after { content:"xxx"; display:block }
Saya juga tahu bahwa kasus khusus ini dimungkinkan dengan menggunakan float
alih-alih inline-block
, tetapi saya tidak tertarik menggunakan solusi float
. Saya juga tahu bahwa dengan blok lebar tetap ini dimungkinkan dengan mengatur lebar pada induk ul
menjadi sekitar 3x lebar itu; Saya tidak tertarik dengan solusi ini. Saya juga tahu bahwa saya dapat menggunakan display:table-cell
jika saya menginginkan kolom yang nyata; Saya tidak tertarik dengan solusi ini. Saya tertarik pada kemungkinan memaksa jeda dalam konten inline.
Sunting : Agar jelas, saya tertarik pada 'teori', bukan solusi untuk masalah tertentu. Bisakah CSS menyuntikkan satu baris di tengah display:inline(-block)?
elemen, atau apakah itu mustahil? Jika Anda yakin itu tidak mungkin, itu adalah jawaban yang dapat diterima.
Jawaban:
Saya sudah bisa membuatnya bekerja pada elemen LI inline. Sayangnya, itu tidak berfungsi jika elemen LI adalah inline-block:
Demo langsung: http://jsfiddle.net/dWkdp/
Atau versi catatan tebing:
sumber
:after
selalu mencetak sebagai teks lurus.\A
adalah karakter umpan baris ... ini pelarianAnda tidak tertarik pada banyak "solusi" untuk masalah Anda. Saya kira tidak ada cara yang baik untuk melakukan apa yang ingin Anda lakukan. Apa pun yang Anda masukkan menggunakan
:after
dancontent
memiliki validitas sintaksis dan semantik yang persis sama dengan yang akan dilakukan jika Anda baru saja menuliskannya di sana sendiri.Alat CSS menyediakan pekerjaan. Anda hanya harus mengapung
li
dan kemudianclear: left
ketika Anda ingin memulai baris baru, seperti yang telah Anda sebutkan:Lihat sebuah contoh: http://jsfiddle.net/marcuswhybrow/YMN7U/5/
sumber
:after
akan valid secara sintaksis atau ide yang baik, karena sudah ada alat di tempat untuk melakukan ini. Karena itu jawabannya.float: center
.Ketika menulis ulang html diperbolehkan, Anda dapat membuat sarang
<ul>
di dalam<ul>
dan membiarkan tampilan dalam<li>
sebagai blok-inline. Ini juga semantik masuk akal IMHO, karena pengelompokan juga tercermin dalam html.Demo
sumber
Cara mudah untuk membagi daftar menjadi baris adalah dengan melayang item daftar individual dan kemudian item yang ingin Anda buka ke baris berikutnya Anda dapat menghapus float.
sebagai contoh
sumber
float
pengaturan menimpainline-block
pengaturan. Mereka tidak benar-benar hidup berdampingan bersamaSaya tahu Anda tidak ingin menggunakan pelampung dan pertanyaannya hanya teori tetapi jika ada yang menemukan ini berguna, inilah solusi menggunakan pelampung.
Tambahkan kelas kiri ke
li
elemen Anda yang ingin Anda apung:dan ubah CSS Anda sebagai berikut:
http://jsfiddle.net/chut319/xJ3pe/
Anda tidak perlu menentukan lebar atau blok sebaris dan bekerja sejauh IE6.
sumber
Saya menyelesaikan ini dengan membuat pemilih :: before untuk elemen inline pertama di baris, dan membuat pemilih itu blok dengan margin atas atau bawah untuk memisahkan baris sedikit.
sumber
Perhatikan bahwa ini akan berhasil, tergantung bagaimana Anda merender halaman. Tetapi bagaimana kalau hanya memulai daftar unordered baru?
yaitu
sumber
Solusi yang lebih baik adalah menggunakan -webkit-kolom: 2;
http://jsfiddle.net/YMN7U/889/
sumber
Mungkin itu sepenuhnya mungkin dengan hanya CSS tetapi saya lebih suka menghindari "melayang" sebanyak yang saya bisa karena itu mengganggu ketinggian orang tua itu.
Jika Anda menggunakan jQuery, Anda dapat membuat plugin `wrapN` sederhana yang mirip dengan` wrapAll` kecuali itu hanya membungkus elemen "N" dan kemudian memecah dan membungkus elemen "N" berikutnya menggunakan loop. Kemudian atur kelas pembungkus Anda ke `display: block;`.
Berikut ini adalah JSFiddle dari produk jadi:
http://jsfiddle.net/dustinpoissant/L79ahLoz/
sumber