Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema no Posicionamento e na Solução

Bom dia pessoal,

Semelhante a um post lido, https://cursos.alura.com.br/forum/topico-problema-no-alinhamento-posicionamento-34505, eu tive o mesmo problema referente ao posicionamento. http://imgur.com/a/Mjmym E no post, encontrei uma solução que gerou o mesmo erro que o dele. http://imgur.com/a/c82Qv Onde foi proposta a seguinte solução:

.portfolio::after{
    content: '';
    clear: left;
    display: block;
}

E tive o mesmo problema com o tamanho das caixas. http://imgur.com/a/IgvI3 Que foi resolvido com a propriedade min-height.

Apesar de o problema ter sido resolvido, eu gostaria de entender melhor o que foi feito e o porque do ocorrido, se possível. Pois o html fornecido no final da atividade, com tudo completo, não apresenta o mesmo erro. E também nao entendi o "potifiolio::after"aplicado. Teria como alguém me explicar melhor a função?

Coding HTML do portifolio

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Portifolio - João da Silva</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="icon" href="img/favicon.png">
    <link rel="stylesheet" href="css/port.css">
    <link rel="stylesheet" href="css/geral.css">
</head>

<body>
    <main>
        <h1 class="titulo_principal">Portifolio</h1>
        <div class="main_conteudo">
            <p> Veja abaixo a lista dos meus projetos mais relevantes</p>
            <ul class="templates">
                <li>
                    <a href="www.bmw.com">
                        <figure>
                            <img id="figure1" src="img/bmw.png" alt="Template bmw">
                            <figcaption>BMW.com: reformulação de design e implementação de HTML, CSS e JavaScript</figcaption>
                        </figure>
                    </a>
                </li>
                <li>
                    <a href="www.globo.com">
                        <figure>
                            <img src="img/g1.png" alt="Template globo">
                            <figcaption>G1.com.br: reformulação de design e implementação de HTML, CSS e JavaScript</figcaption>
                        </figure>
                    </a>
                </li>
                <li>
                    <a href="www.imb.com">
                        <figure>
                            <img src="img/ibm.png" alt="Template ibm">
                            <figcaption>IBM.com: aplicação de progressive enhancement em conjunto com aplicação back-end</figcaption>
                        </figure>
                    </a>
                </li>
                <li>
                    <a href="www.uol.com.br">
                        <figure>
                            <img src="img/uol.png" alt="Template uol">
                            <figcaption>UOL.com.br: reformulação de design e implementação de HTML, CSS e JavaScript</figcaption>
                        </figure>
                    </a>
                </li>
            </ul>
        </div>
    </main>
    <img class="foto_joao" src="img/eu.jpg" alt="Foto de João da Silva">
    <aside class="navegacao_site">
        <nav>
            <h1>João da Silva</h1>
            <ul>
                <li><a href="index.html">Home</a></li>
                <li><a href="portfolio.html">Portfolio</a></li>
                <li><a href="bio.html">Sobre mim</a></li>
                <li><a href="blog.html">Blog</a></li>
                <li><a href="contato.html">Contato</a></li>
            </ul>
        </nav>
        <ul class="icones_sociais">
            <li>
                <a class="github" href="#">Github</a>
            </li>
            <li>
                <a class="twitter" href="#">Twitter</a>
            </li>
            <li>
                <a class="linkedin" href="#">LinkedIn</a>
                </a>
            </li>
        </ul>
    </aside>
    <footer class="footer_bottom">
        &copy; João da Silva 2017
    </footer>
</body>

</html>

Código CSS do portifolio:

.templates li {
    float: left;
    border: 8px solid black;
    background-color: #FAFFFC;
    width: 45%;
    box-sizing: border-box;
    padding: 16px;
    margin-right: 16px;
    margin-bottom: 16px;
    min-height: 310px;
}

.templates img{
    width: 100%;
}

.templates::after{
  content: '';
  clear: left;
  display: block;
}

Código CSS geral:

