Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no transform-style: preserve-3d

Meu código está funcionando (as palavras estão em 3d em paralaxe) sem a necessidade de adicionar a seguinte propriedade no meu CSS:

.palavras-home, .titulo-principal {
    transform-style: preserve-3d;
}

Por que isso acontece, visto que o professor diz que temos que adicionar essas propriedades?

Seguem abaixo meus arquivos index.html e index.css

index.html

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <title>João da Silva - Desenvolvedor Web</title>
    <link rel="shortcut icon" href="img/favicon.png">
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/site.css">
    <link rel="stylesheet" href="css/index.css">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Crimson+Text:400,400italic,600">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Shadows+Into+Light">
</head>
<body>
    <header class="titulo-pagina">
        <img class="foto-home" src="img/eu.jpg" alt="Foto de João da Silva">
        <h1>João da Silva</h1>
        <p class="subtitulo-principal">Desenvolvedor web</p>
        <ul class="palavras-home">
            <li class="palavra-home eficiencia">Eficiência</li>
            <li class="palavra-home boas-praticas">Boas práticas</li>
            <li class="palavra-home codigo-limpo">Código limpo</li>
            <li class="palavra-home css3">CSS3</li>
            <li class="palavra-home html5">HTML5</li>
            <li class="palavra-home javascript">JavaScript</li>
            <li class="palavra-home acessibilidade">Acessibilidade</li>
            <li class="palavra-home responsivo">Responsivo</li>
            <li class="palavra-home otimizacoes">Otimizações</li>
            <li class="palavra-home agilidade">Agilidade</li>
            <li class="palavra-home design">Design</li>
        </ul>
        <a class="banner" href="http://www.twitter.com/joaodasilva">Siga-me no Twitter</a>
    </header>
    <main>
        <section class="secao-inicio saudacao">
            <p class="saudacao"><span class="saudacao-inicio">Olá,</span> meu nome é <strong>João da Silva</strong> <span class="saudacao-ultima-linha">e eu construo <em>sites maravilhosos</em></span></p>
            <a class="botao-index" href="bio.html">Conheça mais um pouco sobre mim</a>
        </section>
        <section class="secao-inicio trabalhos">
            <h2>Trabalhos</h2>
            <ul>
                <li><img src="img/bmw.png" alt="Site da BMW"></li>
                <li><img src="img/ibm.png" alt="Site da IBM"></li>
                <li><img src="img/uol.png" alt="Site da UOL"></li>
            </ul>
            <a class="botao-index" href="portfolio.html">Veja mais</a>
        </section>
        <section class="secao-inicio blog">
            <h2>Blog</h2>
            <small>Últimos posts</small>
            <ol>
                <li class="mais-recente">
                    <a href="blog.html">O essencial de design responsivo</a>
                    <p class="inicio-post">
                        Design responsivo tem ganho cada vez mais atenção como técnica de desenvolvimento de páginas web para dispositivos móveis. Mas como começar?
                    </p>
                </li>
                <li>
                    <a href="blog.html">Por que fazer páginas acessíveis?</a>
                </li>
                <li>
                    <a href="blog.html">JavaScript não obstrusivo</a>
                </li>
            </ol>
            <a class="botao-index" href="blog.html">Veja mais</a>
        </section>
    </main>
    <footer>
        <h2>Vamos conversar?</h2>
        <p>Você pode entrar em contato comigo <a href="contato.html">por e-mail</a> ou pelo telefone <a href="tel:+551234567890">(12) 3456-7890</a></p>
    </footer>
</body>
</html>

index.css

.foto-home {
    height: 200px;
    border-radius: 50%;
}

.subtitulo-principal {
    font-size: 0.4em;
    text-align: center;
}

.saudacao p {
    font-size: 1.5em;
    color: #99A;
    line-height: 1;
    padding: 2em;
}

.saudacao-inicio {
    font-size: 3em;
    color: #889;
}

.saudacao-ultima-linha {
    text-align: right;
    display: block;

}

.saudacao strong {
    font-size: 2em;
    color: #000;
}

.saudacao em {
    color: #851944;
    font-size: 4em;
    transform: rotate(-5deg) skew(-10deg);
    display: inline-block;
}

.botao-index {
    font-size: 1.25em;
    background-color: #851944;
    color: #FFF;
    padding: .5em;
    border: .2em solid black;
    width: 40ch;
    margin: 2em auto;
    display: block;
    text-align: center;
}

.secao-inicio {
    padding: 2em;
}

.secao-inicio h2 {
    font-size: 3em;
    text-shadow: 2px 2px #000;
    text-transform: uppercase;
    margin-bottom: .5em;
}

.trabalhos {
    background-color: #3C1D3D;
    border-top: .5em solid #000;
    border-bottom: .5em solid #000;
}

.trabalhos h2 {
    color: #FFF;
}

.trabalhos ul {
    overflow: hidden;
    border: .5em solid black;
}

.trabalhos li {
    float: left;
    width: 33.333%;
}

.trabalhos img {
    width: 100%;
    display: block;
}

.blog {
    background-color: #999;
    color: #FFF;
    border-bottom: .5em solid #851944;
    position: relative;
}

.blog small {
    position: relative;
    top: -2em;
}

