成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

純CSS實現(xiàn)有趣Emoji切換開關(guān),你知道嗎?

開發(fā) 前端
通過使用CSS變量、3D變換和過渡效果,創(chuàng)建了一個既美觀又功能豐富的Emoji Toggle按鈕。這個交互效果極大了增強了用戶體驗。

這是一個純CSS創(chuàng)建的動畫切換開關(guān),它不僅能夠在視覺上吸引用戶,還能通過交互提供即時反饋。本文將解析源碼的核心實現(xiàn)邏輯,這個項目的核心是使用CSS變量、3D變換和過渡效果來實現(xiàn)一個動態(tài)的、響應(yīng)式的用戶界面元素。

關(guān)鍵技術(shù)點

  1. CSS變量:用于動態(tài)調(diào)整樣式。
  2. 3D變換:用于創(chuàng)建翻轉(zhuǎn)動畫效果。
  3. 過渡效果:用于平滑地改變元素的樣式。
  4. emoji:并不是真正的emoji而是通過CSS繪制。

實現(xiàn)步驟

1. HTML

首先需要創(chuàng)建一個基本的HTML結(jié)構(gòu),包括一個表單元素(checkbox)和一個用于顯示Emoji的元素。這里的switch__emoji-face即是開關(guān)上面的兩個emoji表情。

<div class="switch">
  <input type="checkbox" class="switch__input" id="toggle">
  <label for="toggle" class="switch__label">Toggle</label>
  <div class="switch__wrapper">
    <div class="switch__emoji">
      <div class="switch__emoji-face"></div>
      <div class="switch__emoji-face"></div>
    </div>
  </div>
</div>

2. CSS

接下來,我們使用CSS來設(shè)計這個切換開關(guān)的樣式。這段CSS代碼主要用來實現(xiàn)以下幾個目標(biāo):

  1. 統(tǒng)一的顏色主題:

通過定義 --hue 變量,可以在整個網(wǎng)站中統(tǒng)一色調(diào),使得顏色方案更加一致。

--bg 和 --fg 分別定義了背景色和前景色,使得文本和背景之間有良好的對比度,提高可讀性。

  1. 動態(tài)響應(yīng)的字體大小:

使用 calc() 函數(shù)和視口寬度單位 vw,可以根據(jù)屏幕大小動態(tài)調(diào)整字體大小,實現(xiàn)響應(yīng)式設(shè)計。

  1. 平滑的過渡動畫:

--trans-dur 定義了過渡動畫的持續(xù)時間,使得元素的顯示和隱藏更加平滑自然。

--trans-timing1 和 --trans-timing2 使用貝塞爾曲線定義了動畫的緩動效果,使得動畫變化更加符合物理規(guī)律和視覺習(xí)慣。

  1. 易于維護和擴展:

通過使用CSS變量,可以在一個地方修改值,而在整個文檔中生效,提高了代碼的可維護性。

同時這些變量也可以在其他樣式規(guī)則中被引用,方便進行樣式的擴展和復(fù)用。

:root {
  --hue: 223;
  --bg: hsl(var(--hue),10%,90%);
  --fg: hsl(var(--hue),10%,10%);
  --trans-dur: 0.5s;
  --trans-timing1: cubic-bezier(0.65,0,0.35,1);
  --trans-timing2: cubic-bezier(0.65,0,0.35,1.5);
  font-size: calc(56px + (120 - 56) * (100vw - 280px) / (3840 - 280));
}

Emoji 的繪制主要依賴于 .switch__emoji 相關(guān)的 CSS 代碼塊。這段代碼通過使用 CSS 的 transform 屬性和一些偽元素來創(chuàng)建一個可動的 Emoji 效果。以下是核心代碼部分的解釋:

