iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
自我挑戰組

JavaScript 是什麼?可以吃嗎?系列 第 11

Day11- 使用SetProperty 自定義你的 CSS 變數

  • 分享至 

  • xImage
  •  

幫我優化語句
嗨大家好,我是Eric!
今天我們來談談如何在HTML、CSS和JavaScript中使用自定義CSS屬性(CSS Variables)。這是一個實用的技巧,特別是當你需要在不同的元素或條件下使用相同的屬性值。

HTML 結構
首先,我們準備一個圓形在容器中來回移動的例子來演示,怎麼使用 CSS 及 JS style.property() 來完成這個動畫。

.container {
  width: 80%;
  height: 300px;
  border: 1px solid #000;
  position: relative;
  margin: 0 auto;
}
.item {
  display: block;
  height: 50px;
  width: 50px;
  border-radius: 50%;
  background-color: red;
  position: absolute;
  left: 0;
  top: 50%;
  animation: move 4s linear infinite;
}
<div class="container">
  <div class="item"></div>
</div>

下面我們定義 move animation,如果要計算子元素在父元素的移動距離,計算方式為:「父元素的寬度 - 子元素的寬度,但是在這裡 父元素 container 的寬度是為 80%,是一個變動的值,所以我們沒辦法直接把寬度寫死,所以先定一個 --w 變數,等等由 JS 來賦值。

@keyframes move {
  50% {
    transform: translateX(calc(var(--w) - 100%));
  }
}
// 取得 父元素
const container = document.querySelector('.container')

// 取得 子元素
const item = document.querySelector('.item')

// 取得 --w 寬度
item.style.setProperty('--w', `${container.clientWidth}px`)

這樣一來,--w 在CSS中就會取得這個動態設定的值,並用於動畫計算

結論
這個技巧允許我們更靈活地控制CSS屬性和動畫,特別是當這些值需要動態計算或改變時。自定義CSS屬性在這裡發揮了很大的作用,讓我們能夠在 CSS 和 JavaScript 之間輕鬆地共享數據,這次分享就到這邊,謝謝大家,明天見~


上一篇
Day10 - ES6 Set 實作聯集、交集和差集
下一篇
Day12 - CCS ellipsis
系列文
JavaScript 是什麼?可以吃嗎?20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言