久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

奇思妙想 CSS 3D 動畫 | 僅使用 CSS 能制作出多驚艷的動畫,?

 風聲之家 2021-08-27

以下文章來源于iCSS前端趣聞 ,,作者SbCoco

iCSS前端趣聞

不止于 CSS 。

本文將從比較多的方面詳細闡述如何利用 CSS 3D 的特性,,實現各類有趣,、酷炫的動畫效果。認真讀完,,你將會收獲到:

  • 了解 CSS 3D 的各種用途
  • 激發(fā)你新的靈感,,感受動畫之美
  • 對于提升 CSS 動畫制作水平會有所幫助

CSS 3D 基礎知識

本文默認讀者掌握一定的 CSS 3D 知識,能夠繪制初步的 3D 動畫效果,。當然這里會再簡單過一下 CSS 3D 的基礎知識,。

使用 transform-style 啟用 3D 模式

要利用 CSS3 實現 3D 的效果,最主要的就是借助 transform-style 屬性,。transform-style 只有兩個值可以選擇:

// 語法:
transform-styleflat|preserve-3d;
 
transform-styleflat; // 默認,,子元素將不保留其 3D 位置
transform-stylepreserve-3d; // 子元素將保留其 3D 位置。

當我們指定一個容器的 transform-style 的屬性值為 preserve-3d 時,,容器的后代元素便會具有 3D 效果,,這樣說有點抽象,,也就是當前父容器設置了 preserve-3d 值后,它的子元素就可以相對于父元素所在的平面,,進行 3D 變形操作,。

利用 perspective & perspective-origin 設置 3D視距,實現透視/景深效果

perspective 為一個元素設置三維透視的距離,,僅作用于元素的后代,,而不是其元素本身。

簡單來說,,當元素沒有設置 perspective 時,也就是當 perspective:none/0 時所有后代元素被壓縮在同一個二維平面上,,不存在景深的效果,。

而如果設置 perspective 后,將會看到三維的效果,。

// 語法
perspectivenumber|none;

// 語法
perspective-originx-axis y-axis;
// x-axis : 定義該視圖在 x 軸上的位置,。默認值:50%
// y-axis : 定義該視圖在 y 軸上的位置。默認值:50%

而 perspective-origin 表示 3D 元素透視視角的基點位置,,默認的透視視角中心在容器是 perspective 所在的元素,,而不是他的后代元素的中點,也就是 perspective-origin: 50% 50%,。

通過繪制 Webpack Logo 熟悉 CSS 3D

對于初次接觸 CSS 3D 的同學而言,,可以通過繪制正方體快速熟悉語法,了解規(guī)則,。

而 Webpack 的 Logo,,正是由 2 個 立方體組成:

圖片

以其中一個正方體而言,實現它其實非常容易:

  1. 一個正方體由 6 個面組成,,所以首先設定一個父元素 div,,然后這個 div 再包含 6 個子 div,同時,,父元素設置 transform-style: preserve-3d,;
  2. 6 個子元素,依次首先旋轉不同角度,,再通過 translateZ 位移正方體長度的一半距離即可
  3. 父元素可以通過 transform 和 perspective 調整視覺角度

以一個正方體為例子,,簡單的偽代碼如下:

<ul class="cube-inner">
  <li class="top"></li>
  <li class="bottom"></li>
  <li class="front"></li>
  <li class="back"></li>
  <li class="right"></li>
  <li class="left"></li>
