Apakah ada alasan untuk menggunakan <div style="display:inline-block">
bukan <span>
untuk tata letak halaman web?
Bisakah saya menempatkan konten bersarang di dalam rentang? Apa yang valid dan apa yang tidak?
Tidak apa-apa menggunakan ini untuk membuat tabel 3x2 seperti tata letak?
<div>
<span> content1(divs,p, spans, etc) </span>
<span> content2(divs,p, spans, etc) </span>
<span> content3(divs,p, spans, etc) </span>
</div>
<div>
<span> content4(divs,p, spans, etc) </span>
<span> content5(divs,p, spans, etc) </span>
<span> content6(divs,p, spans, etc) </span>
</div>
Jawaban:
Menurut spesifikasi HTML ,
<span>
elemen inline dan<div>
elemen blok. Sekarang itu bisa diubah menggunakandisplay
properti CSS tetapi ada satu masalah: dalam hal validasi HTML, Anda tidak bisa memasukkan elemen blok ke dalam elemen inline jadi:tidak sepenuhnya benar bahkan jika Anda mengubah
<div>
keinline
atauinline-block
.Jadi, jika elemen Anda adalah
inline
atauinline-block
menggunakan a<span>
. Jikablock
elemen level, gunakan a<div>
.sumber
inline-block
memiliki hubungan yang lebih dekatinline
daripadablock
.<span>
dan<div>
memang berbeda, seperti<span>
elemen inline (valid dalam a<p>
, misalnya), sedangkan<div>
elemen blok (tidak valid dalam a<p>
).<p>
adalah elemen blok yang "tidak dapat mengandung elemen level blok" ( tautan ), jadi walaupun contohnya tidak valid, itu bukan karena<p>
inline.Jika Anda ingin memiliki dokumen xhtml yang valid maka Anda tidak bisa memasukkan div di dalam paragraf.
Juga, div dengan tampilan properti: inline-block bekerja secara berbeda dari span. Rentang secara default elemen inline, Anda tidak dapat mengatur lebar, tinggi, dan properti lainnya yang terkait dengan blok. Di sisi lain, elemen dengan blok inline properti masih akan "mengalir" dengan teks di sekitarnya tetapi Anda dapat mengatur properti seperti lebar, tinggi, dll. Rentang dengan tampilan properti: blok tidak akan mengalir dengan cara yang sama sebagai elemen inline-blok tetapi akan membuat carriage return dan memiliki margin default.
Perhatikan bahwa inline-block tidak didukung di semua browser. Misalnya di Firefox 2 dan lebih sedikit Anda harus menggunakan:
yang menampilkan sedikit berbeda dari elemen blok sebaris di FF3.
Ada artikel bagus di sini tentang cara membuat elemen lintas-blok lintas-browser.
sumber
Inline-block adalah titik setengah antara mengatur tampilan elemen menjadi inline atau untuk memblokir. Itu membuat elemen dalam aliran inline dokumen seperti tampilan: inline tidak, tetapi Anda dapat memanipulasi atribut kotak elemen (lebar, tinggi dan margin vertikal) seperti yang Anda bisa dengan tampilan: blok.
Kita tidak boleh menggunakan elemen blok dalam elemen sebaris. Ini tidak valid dan tidak ada alasan untuk melakukan praktik tersebut.
sumber
Saya tahu Q ini sudah tua, tetapi mengapa tidak menggunakan semua DIV daripada SPAN? Lalu semuanya memainkan semua bahagia bersama.
Contoh:
sumber
Saya pikir ini akan membantu Anda untuk memahami perbedaan dasar antara Inline-Elements (mis span) dan Block-Elements (eg div), untuk memahami mengapa "display: inline-block" sangat berguna.
Masalah : elemen sebaris (mis. Span, a, tombol, input, dll.) Gunakan "margin" hanya secara horizontal (margin-kiri dan margin-kanan), bukan vertikal. Penspasian vertikal hanya berfungsi pada elemen blok (atau jika "tampilan: blok" disetel)
Solusi : Hanya melalui "display: inline-block" juga akan mengambil jarak vertikal (atas dan bawah). Alasan: Inline elemen Span, berlaku sekarang seperti elemen blok ke luar, tetapi seperti elemen inline di dalam
Berikut Contoh Kode:
sumber
Seperti yang orang lain jawab ...
div
adalah "elemen blok" (sekarang didefinisikan ulang sebagai Konten Flow ) danspan
merupakan "elemen inline" ( Konten Frasa ). Ya, Anda dapat mengubah presentasi default dari elemen-elemen ini, tetapi ada perbedaan antara "flow" versus "block", dan "phrasing" versus "inline".Elemen yang diklasifikasikan sebagai konten aliran hanya dapat digunakan di mana konten aliran diharapkan, dan elemen yang diklasifikasikan sebagai konten ungkapan dapat digunakan di mana konten frase diharapkan. Karena semua konten ungkapan adalah konten mengalir, elemen frase juga dapat digunakan di mana pun konten mengalir diharapkan. Spesifikasi memberikan info lebih rinci .
Semua elemen frasa, seperti
strong
danem
, hanya bisa berisi elemen frasa lain: Anda tidak bisa memasukkan bagiantable
dalamcite
misalnya. Sebagian mengalir konten sepertidiv
danli
dapat berisi semua jenis konten aliran (serta ungkapan konten), tetapi ada beberapa pengecualian:p
,pre
, danth
adalah contoh dari konten aliran non-ungkapan ( “elemen blok”) yang dapat hanya mengandung kalimat konten ("elemen sebaris"). Dan tentu saja ada batasan elemen normal sepertidl
dantable
hanya diizinkan mengandung elemen tertentu.Meskipun keduanya
div
danp
merupakan konten aliran non-frasa,div
dapat berisi konten aliran lainnya anak-anak (termasuk lebihdiv
dan lebih banyakp
). Di sisi lain,p
mungkin hanya mengandung konten ungkapan anak-anak. Itu berarti Anda tidak dapat meletakkan bagiandiv
dalamp
, meskipun keduanya adalah elemen aliran non-frasa.Sekarang inilah kickernya. Spesifikasi semantik ini tidak terkait dengan bagaimana elemen ditampilkan. Dengan demikian, jika Anda memiliki bagian
div
dalamspan
, Anda akan mendapatkan kesalahan validasi bahkan jika Anda memilikispan {display: block;}
dandiv {display: inline;}
dalam CSS Anda.sumber
inline-block
adalah gaya CSS, bukan jenis elemen atau model konten.)