2
respostas

Aula 10 - Exercício 7

Olá.

Eu não estava conseguindo resolver o exercício 07, mas vi que um aluno fez e deixou o resultado no fórum. O que ele fez deu certo, mas tenho uma dúvida. Não entendi o motivo de colocar "clear:both" na class ".primeiro", pois pelo que eu havia compreendido o "clear:both" não permite que seja colocado nada ao lado do objeto. Por essa linha de pensamento ao colocar esse parâmetro na respectiva class não seria possível que nenhum outro quadrado ficasse ao lado (seja do lado direito ou esquerdo) entretanto mesmo colocando "clear:both" foi possível que o quadrado 2 ficasse ao lado do 1.

.primeiro {
    background-color: red;
    float:left;
    clear:both;
}
.segundo {
    background-color: blue;
    float: left;
    clear:right
}
.terceiro {
    width: 200px;
    height: 200px;
    line-height: 200px;
    background-color: green;
    float:right
}
.quarto {
    background-color: orange;
    float:left;
}
.quinto {
    background-color: magenta;
    float: right
}
2 respostas

entendo da mesma forma que você... o primeiro deveria também ter o float left.

Durante a primeira atividade do capítulo (o vídeo), o instrutor enfatiza várias vezes que o clear, independente de ser left, right ou both, empurra o próprio elemento para baixo dos floats que estiverem ao lado especificado na propriedade. Porém, o elemento só é empurrado para baixo de floats que estejam acima dele no código HTML. (Faltou explicarem direito no curso mesmo.)

Nesse código que você mostrou, o clear: both; não faz diferença nenhuma, você poderia simplesmente ignorá-lo, afinal, a <div> que tem a class ".primeiro" é a que vem primeiro no código HTML. Não tem ninguém acima dela.

Resumindo, ao usar o clear, o elemento só será empurrado para baixo de outros elementos que estejam a cima dele no código HTML.

Faça o teste com esse código CSS. Coloquei todas as caixas para flutuarem à esquerda e depois coloquei um clear: both; na caixa 3. Você verá que a propriedade clear: both; realmente não funciona da forma como foi ensinada e se encaixará perfeitamente na minha teoria:

div {
    width: 100px;
    height: 100px;
    /* Para deixar o texto centralizado na div,
       podemos colocar um line-height igual à altura
       dela. Só funciona bem se o texto tiver uma
       linha só.
    */
    line-height: 100px;
    text-align: center;
    font-size: 25px;
}
.container {
    width: 400px;
}
.primeiro {
    background-color: red;
    float: left;
}
.segundo {
    background-color: blue;
    float: left;
}
.terceiro {
    width: 200px;
    height: 200px;
    line-height: 200px;
    background-color: green;
    float: left;
    clear: both;
}
.quarto {
    background-color: orange;
    float: left;
}
.quinto {
    background-color: magenta;
    float: left;
}

Para você não precisar ir lá no exercício vou deixar o link do site de teste aqui: Dabblet.

Observe que a caixa 3 só ficou abaixo das caixas 1 e 2 que estão acima da caixa 3 no código HTML.