Usando: after para limpar elementos flutuantes


106

Eu tenho uma lista e os li têm um float:left;. O conteúdo após o <ul>deve ser alinhado corretamente. Portanto, posso construir o seguinte:

http://jsfiddle.net/8unU8/

Pensei que posso remover o <div class="clear">usando pseudo seletores como: after.

Mas o exemplo não está funcionando:

http://jsfiddle.net/EyNnk/

Sempre tenho que criar um div separado para limpar os elementos flutuantes?

Respostas:


261

Escreva assim:

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

Verifique este http://jsfiddle.net/EyNnk/1/


É assim que se deve fazer. mas observe o ponto em minha resposta sobre semântica.
— Alex

2
Apenas uma pequena informação: ::aftercom dois pontos duplos é a forma recomendada de direcionar pseudo-elementos.
— Dennis98,

11
Todos os navegadores que suportam a sintaxe de dois pontos duplos (: :) CSS3 também oferecem suporte apenas à sintaxe (:), mas o IE 8 só oferece suporte a dois pontos simples, portanto, por enquanto, é recomendado usar apenas dois pontos para melhor suporte ao navegador. :: é o formato mais recente recuado para distinguir o pseudo conteúdo dos pseudo seletores. Se você não precisa do suporte do IE 8, sinta-se à vontade para usar dois-pontos duplos. css-tricks.com/almanac/selectors/a/after-and-before
— retroriff

por que devemos colocar isto: "conteúdo: ''; display: block;" ? e se você quiser um invólucro embutido?
— Lucke de

6

Não, não é o suficiente para fazer algo assim:

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

E o seguinte CSS:

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

Isso também funcionará:

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

.clearfix:after {
    clear: both;
}

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

Dê a classe clearfixao elemento pai , por exemplo, seu ulelemento.

Fontes aqui e aqui .


1
display: a mesa pode adicionar espaçamento extra; Eu uso display: block em vez
— The Cog

0

O texto 'dasda' nunca ficará fora de uma tag, certo? Semanticamente e para ser HTML válido como é, basta adicionar a classe clara a isso:

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


1
Não é semântica de forma alguma. 1) Sempre limpamos o elemento pai se seu filho tiver flutuado nele, por exemplo, de acordo com sua resposta, se eu quiser fornecer informações sobre o UL, ele não cobre o LI porque o UL não é claro & 2) Eu tenho uma pergunta por que você deu claro Aula em um DIV separado antes de P. se você der apenas para P, também funcionará
— sandeep

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.