.switch__emoji {
  $hue: 48;
  $sat: 90%;
  $radius: 0.5em;

  box-shadow: 0.25em 0.25em 0.125em hsl(0,0%,0%,0.3);
  overflow: hidden;
  pointer-events: none;
  top: 0.25em;
  left: 0.25em;
  width: 1em;
  height: 1em;

  /* ...其他樣式... */

  &:before,
  &:after,
  &-eye,
  &-mouth,
  &-face {
    display: block;
    position: absolute;
  }

  /* ...其他樣式... */
}
  • 偽元素 &:before 和 &:after : 用于繪制 Emoji 的臉的上半部分和下半部分,通過 border-radius 屬性設(shè)置為圓形,并通過 box-shadow 為 Emoji 添加眼睛和嘴巴。
  • &-eye : 用于繪制 Emoji 的眼睛。通過 border 屬性創(chuàng)建一個有邊框的圓,并利用 transform 屬性調(diào)整位置和傾斜角度。
  • &-mouth : 用于繪制 Emoji 的嘴巴。通過 background-image 屬性使用漸變和徑向漸變來創(chuàng)建嘴巴的形狀。
  • &-face : 用于繪制 Emoji 的臉部,通過 transform-style: preserve-3d 屬性來保留 3D 空間中的子元素位置。
  • 3D 轉(zhuǎn)換 : 使用 transform 屬性的 rotateY 和 translateZ 函數(shù)來創(chuàng)建翻轉(zhuǎn)效果。
  • 過渡效果 : 使用 transition 屬性來平滑地變換 Emoji 的表情。

下面是繪制 Emoji 表情的核心部分,接下來就是3D動畫變換:

.switch__emoji-eye {
  border: 0.0625em solid hsl(var(--hue),10%,10%);
  border-radius: 50%;
  top: 50%;
  left: 50%;
  width: 0.25em;
  height: 0.25em;
  transform: translate(-50%,-50%) rotateY(-22.5deg) translateZ($radius) rotateZ(45deg);
}

.switch__emoji-mouth {
  background-image: ...;
  top: 50%;
  left: 50%;
  width: 0.5em;
  height: 0.5em;
  transform: translate(-50%,-50%) rotateX(-15deg) translateZ($radius);
}

3. 3D變換和過渡

為了實現(xiàn)Emoji的翻轉(zhuǎn)效果,我們使用CSS的3D變換和過渡屬性。點擊切換動畫的主要部分涉及到 .switch__input 這個 checkbox 輸入元素以及與之相關(guān)的 .switch__emoji 元素。當(dāng) checkbox 被選中時,會觸發(fā) .switch__emoji 的狀態(tài)變化,從而執(zhí)行動畫。

這里對于從右到左(如阿拉伯語或希伯來語)的語言,還實現(xiàn)了相反方向的滑動。??

以下是實現(xiàn)點擊切換動畫的核心代碼:

.switch__input:checked + .switch__emoji {
  transform: translateX(100%);
}

[dir="rtl"] .switch__input:checked + .switch__emoji {
  transform: translateX(-100%);
}

.switch__input:checked + .switch__emoji .switch__emoji-face {
  transform: rotateY(179.99deg);
}

[dir="rtl"] .switch__input:checked + .switch__emoji .switch__emoji-face {
  transform: rotateY(-179.99deg);
}

.switch__input:checked + .switch__emoji .switch__emoji-face + .switch__emoji-face {
  transform: rotateY(0);
}

[dir="rtl"] .switch__input:checked + .switch__emoji .switch__emoji-face + .switch__emoji-face {
  transform: rotateY(-360deg);
}

代碼解析

  1. .switch__input:checked + .switch__emoji :
  • 當(dāng) .switch__input 被選中(即被勾選)時,與其相鄰的 .switch__emoji 元素會執(zhí)行 transform: translateX(100%); 動畫,即沿著 X 軸移動自身寬度的 100%,從而實現(xiàn)滑塊開關(guān)的效果。
  1. [dir="rtl"] .switch__input:checked + .switch__emoji :
  • 對于從右到左(如阿拉伯語或希伯來語)的語言,使用 translateX(-100%); 來實現(xiàn)相反方向的滑動。

  1. .switch__input:checked + .switch__emoji .switch__emoji-face :

  • 當(dāng) .switch__input 被選中時,.switch__emoji-face 元素會執(zhí)行 rotateY(179.99deg); 動畫,即圍繞 Y 軸旋轉(zhuǎn) 179.99 度,接近 180 度的旋轉(zhuǎn)使得 Emoji 翻轉(zhuǎn)。

  1. [dir="rtl"] .switch__input:checked + .switch__emoji .switch__emoji-face :

  • 對于從右到左的語言,使用 rotateY(-179.99deg); 來實現(xiàn)相反方向的翻轉(zhuǎn)。

  1. .switch__input:checked + .switch__emoji .switch__emoji-face + .switch__emoji-face :

  • 當(dāng) .switch__input 被選中時,第二個 .switch__emoji-face 元素會執(zhí)行 rotateY(0); 動畫,即恢復(fù)到原始狀態(tài)。

  1. [dir="rtl"] .switch__input:checked + .switch__emoji .switch__emoji-face + .switch__emoji-face :

  • 對于從右到左的語言,使用 rotateY(-360deg); 來實現(xiàn)相反方向的旋轉(zhuǎn)。

