2015-05-03 12 views
7

szukam odtworzyć efekt takiego CSS 3D Transforms: 3D textJak utworzyć stały się efekt 3D tekst z CSS3 przekształca

Jak to osiągnąć? Oto co mam do tej pory

body { 
 
    perspective: 400px; 
 
    transition: perspective 1s; 
 
} 
 
.grid { 
 
    display: flex; 
 
    justify-content: center; 
 
    align-items: center; 
 
    background-image: url("http://i.imgur.com/3ACizko.jpg"); 
 
    background-size: cover; 
 
    height: 400px; 
 
    width: 400px; 
 
    transform: rotateX(60deg); 
 
    margin: 0 auto; 
 
    transition: transform 1s; 
 
    perspective: 400px; 
 
} 
 
.grid p { 
 
    transition: transform 1s; 
 
    transform: rotateX(-60deg); 
 
}
<div class="grid"> 
 
    <p>Hello</p> 
 
</div>

Pomyślałem, że gdybym obracany powierzchni tła 60 stopni i obracać tekst -60 stopni byłoby anulować efekt, ale najwyraźniej nie?

W każdym razie, z góry dzięki.

+1

Nie możesz osiągnąć tego efektu, jeśli '' p'' jest dzieckiem '' .grid''. Powodem jest to, że transformacje '' p'' są następnie renderowane na powierzchni 3D '' .grid'', więc nie możesz uzyskać efektu "stałego", którego szukasz w ten sposób. Będziesz musiał zrobić z nich elementy rodzeństwa i upewnić się, że akapit jest wyświetlany na górze siatki przy użyciu bezwzględnego pozycjonowania. –

Odpowiedz

2

Tak, Ther rozwiązanie problemu jest za pomocą przekształcenia stylu: zachować-3d.

Ale problem polega na tym, że IE nie obsługuje tej właściwości

sposób, aby działać w IE jest użycie elementu pseudo na str

.grid { 
 
    font-size: 30px; 
 
    position: relative; 
 
    left: 100px; 
 
    top: 200px; 
 
    perspective: 200px; 
 
    perspective-origin: 0% 50%; 
 
} 
 

 
.grid:after { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 300px; 
 
    height: 200px; 
 
    top: -100px; 
 
    left: -100px; 
 
    transform: rotateX(30deg); 
 
    background-image: repeating-linear-gradient(0deg, transparent 0px, transparent 47px, black 47px, black 50px), 
 
    repeating-linear-gradient(90deg, transparent 0px, transparent 47px, black 47px, black 50px); 
 
    }
<p class="grid">Hello</p>

1

Po kilku badaniach, jestem pewien, że mogę opublikować własną odpowiedź.

Ten efekt można uzyskać, korzystając z właściwości transform-style i ustawiając ją na preserve-3d. Zostanie to ustawione na element nadrzędny (w tym przypadku .grid). Używam również transform-origin:bottom do podnoszenia tekstu z poziomu siatki. Oto fragment:

body { 
 
    perspective: 400px; 
 
    transition: perspective 1s; 
 
} 
 
.grid { 
 
    display: flex; 
 
    justify-content: center; 
 
    align-items: center; 
 
    background-image: url("http://i.imgur.com/3ACizko.jpg"); 
 
    background-size: cover; 
 
    height: 400px; 
 
    width: 400px; 
 
    transform: rotateX(60deg); 
 
    margin: 0 auto; 
 
    transition: transform 1s; 
 
    perspective: 400px; 
 
    transform-style:preserve-3d; 
 
} 
 
.grid p { 
 
    transition: transform 1s; 
 
    transform-origin:bottom; 
 
    transform: rotateX(-60deg); 
 
}
<div class="grid"> 
 
    <p>Hello</p> 
 
</div>

+0

Ach, fajnie! Dlatego odbieram mój komentarz powyżej. Nie wiedziałem o właściwości '' transform-style''. –

+0

Dla zapisu, zamiast używać '' translateZ'' (wymagającego znajomości wysokości akapitu), możesz użyć '' transform-origin: bottom; ''. To rozwiązanie znacznie łatwiejsze i bardziej ogólne. –

+0

Dziękuję, zmienisz wpis. – hexagonest

Powiązane problemy