2015-05-03 35 views
7

我期待重新像這樣用CSS 3D變換的效果:3D text如何創建與CSS3直立的3D文字效果變換

如何實現這一目標?這裏就是我有這麼遠

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>

我想,如果我旋轉的背景表面60度,旋轉文本-60度,將取消出來的效果,但顯然不是?

無論如何,在此先感謝。

+1

使用僞元素如果''p''是''.grid''的子節點,你就無法達到這種效果。之所以會這樣,是因爲''p''的變換被渲染到''.grid''的3D表面上,所以你不能獲得你想要的那種「站立」效果。你必須讓他們的兄弟元素,並確保段落顯示在網格頂部使用絕對定位。 –

回答

2

是,療法解決問題的方法是使用變換風格:保持-3D。

但這樣做的問題是,IE瀏覽器不支持此屬性

的一種方法,使其工作在IE是在p

.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

經過一番研究,我有信心發佈我自己的答案。

使用transform-style屬性並將其設置爲preserve-3d可以實現此效果。這將設置爲父元素(在本例中爲.grid)。我也使用transform-origin:bottom從網格中提取文本。這裏的片段:

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

啊,很酷!然後,我收回上面的評論。我不知道「轉換式」屬性。 –

+0

爲了記錄,不要使用'translateZ''(它需要知道段落的高度),你可以使用''transform-origin:bottom;''。它更容易和更通用的解決方案。 –

+0

謝謝,將編輯帖子。 – hexagonest