body {
    font-family: sans-serif;
    background-color: #F2FFFC;
    font-size: 20px;
    line-height: 1.5;
}

h1,
h2 {
    font-family: sans-serif;
    font-weight: bold;
}

main h2 {
    font-size: 40px;
    clear: both;
}

.titulo_principal {
    text-align: center;
    background-color: #851944;
    color: #FFF;
    padding: 25px;
    margin: 0;
    border-bottom: 10px solid #000000;
    font-size: 60px;
    text-transform: uppercase;
}

.main_conteudo {
    width: 720px;
    margin: auto;
    padding: 30px;
    padding-bottom: 85px;
}

p {
    text-align: left;
    margin: 20px 0px;
    font-size: 16px;
}

.navegacao_site {
    background-color: #3C1D3D;
    color: #F2FFFC;
    text-align: center;
}

.footer_bottom {
    background-color: #000;
    color: #F2FFFC;
    clear: both;
    position: fixed;
    bottom: 0;
    width: 100%
}

main a {
    color: #851944;
}

.navegacao_site a {
    color: inherit;
    font-family: sans-serif;
}

.navegacao_site,
footer {
    padding: 20px;
}

nav a {
    text-transform: lowercase;
}

aside h1 {
    margin-bottom: 25px;
    font-size: 30px;
}

.icones_sociais li {
    display: inline-block;
}

.icones_sociais a {
    text-indent: -9999px;
    width: 40px;
    height: 40px;
    display: inline-block;
}

.github {
    background-image: url(../img/github.png);
}

.twitter {
    background-image: url(../img/twitter.png);
}

.linkedin {
    background-image: url(../img/linkedin.png);
}

strong {
    font-weight: bold;
}

em {
    font-style: italic;
}

aside,
.foto_joao {
    float: right;
    border-bottom: 10px solid black;
    border-left: 10px solid black;
    box-sizing: border-box;
}

.foto_joao{
    position: absolute;
    top: 0;
    right: 0;
}

aside {
    box-sizing: border-box;
    width: 15%;
    position: relative;
    top: 310px;
}

main {
    width: 85%;
    float: left;
}
1 resposta
solução!

E aí, Bruno! Beleza, cara? =)

Eu não sei exatamente o porquê desse erro no layout, mas acredito que possa estar relacionado à resolução do seu monitor, ou algo assim... No meu, por exemplo, não precisei usar esse float e funcionou corretamente. =|

Mas sobre o .portifolio::after... Quando você coloca elemento::before ou elemento::after, você está usando o que nós chamamos de pseudo-elementos. É como se você estivesse procurando por um elemento que está, e, ao mesmo tempo, não está lá... Bizarro, né? Rs...

Se você der uma olhada no código gerado no browser, você verá uma coisa interessante:

<ul class="portifolio">
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  ::after
</ul>

Repare que é um novo elemento dentro do elemento .portifolio, ao final dele. Caso você tivesse optado pelo ::before, veria ele ao começo do conteúdo.

Ou seja, usando ::before ou ::after, estamos inserindo um conteúdo ao começo ou término do elemento... Sacou?

E por que o clear: left e o restante?

O problema citado no link que você informou, era devido à quebra de layout, porque o float tira os elementos do fluxo padrão do navegador, dessa forma o footer acabou ficando sobreposto à lista. Ao colocar um elemento com clear: left é como se você estivesse dizendo para o navegador que você quer limpar o fluxo no lado desse elemento (no caso, o lado esquerdo), fazendo com que nenhum elemento à esquerda dele flutue, sacou? =)

Pode ser um pouco confuso tudo isso, até porque você tem que entender bastante sobre o float, clear, e ainda tem essa coisa toda de pseudo-elementos e etc... Mas espero ter ajudado! Rs. De qualquer forma, se ainda estiver com qualquer dúvida, não deixe de postar por aqui, no fórum, para que possamos continuar auxiliando-o em seus estudos! =)

Abraço e bons estudos,

Fábio