動畫效果的實現(xiàn)

核心動畫效果是通過 CSS 的 transition 屬性來實現(xiàn)的,確保變換是平滑的。

.switch__emoji-face {
  transform-style: preserve-3d;
  transition: transform var(--trans-dur) var(--trans-timing2);
}
  • transform-style: preserve-3d; 確保子元素在 3D 空間中的位置得以保留。
  • transition: transform var(--trans-dur) var(--trans-timing2); 定義了變換的持續(xù)時間和緩動函數(shù),使得動畫效果更加平滑自然。

通過這些代碼,點擊切換按鈕時,Emoji 會沿著一個軸翻轉(zhuǎn),同時滑塊也會移動,從而實現(xiàn)了一個有趣的切換動畫效果。

響應(yīng)式設(shè)計

為了確保這個按鈕在不同設(shè)備上以及暗色場景下都能良好顯示,源碼使用了CSS媒體查詢和相對單位。

@media (prefers-color-scheme: dark) {
  :root {
    --bg: hsl(var(--hue),10%,10%);
    --fg: hsl(var(--hue),10%,90%);
  }
  .switch__input {
    background-color: hsl(var(--hue),10%,20%);
    box-shadow: 0.0625em 0.0625em 0.0625em hsl(var(--hue),10%,25%) inset, -0.0625em -0.0625em 0.0625em hsl(var(--hue),10%,20%) inset, 0 0 0 0.125em hsl(var(--hue),10%,30%) inset, 0.25em 0.25em 0.125em hsla(0,0%,0%,0.3) inset, 0.0625em 0.0625em 0.0625em hsla(0,0%,0%,0.3);
  }
}

總結(jié)

通過使用CSS變量、3D變換和過渡效果,創(chuàng)建了一個既美觀又功能豐富的Emoji Toggle按鈕。這個交互效果極大了增強了用戶體驗。

責(zé)任編輯:武曉燕 來源: 南城大前端
相關(guān)推薦

2021-10-14 06:52:47

算法校驗碼結(jié)構(gòu)

2024-02-19 08:01:59

服務(wù)微服務(wù)授權(quán)

2023-09-27 08:33:16

作用域CSS

2022-09-29 12:20:48

CSS容器查詢

2021-01-06 08:48:35

CSS 命名模塊

2023-12-20 08:23:53

NIO組件非阻塞

2023-12-12 08:41:01

2023-04-26 10:21:04

2024-04-30 09:02:48

2024-11-26 00:45:29

free區(qū)域字段

2022-07-05 08:05:00

策略模式接口實現(xiàn)類

2024-05-28 09:12:10

2024-04-07 00:00:00

ESlint命令變量

2024-01-09 07:29:05

Argo代碼庫應(yīng)用程序

2020-10-28 11:20:55

vue項目技

2019-12-12 09:23:29

Hello World操作系統(tǒng)函數(shù)庫

2017-10-16 13:45:04

2024-07-30 08:22:47

API前端網(wǎng)關(guān)

2022-05-27 08:55:15

工具自動化軟件

2022-03-10 08:25:27

JavaScrip變量作用域
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 成人黄色a | 亚洲国产电影 | 国产精品美女在线观看 | 久久久久久久久91 | 欧美电影免费观看高清 | 91精品国产一区二区三区 | 国产色视频网站 | 91免费看片神器 | 7777在线视频免费播放 | 亚洲国产精品一区在线观看 | 国产精品国产三级国产aⅴ无密码 | 中文字幕免费中文 | 国产精品1区2区3区 国产在线观看一区 | 日本免费一区二区三区四区 | 久久久久久久久99 | 国产美女精品 | 欧美成人精品二区三区99精品 | 国产欧美精品一区 | 午夜国产一区 | 91中文字幕在线观看 | 精品欧美乱码久久久久久 | 日本黄色一级视频 | 精品久久久久久国产 | 91精品久久久久久久久中文字幕 | 亚洲欧美激情四射 | 亚洲国产一区二区三区 | 日本天堂视频在线观看 | 亚洲精品视频三区 | 国产精品久久久久免费 | 国产黄色大片 | 人人干97 | 欧美一级免费片 | 国产激情在线 | 亚洲成年影院 | 国产精品亚洲综合 | 国产区在线观看 | 污污的网站在线观看 | 蜜桃视频在线观看www社区 | 韩国精品在线 | 欧美激情欧美激情在线五月 |