Pada dasarnya Anda telah menambahkan lebih banyak kekacauan dalam kode Anda yang menciptakan lebih banyak kebingungan, jadi pertama-tama saya mencoba untuk menghilangkan kekacauan yang menghalangi memahami masalah sebenarnya.
Pertama-tama kita harus menetapkan bahwa apa pertanyaan sebenarnya?
" inline-block
" Itu sebabnya elemen didorong ke bawah.
Sekarang kita mulai memahaminya dan menghapus kekacauan dulu.
1 -
Mengapa tidak memberikan ketiga lebar perbatasan divs yang sama?
Mari kita berikan.
2 - Apakah elemen mengambang memiliki koneksi dengan elemen blok sebaris didorong ke bawah? Tidak, itu tidak ada hubungannya dengan itu.
Jadi, kami telah menghapus div itu sama sekali . Dan Anda menyaksikan perilaku yang sama elemen inline-blok didorong ke bawah.
Di sinilah giliran beberapa literatur untuk memahami ide kotak garis dan bagaimana mereka berbaris dalam baris yang sama khususnya membaca paragraf terakhir dengan hati-hati karena ada jawaban atas pertanyaan Anda.
Garis dasar 'blok sebaris' adalah garis dasar kotak baris terakhir dalam aliran normal, kecuali jika ia tidak memiliki kotak garis dalam-aliran atau jika properti 'luapannya' memiliki nilai yang dihitung selain 'terlihat', di yang mana baseline adalah tepi margin bawah.
Jika Anda tidak yakin tentang garis dasar maka berikut adalah penjelasan singkat dengan kata-kata sederhana.
Semua karakter kecuali 'gjpqy' ditulis pada garis dasar Anda dapat menganggap garis dasar seolah-olah Anda menggambar garis horizontal sederhana yang sama dengan menggarisbawahi tepat di bawah "karakter acak" ini maka itu akan menjadi garis dasar tetapi sekarang jika Anda menulis salah satu dari 'gjpqy' karakter pada baris yang sama maka bagian bawah dari karakter ini akan jatuh di bawah garis.
Jadi, kita dapat mengatakan bahwa semua karakter kecuali 'gjpqy' ditulis sepenuhnya di atas garis dasar sementara beberapa bagian dari karakter ini ditulis di bawah garis dasar.
3 - Mengapa tidak memeriksa di mana garis dasar dari baris kami? Saya telah menambahkan beberapa karakter yang menunjukkan garis dasar dari baris kami.
4 - Mengapa tidak menambahkan beberapa karakter di div kami juga untuk menemukan garis dasar mereka di div? Di sini, beberapa karakter ditambahkan dalam div untuk memperjelas baseline .
Sekarang ketika Anda memahami tentang garis dasar, baca versi sederhana berikut tentang garis dasar blok-inline.
i) Jika inline-block dalam pertanyaan memiliki properti overflow diatur ke terlihat (yang secara default jadi tidak perlu diatur). Kemudian garis dasar akan menjadi garis dasar dari blok yang mengandung garis.
ii) Jika inline-block dalam pertanyaan memiliki properti overflow diatur ke LAIN DARIPADA terlihat. Kemudian margin bawahnya akan berada di garis dasar garis kotak yang berisi.
- Poin pertama secara detail
Sekarang lihat ini lagi untuk memperjelas konsep Anda bahwa apa yang terjadi dengan green div . Jika ada kerancuan maka di sini ditambahkan lebih banyak karakter yang dekat dengan green div untuk menetapkan garis dasar blok yang berisi dan baseline hijau div diselaraskan.
Nah, saya sekarang mengklaim bahwa mereka memiliki garis dasar yang sama? BAIK?
5 - Lalu mengapa tidak tumpang tindih mereka dan melihat apakah mereka cocok satu sama lain? Jadi, saya membawa div ketiga-kiri: 35px; untuk memeriksa apakah mereka memiliki baseline yang sama sekarang ?
Sekarang, kami telah mendapatkan poin pertama kami terbukti.
Nah, setelah penjelasan titik pertama, titik kedua mudah dicerna dan Anda melihat bahwa div pertama yang memiliki properti melimpah diatur selain terlihat (tersembunyi) memiliki margin bawahnya di garis dasar garis.
Sekarang, Anda dapat melakukan beberapa percobaan untuk menggambarkannya lebih lanjut.
- Setel overflow div pertama: terlihat (atau hapus semuanya) .
- Setel overflow div kedua: selain terlihat .
- Atur kedua divs overflow: selain terlihat .
Sekarang bawa kembali kekacauan Anda dan lihat apakah semuanya tampak baik bagi Anda.
- Bawa kembali div Anda yang melayang (tentu saja ada kebutuhan untuk
menambah lebar tubuh). Anda melihatnya tidak berpengaruh.
- Bawa kembali margin ganjil yang sama .
- Setel div hijau ke overflow: terlihat saat Anda mengatur dalam pertanyaan Anda (misalignment adalah karena peningkatan lebar perbatasan dari 1px ke 5px jadi jika menyesuaikan kiri negatif Anda akan melihat tidak ada masalah)
- Sekarang hapus karakter tambahan yang saya tambahkan untuk membantu memahami . (dan tentu saja hapus kiri negatif)
- Akhirnya mengurangi lebar tubuh karena kita tidak perlu lagi lebar.
Dan sekarang kita kembali ke tempat kita mulai.
Semoga saya telah menjawab pertanyaan Anda.
Nilai default untuk
vertical-align
dalam CSS adalahbaseline
& aturan ini juga berlaku denganinline-block
membaca ini http://www.brunildo.org/test/inline-block.htmlTulis
vertical-align:top
dalaminline-block
DIV Anda .Lihat ini http://jsfiddle.net/WGCyu/1/
sumber
display:inline-block
digabungkan denganfloat:left/right
.vertical-align
properti, tidak ada kompleksitas yang dijelaskan dalam jawaban yang diterima berlaku.Gunakan saja
vertical-align:top;
Demo
sumber
Lihat contoh alternatif ini . Alasan perilaku tersebut dijelaskan dalam modul CSS3: baris: 3.2. Bungkus Kotak Garis [1] :
Seperti yang Anda lihat, elemen ketiga didorong ke bawah, meskipun tidak memiliki
overflow
properti. Alasannya pasti ada di tempat lain untuk ditemukan. Perilaku kedua yang Anda perhatikan dijelaskan dalam Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Spesifikasi: 9.5 Floats [2] :Semua
display:inline-block;
div Anda menggunakan jenis khususbaseline
dalam hal ini 10.8 Perhitungan tinggi baris: properti 'tinggi-garis' dan 'rata-rata-vertikal' (sangat akhir) [3] :Jadi ketika Anda menggunakan elemen dan
inline-block
elemen mengambang, elemen mengambang akan didorong ke samping dan pemformatan sebaris akan dihitung ulang sesuai dengan 1 . Di sisi lain, elemen-elemen selanjutnya dipersingkat jika tidak cocok. Karena Anda sudah bekerja dengan jumlah ruang minimum, tidak ada cara lain untuk memodifikasi elemen Anda kemudian mendorongnya 2 . Dalam hal ini, elemen tertinggi akan menentukan ukuran div pembungkus Anda, sehingga mendefinisikanbaseline
3 , sementara di sisi lain modifikasi posisi dan lebar yang dinyatakan dalam 2 tidak dapat diterapkan pada elemen tinggi minimum spasi minimum tersebut. Dalam hal ini perilaku seperti pada demo pertama saya akan muncul.Terakhir, alasan Anda
overflow:hidden
akan mencegah#firstDiv
didorong ke tepi bawah Anda#container
, meskipun saya tidak dapat menemukan alasan di bagian 11 . Tanpanyaoverflow:hidden
berfungsi sebagai dikecualikan dan didefinisikan oleh 2 dan 3 . DemoTL; DR: Lihat sangat dekat pada rekomendasi W3 dan implementasinya di browser. Menurut pendapat saya yang sederhana elemen mengambang bertekad untuk menunjukkan perilaku yang tidak terduga jika Anda tidak tahu semua perubahan yang terjadi pada elemen di sekitarnya. Berikut ini demo lain yang menunjukkan masalah umum dengan pelampung.
sumber
Saya awalnya mulai menjawab pertanyaan ini , tetapi dikunci sebagai dupe sebelum saya bisa menyelesaikan, jadi saya mengirim jawabannya di sini.
Pertama, kita perlu memahami apa
inline-block
itu.The definisi dalam MDN mengatakan:
Untuk memahami apa yang terjadi di sini, kita perlu melihatnya
vertical-align
, dan itu adalah nilai defaultbaseline
.Dalam ilustrasi ini Anda memiliki bagan warna ini:
Biru: Garis dasar
Merah: Bagian atas dan bawah tinggi garis
Hijau: Bagian atas dan bawah kotak konten sebaris.
Di elemen #left, Anda memiliki beberapa konten teks yang mengontrol apa yang menjadi garis dasar. Ini berarti teks di dalamnya menentukan garis dasar untuk #left.
Di # hak, tidak ada konten, sehingga browser tidak memiliki pilihan lain selain menggunakan kotak di bawah sebagai garis dasar.
Lihat visualisasi ini di mana saya telah menggambar garis dasar pada contoh di mana wadah inline pertama memiliki beberapa teks, dan yang berikutnya kosong:
Jika Anda secara khusus meluruskan satu elemen ke atas, Anda benar-benar mengatakan bahwa Anda menyelaraskan bagian atas elemen ini ke bagian atas kotak garis.
Ini mungkin lebih mudah dipahami dengan sebuah contoh.
Hasilnya adalah ini - dan saya menambahkan garis dasar biru, dan kotak garis merah: Apa yang terjadi di sini, adalah bahwa ketinggian kotak garis tergantung pada bagaimana isi seluruh garis ditata. Ini berarti bahwa untuk menghitung perataan atas, perataan garis dasar harus dihitung terlebih dahulu. The elemen memiliki , jadi ini tidak digunakan untuk posisi dasar. tetapi dan diposisikan secara vertikal sehingga garis dasar mereka sejajar. Ketika ini dilakukan, ketinggian kotak garis telah meningkat, karena elemen telah didorong sedikit karena ukuran font yang lebih besar. Kemudian posisi teratas untuk elemen dapat dihitung, dan ini di sepanjang bagian atas kotak garis.
#middle
vertical-align:top
#left
#right
#right
#middle
sumber
masalahnya adalah karena Anda telah menerapkan float: left on the div kedua. yang membuat div kedua datang di sisi kiri dan div pertama Anda turun dan datang setelah div kedua Anda. Jika Anda menerapkan float: left on the div pertama juga, masalah Anda akan hilang.
overflow: tersembunyi tidak menyebabkan masalah pada tata letak Anda, overflow: tersembunyi hanya memengaruhi elemen dalam div, itu tidak ada hubungannya dengan elemen lain yang ada di luar.
sumber
Coba tambahkan
padding:0;
ke badan dan hapus margin div Anda.Tambahkan
background-color:*any
warna selain dari latar belakang * untuk memeriksa perbedaannya.sumber
code
contoh:.background-color:any color
Coba buat semua properti CSS dari semua Elemen sama.
Saya memiliki masalah yang sama dan ketika memperbaiki ini saya mengidentifikasi bahwa saya menjatuhkan sebuah Elemen dengan properti Font ke dalam Elemen Div.
Setelah menjatuhkan Elemen itu dengan properti Font keselarasan semua DIV terganggu. Untuk memperbaiki ini, saya mengatur properti Font ke semua elemen DIV sama dengan elemen yang dimasukkan ke dalamnya.
Dalam contoh berikut ini, elemen Dropped kelas ".dldCuboidButton" didefinisikan dengan ukuran font: 30 px.
Jadi saya menambahkan properti yang sama ke kelas yang tersisa yaitu .cuboidRecycle, .liCollect, .dldCollect yang digunakan oleh elemen DIV. Dengan cara itu semua elemen DIV mengikuti Pengukuran yang sama sebelum dan sesudah menjatuhkan elemen ke dalamnya.
Berikut adalah contoh HTML yang dibuat secara dinamis menggunakan CSS di atas.
sumber