.blog li a {
    color: #FCF;
    padding: .5em;
    display: block;
}

.blog li {
    width: 30%;
}

.palavra-home {
    position: absolute;
    font-family: "Shadows Into Light", cursive;
    font-weight: bold;
    color: #D5447E;
    font-size: 1.6em;
}
.eficiencia {
    top: 50%;
    left: 60%;
    transform: translate(-50%, -50%) rotate(-5deg) translateZ(4px) scale(0.25);
}
.boas-praticas {
    top: 70%;
    left: 20%;
    transform: translate(-50%, -50%) rotate(10deg) translateZ(1px) scale(0.25);
}

.codigo-limpo {
    top: 45%;
    left: 25%;
    transform: translate(-50%, -50%) rotate(-10deg) translateZ(2px) scale(0.25);
}

.css3 {
    top: 55%;
    left: 35%;
    transform: translate(-50%, -50%) rotate(5deg) translateZ(2px) scale(0.25);
}

.html5 {
    top: 30%;
    left: 65%;
    transform: translate(-50%, -50%) rotate(10deg) translateZ(2px) scale(0.25);
}

.javascript {
    top: 15%;
    left: 60%;
    transform: translate(-50%, -50%) rotate(-5deg) translateZ(1px) scale(0.25);
}

.acessibilidade {
    top: 30%;
    left: 35%;
    transform: translate(-50%, -50%) rotate(-5deg) translateZ(3px) scale(0.25);
}

.responsivo {
    top: 40%;
    left: 40%;
    transform: translate(-50%, -50%) rotate(10deg) translateZ(3px) scale(0.25);
}

.otimizacoes {
    top: 70%;
    left: 65%;
    transform: translate(-50%, -50%) rotate(-5deg) translateZ(2px) scale(0.25);
}

.agilidade {
    top: 75%;
    left: 35%;
    transform: translate(-50%, -50%) rotate(5deg) translateZ(1px) scale(0.25);
}

.design {
    top: 40%;
    left: 60%;
    transform: translate(-50%, -50%) rotate(10deg) translateZ(2px) scale(0.25);
}

.blog .mais-recente a {
    color: #F26;
    background-color: #F2FFFC;
}

.blog .inicio-post {
    position: absolute;
    top: 4em;
    height: 8em;
    left: 30%;
    right: 4em;
    background-color: #F2FFFC;
    color: #000;
    padding: 1.5em;
}

.banner {
    font-size: 1.5rem;
    font-family: "Open Sans Condensed", sans-serif;

    position: absolute;
    top: 0;
    right: 0;
    transform-origin: 0 0;
    transform: translate(6.5754em, -2.4749em) rotate(45deg);

    width: 14em;
    box-sizing: border-box;
    padding: 1em 0;
    line-height: 1;

    text-align: center;
    text-decoration: none;
    border: .25em solid black;
    color: white;
    background-color: #3C1D3D;
}

.palavras-home {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}

footer {
    background-color: #000;
    color: #FFF;
    padding: 2em;
}

footer h2 {
    font-size: 3em;
}

footer a {
    color: #F99;
}

main {
    width: 100%;
    padding-bottom: 0;
    margin-bottom: 0;
    float: none;
}

header {
    position: relative;
}

html, body {
    height: 100%;
    overflow-x: hidden;
}

body {
    perspective: 6px;
    perspective-origin: 50% 11em;
}
3 respostas

Oi Lucas, tudo bem? Neste caso você não vai notar a diferença realmente. Porém deixe-me tentar explicar. Nas transformações, o estilo pode ser Flat ou 3D. No flat, nos a transformação no eixo Z é ignorada. Vocẽ terá transformações em X e em Y. O Z é quem determina qual elemento vai sobrepor qual. No Flat os elementos aparecem no fluxo padrão de página, no 3D não. Encontrei um exemplo legal neste link: http://codepen.io/impressivewebs/pen/pIgBf

Por padrão o estilo é flat, é o primeiro caso quando abrir o link. O estilo no eixo Z é ignorado. Porém ao clicar no botão, você verá que os elementos ficam posicionados de forma diferente, considerando um espaço 3D e aceitando as sobreposições do Eixo.

Oi Wanderson. No exemplo que você me mostrou eu entendi o que aconteceu. Mas não consigo entender o por quê do meu código não precisar do preserve-3d. Consegue enxergar o motivo?

solução!

Hm, eventualmente, considerando o que eu comentei antes, não seria obrigatório por causa que não existe sobreposição, a perspectiva já consegue passar uma ideia de 3d do jeito que está. Isso por que o efeito é simplesmente um distanciamento de fonte. Contudo, acredito que se houvesse sobreposição dos elementos, teria problemas em ver isso acontecendo.

No geral, é melhor deixar explicito que esse é um cenário 3D, por boa prática. assim o navegador já deixa o comportamento definido.

Esse exemplo da aula eu confesso ser simples, mas há outros mais interessantes, um exemplo clássico é um dado, com seis lados. Exemplo: https://codepen.io/tameraydin/pen/CADvB

Neste caso, é muito mais claro de ver o efeito 3d, agora experimente tirar o preserve-d3 do #dice. Você não visualizar mais os números nem os lados do dado, somente um quadrado girando dentro da perspectiva.