</ul>
.cube {
    width100px;
    height100px;
    transform-style: preserve-3d;
    transform-origin50px 50px;
    transformrotateX(-33.5degrotateY(45deg);

    li {
      position: absolute;
      top0;
      left0;
      width100px;
      height100px;
      backgroundrgba(141214249);
      border1px solid #fff;
    }
    .top {
      transformrotateX(90degtranslateZ(50px);
    }
    .bottom {
      transformrotateX(-90degtranslateZ(50px);
    }
    .front {
      transformtranslateZ(50px);
    }
    .back {
      transformrotateX(-180degtranslateZ(50px);
    }
    .left {
      transformrotateY(-90degtranslateZ(50px);
    }
    .right {
      transformrotateY(90degtranslateZ(50px);
    }
}

疊加兩個,調整顏色和透明度,,我們可以非常輕松的實現 Webpack 的 LOGO:

圖片

當然,,這里的 LOGO 為了保證每條線條視覺上的一致性,其實是沒有設置景深效果 perspective 的,,我們可以嘗試給頂層父容器添加一下如下代碼,,通過 transform 和 perspective 調整視覺角度,,設置景深效果:

.father {
    transform-style: preserve-3d;
    perspective200px;
    transformrotateX(10deg);
}

就可以得到真正的 3D 效果,感受很不一樣:

圖片

完整的代碼,,你可以戳這里:CodePen Demo -- Webpack LOGO[1]


OK,,熱身完畢,接下來,,讓我們插上想象的翅膀,,走進 CSS 3D 的世界。

實現文字的 3D 效果

首先,,看看一些有意思的 CSS 3D 文字特效,。

要實現文字的 3D 效果,看起來是立體的,,通常的方式就是疊加多層,。

下面有一些實現一個文字的 3D 效果的方式。

假設我們有如下結構:

<div class="g-container">
    <p>Lorem ipsum</p>
</div>

如果什么都不加,,文字的展示可能是這樣的:

圖片

我們可以通過疊加陰影多層,,營造 3D 的感覺,主要是合理控制陰影的距離及顏色,,核心 CSS 代碼如下:

p {
    text-shadow
        4px 4px 0 rgba(000, .8),
        8px 8px 0 rgba(000, .6),
        12px 12px 0 rgba(000, .4),
        16px 16px 0 rgba(000, .2),
        20px 20px 0 rgba(000, .05);
}

圖片

這樣,,就有了基礎的 3D 視覺效果。

3D 氖燈文字效果

基于此,,我們可以實現一些 3D 文字效果,,來看一個 3D 氖燈文字效果,核心就是:

  • 利用 text-shadow 疊加多層文字陰影
  • 利用 animation 動態(tài)改變陰影顏色
<div class="container">
 <p class="a">CSS 3D</p>
 <p class="b">NEON</p>
 <p class="a">EFFECT</p>
</div>

核心 CSS 代碼:

.container {
 transformrotateX(25degrotateY(-25deg);
}
.a {
 color#88e;
 text-shadow0 0 0.3em rgba(2002002550.3), 0.04em 0.04em 0 #112,
  0.045em 0.045em 0 #88e0.09em 0.09em 0 #1120.095em 0.095em 0 #66c,
  0.14em 0.14em 0 #1120.145em 0.145em 0 #44a;
 animation: pulsea 300ms ease infinite alternate;
}
.b {
 color#f99;
 text-shadow0 0 0.3em rgba(2551002000.3), 0.04em 0.04em 0 #112,
  0.045em 0.045em 0 #f990.09em 0.09em 0 #1120.095em 0.095em 0 #b66,
  0.14em 0.14em 0 #1120.145em 0.145em 0 #a44;
 animation: pulseb 300ms ease infinite alternate;
}
@keyframes pulsea {
 // ... 陰影顏色變化
}
@keyframes pulseb {
 // ... 陰影顏色變化
}

可以得到如下效果:

圖片

完整的代碼,,你可以猛擊這里 CSS 靈感 -- 使用陰影實現文字的 3D 氖燈效果[2]

利用 CSS 3D 配合 translateZ 實現真正的文字 3D 效果

當然,,上述第一種技巧其實沒有運用 CSS 3D。下面我們使用 CSS 3D 配合 translateZ 再進一步。

假設有如下結構:

<div>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>
  <h1>Glowing 3D TEXT</h1>  
</div>

我們通過給父元素 div 設置 transform-style: preserve-3d,,給每個 <h1> 設定不同的 translateZ() 來達到文字的 3D 效果:

div {
    transform-style: preserve-3d;
}
h1:nth-child(2) {
    transformtranslateZ(5px);
}
h1:nth-child(3) {
    transformtranslateZ(10px);
}
h1:nth-child(4) {
    transformtranslateZ(15px);
}
h1:nth-child(5) {
    transformtranslateZ(20px);
}
h1:nth-child(6) {
    transformtranslateZ(25px);
}
h1:nth-child(7) {
    transformtranslateZ(30px);
}
h1:nth-child(8) {
    transformtranslateZ(35px);
}
h1:nth-child(9) {
    transformtranslateZ(40px);
}
h1:nth-child(10) {
    transformtranslateZ(45px);
}

當然,,輔助一些旋轉,,色彩變化,,就可以得到更純粹一些 3D 文字效果:

圖片

完整的代碼,你可以猛擊這里 CSS 靈感 -- 3D 光影變換文字效果[3]

利用距離,、角度及光影構建不一樣的 3D 效果

還有一種很有意思的技巧,,制作的過程需要比較多的調試。















,。

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多