Menggunakan: setelah untuk menghapus elemen mengambang


106

Saya punya daftar dan li punya float:left;. Isi setelah <ul>harus diratakan dengan benar. Oleh karena itu saya dapat membangun yang berikut ini:

http://jsfiddle.net/8unU8/

Saya pikir, saya bisa menghapusnya <div class="clear">dengan menggunakan pseudo selector seperti: setelah.

Tapi contohnya tidak berhasil:

http://jsfiddle.net/EyNnk/

Apakah saya selalu harus membuat div terpisah untuk menghapus elemen mengambang?

Jawaban:


261

Tulis seperti ini:

.wrapper:after {
    content: '';
    display: block;
    clear: both;
}

Periksa http://jsfiddle.net/EyNnk/1/ ini


Ini adalah cara untuk melakukannya. tapi tolong perhatikan poin dalam jawaban saya tentang semantik.
Alex

2
Hanya sedikit info: ::afterdengan titik dua ganda adalah cara yang disarankan untuk menargetkan elemen semu.
Dennis98

11
Setiap browser yang mendukung titik dua ganda (: :) sintaks CSS3 juga hanya mendukung sintaks (:), tetapi IE 8 hanya mendukung titik dua tunggal, jadi untuk saat ini, disarankan untuk hanya menggunakan titik dua tunggal untuk dukungan browser terbaik. :: adalah format baru yang diindentasi untuk membedakan konten semu dari pemilih semu. Jika Anda tidak memerlukan dukungan IE 8, silakan gunakan titik dua ganda. css-tricks.com/almanac/selectors/a/after-and-before
retroriff

mengapa kita harus meletakkan ini: "content: ''; display: block;" ? dan bagaimana jika Anda menginginkan pembungkus sebaris?
Lucke

6

Tidak, Anda tidak cukup melakukan sesuatu seperti ini:

<ul class="clearfix">
  <li>one</li>
  <li>two></li>
</ul>

Dan CSS berikut:

ul li {float: left;}


.clearfix:after {
  content: ".";
  display: block;
  clear: both;
  visibility: hidden;
  line-height: 0;
  height: 0;
}

.clearfix {
  display: inline-block;
}

html[xmlns] .clearfix {
   display: block;
}

* html .clearfix {
   height: 1%;
}

5

Ini akan bekerja juga:

.clearfix:before,
.clearfix:after {
    content: "";
    display: table;
} 

.clearfix:after {
    clear: both;
}

/* IE 6 & 7 */
.clearfix {
    zoom: 1;
}

Berikan kelas clearfixke elemen induk , misalnya ulelemen Anda .

Sumber di sini dan di sini .


1
tampilan: tabel dapat menambahkan spasi ekstra; Saya menggunakan display: block sebagai gantinya
The Cog

0

Teks 'dasda' tidak akan pernah berada di dalam tag, bukan? Secara semantik dan agar menjadi HTML yang valid, cukup tambahkan kelas yang jelas untuk itu:

http://jsfiddle.net/EyNnk/2/


1
Itu sama sekali bukan semantik. 1) Kami selalu menghapus elemen induk jika anaknya mengapung di atasnya misalnya sesuai jawaban Anda jika saya ingin memberikan latar belakang ke dalam UL itu tidak menutupi LI karena UL tidak jelas & 2) Saya punya pertanyaan Mengapa Anda memberi jelas Kelas di DIV terpisah sebelum P. jika Anda memberikan kepada P saja itu juga berhasil
simpan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.