TP Notes
全部
CSS
SVG
資源收集
HTML
其它
關於我
Translate
顯示具有
CSS 筆記
標籤的文章。
顯示所有文章
顯示具有
CSS 筆記
標籤的文章。
顯示所有文章
2020年11月18日 星期三
CSS 狀態改變動畫
之前寫了一篇 [CSS 動畫](https://yhtpnotes.blogspot.com/2020/05/css.html) 時,忘了應該先寫這個狀態變化的動畫,大部份的應用都是用在滑鼠移到上面時的用動畫方式改變狀態,實際上,這個功能對於所有狀態變化都可以變成動畫 參數說明: ``` transition [動畫持續時間] [delay 多久開始] [timing-function] transition-delay [delay 多久開始] transition-duration [動畫持續時間] transition-property [指定改變的屬性] transition-timing-function [動畫 timing] ``` 我個人偏好不使用 transition-property ,這樣可以更自由的使用這個功能 首先先來一個最簡單的範例: 在 **#a11181_div:hover** 裡頭加了 **transition: 1s** 後 ,滑鼠移過去時,顏色會慢慢的變成黃色,同時長度從 100px 慢慢變成 200px, 當滑鼠移開時,因為在 **#a11181_div** 加上了 **transition: 0.2s;** ,會以動畫方式很快的恢復原狀,如果沒有加上 **transition** ,狀態會瞬間改變,不會有動畫效果,另外還有加上 **transition-delay** , 所以會等 0.5 秒後才開始動畫 而下面的 [SET] 和 [UNSET] 是利用 javascript 去做設定,結果一樣會以動畫顯示, 當用 javascript 設定時,是直接寫在元件上,所以 hover 改變 width 就沒作用了,而 [CSS SET] 和 [CSS UNSET] 的是直接修改本來的 CSS 設定,所以不影響 hover 。 ``` $mmcode(r1) ```
SET
UNSET
CSS SET
CSS UNSET
2020年8月13日 星期四
css 的 mask
CSS 有一個小功能是 mask , 可以用來製作遮罩,和 clip-path 不同的地方是,他可以用漸層或用另一個圖片的 alpha 來做裁切, 範例如下 : ``` $mmcode(r1) ```
完整語法是 : ``` -webkit-mask: url(圖片) x y/寬 高 repeat; -webkit-mask-image: url(圖片); -webkit-mask-position: x y; -webkit-mask-size: 寬 高; -webkit-mask-repeat: repeat 或 no-repeat; ``` 其它更詳細的參數可以參考 https://developer.mozilla.org/zh-CN/docs/Web/CSS/mask
2020年7月17日 星期五
background
網頁上要秀一張圖,第一個想到的是 `
` 這個方式,後來才發現有個更好用的,就是 background-image , 雖然知道有些特別的用法,卻一直沒有去深入瞭解, 所以在這做個小筆記! ``` $mmcode(r1) ```
背景圖片不一定要用圖片,也可以用 repeating-linear-gradient 和 repeating-radial-gradient 來產生線性漸層或圓形漸層的背景, 如果再控制好大小和座標,基本上可以用來畫圖了 ``` $mmcode(r2) ```
repeating-linear-gradient 很好玩的地方就是, 他自帶 repeat 功能,可以很容易實現尺規的繪製 ``` $mmcode(r3) ```
repeating-radial-gradient 可以用來畫圓,加上 ::before 及 ::after 用邊框來畫三角形,就可以畫出之前靠邊框做不到的箭頭 ``` $mmcode(r4) ```
repeating-radial-gradient 的詳細說明 參考網址:https://www.runoob.com/cssref/func-repeating-radial-gradient.html repeating-radial-gradient(shape size at position, start-color, ..., last-color); shape : ellipse (預設), circle
size : farthest-corner (預設), closest-side, closest-corner, farthest-side 可以利用這個來晝半圓 ``` $mmcode(r5) ```
----------------------------------------------------- # background-attachment scroll - 預設, 就是像牆壁的背景,不會跟著捲動而移動
local - 背景圖片會隨著捲動而移動
fixed - 背景圖片的位置是固定在螢幕上的,不會隨著 div 移動而移動
**
在 iPhone 上似忽只有 scroll 其它的不支援
**
background-attachment
scroll,scroll
local,local
scroll,local
local,scroll
This is a background test.
This is a background test.
This is a background test.
fixed
This is a background test.
scroll/local
This is a background test.
This is a background test.
This is a background test.
This is a background test.
This is a background test.
----------------------------------------------------- # background-clip 背景的裁切,最好玩的地方是可以用文字裁切,可以做文字的特效 **
在 iPhone 和 Mac 的 safari 對於 text 的支援有點不一樣
**
background-clip
border-box
padding-box
content-box
text
This is a background test.
-----------------------------------------------------
2020年7月3日 星期五
即時操作 CSS - cssjson.js
上一篇本來想寫個操作所有 CSS 的程式, 卻發現只要在不同網域其實是無法修改的,最簡單的方式還是用新的取代舊的,而 CSS 的設計又有點奇怪,刪除就是該設定全部刪掉了,既然如此,就來寫一個加強版的CSS 工具,用 json 來操作 CSS 原始碼 : https://github.com/yiharng/cssjson 首先先加入 cssjson.js ``` ``` # 使用方式 ``` var rc=cssjson();//在 head 新增一個 style var rc=cssjson("body");//在 body 新增一個 style var rc=cssjson("style");//使用目前網頁中的第一個 style var rc=cssjson("#objid");//使用 id 為 objid 的 style ``` # Functions ``` rc.list() //列出所有的 css 名稱 rc.list(".tag") //取得 .tag 的索引位置 rc.get(".tag") //取得 .tag 的 CSS 設定,以 json 型態回傳 key=rc.get("@key") //取得 @keyframes 名稱為 key 的 CSS 設定 rc.set(".tag",{color:"#f00"}) //新增或取代 .tag 中的 css 設定 rc.set(".tag","{color:#f00}") //以字串中的設定取代原來的所有設定 rc.del(".tag")//刪除 .tag key.list() //列出所有的 keyframes key.get("100%") //取得該 frame 的設定,以 json 型態回傳 key.set("100%",{background-color:"#00f"}) //新增或取代 frame 的設定 key.del("100%") // 刪除 frame ``` 這裡寫了一個簡單的範例,用這樣來操作 CSS 方便多了 ``` $mmcode(r1) ```
內容
更改 before
新增 after
新增動畫
修改動畫
2020年6月26日 星期五
即時操作 css
雖然可以用新的 css 取代舊的,這裡還是研究一下即時操作現有 css 的方式 document.styleSheets 可以取得目前網頁中所有的 css 資料, 回傳的陣列就是一個 `` 的區域 ``` document.styleSheets[n].cssRules ``` 就是該區域中的每一個設定的陣列, ``` document.styleSheets[n].cssRules[m].cssText ``` 就是這個 css 完整字串, 只是這個字串是唯讀的, 必須用 ``` document.styleSheets[n].deleteRule(m) ``` 來刪除這整個設定
**(什麼爛設計)**
, 以及用 ``` document.styleSheets[n].insertRule("css字串",索引) ``` 來新增, 索引預設是 0 ,也就是新增後會在最前面,如果沒有把本來的刪掉,新增的效果不會顯示, 然後索引也不能比本來的 Rules 多很多,只能剛好接在後面 然後比較特別的是動畫的 keyframes 如果下面這個是 keyframes ``` document.styleSheets[n].cssRules[k] ``` 那麼 ``` document.styleSheets[n].cssRules[k].name //這個 keyframes 的名稱 document.styleSheets[n].cssRules[k].cssRules[kn] //這個 keyframes 裡頭的每個 n% 的設定 document.styleSheets[n].cssRules[k].cssRules[kn].keyText //就是 % 的名稱 document.styleSheets[n].cssRules[k].cssRules[kn].cssText //完整的 css 內容 ``` 可以用 ``` document.styleSheets[n].cssRules[k].findRule("100%") //搜尋 document.styleSheets[n].cssRules[k].deleteRule("100%") //刪除 document.styleSheets[n].cssRules[k].appendRule("100%{left:100px}") //新增 ``` 在 firefox 和 chrome 即時改變 css 的值,會立刻反應,但是在 safari/iphone/ipad 只要遇到動畫,都會延遲以及不正常反應 寫到最後,覺得還是用新的 css 蓋掉舊的 css 比較好
``` $mmcode(r1) ```
Blue
Red
Add Key
Del Key
2020年6月24日 星期三
CSS 的 filter
css 的 filter 相當好用,有時候只是想換個顏色,完全不需要再做另一張圖
blur
$textarea id="a06241_filter" style="width:100%;height:8em">$/textarea>
2020年6月4日 星期四
用 CSS 畫 3D 物件
第一次看到只用 CSS 就可以畫 3D 物件覺得非常神奇, 想當初在設計導航程式時,在那記憶體只有 16M 的機器上,要跑全台灣/全中國地圖,而且導航除了需要旋轉地圖到行進方向,最好還要有 2.5D 的斜角視圖才可以看到遠方更多的資訊,當時所有計算全部自己寫,光旋轉就要一堆 sin , cos 的計算,而現在只要一行指令就可以旋轉了...... 3D 的基礎,投影面和視點, 在 CSS 上也必須分層建立好 首先先建一個 view 裡面指定投影距離 **perspective:400px;** 在 view 裡頭建立 camera , 這裡有個很重要的參數 **transform-style: preserve-3d;** 然後在 camera 裡再建立 obj , 同樣的這裡也必須加上 **transform-style: preserve-3d;** ,然後就可以在 obj 中放面的資料 最簡單的範例如下 : ``` $mmcode(r0) ```
------------------------------------- 如果只有一個物件,可以省略 obj 那一層,也就是每個面都是一個物件的概念, 例如以下範例,利用八個面組成一顆鑽石
``` $mmcode(r3) ```
------------------------------------- 掌握這個方式後,就可以開始玩 3D 了,這裡寫了一個有趣的展示,只用 CSS 就可以做出早期德軍總部的隧道畫面,這裡用了一個參數 **backface-visibility: hidden;-webkit-backface-visibility: hidden;** 可以把背對的面隱藏,在這個範例中我有偷懶一下,並沒有把所有的面都設到正確的方向,只有一個 aa2 那個面需要在背對時隱藏。
``` $mmcode(r1) ```
--------------------------------- 加上 javascript 產生面, 可以做個球, 只要花點時間,光靠 CSS 就可以做出旋轉地球了呢 !
``` $mmcode(r2) ```
------------------------------------ 因為 div 是矩形, 雖然可以利用 clip-path 來做裁切,但是裡頭的貼圖並不會跟著變形,如果把解析度提高,那麼每個面都會接近矩形,效果很不錯,只是效能會很差,在調整了一下適當大小,又用了些偷懶的方式,沒有精算的很準確, 最後附上旋轉五色鳥做為這篇的結束,
``` $mmcode(r5) ```
2020年6月3日 星期三
用 CSS 畫箭頭
第一次看到有人用 div + css 畫三角形,覺得非常有意思,第一個想到的方法是利用 clip-path 來畫,這個方式最直覺,後來發現他用的是邊框,方法如下 : ``` $mmcode(r1) ```
由這裡可以看到,加厚的邊框變成了梯形, 如果把本來的 div 寬度設 0 ,然後把不要的邊框設為透明,那麼三角形就出現了 ``` $mmcode(r2) ```
同理,還可以畫梯形 那麼這篇的目的是畫箭頭, 這裡我打算用 ::before 來畫 ``` $mmcode(r3) ```
以後如果需要用到箭頭,就可以引用這個 CSS 然後設定 width , left 和 top , 以及 font-size 來修改大小,然後用 transform rotate 來旋轉,這會是個使用上相當方便的箭頭 既然箭頭都畫了,順便把一些常用的畫一畫 ``` $mmcode(r4) ```
2020年5月30日 星期六
CSS 動畫
第一次看到 CSS 動畫,覺得為之驚豔,這樣做動畫比用 jquery 自己刻快多了,效果又好,然後就因為工作在忙的關係,又停止了學習的腳步。 首先先來一個簡單的範例 : 這裡比較特別的是 cubic-bezier 可以利用這個網頁來計算 [cubic-bezier](https://cubic-bezier.com/), 四個參數其實是貝滋曲線的兩個控制點座標, 起點和終點為 0,0 和 1,1 , 套在 svg 上就是 `
`
``` $mmcode(r1) ```
播放
ease
linear
ease-in
ease-out
ease-in-out
cubic-bezier
steps
--------------------------------------- # Event CSS 的屬性 animation-name 被修改後,動畫會重新開始,如果只給同一個名字是沒有用的,所以這裡的解決方法是先設 animation-name="" 然後設個 timeout 後再修改為要播放的動畫名稱 Ani2 的按鈕是利用新增 CSS 來取代本來的腳本,在 chrome 和 firefox 上,取代後會立即生效,但是在 safari 和 iphone/ipad 上卻會等動畫結束重新開始後才會套用新的腳本, Ani3 是取代後直接呼叫套用的 function 讓動畫重新開始。 animationstart 開始播放
animationend 播放結束
animationiteration 動畫開始重複
animationcancel 取消
``` $mmcode(r2) ```
播放
Change
Restart
Ani2
Ani3
--------------------------------------- ## 利用 CSS 動畫來實做一個指針時鐘,幾乎不需要寫程式,
``` $mmcode(r3) ```
------------------------------ ## 搭配 clip-path 可以設計多邊形變形的動畫
``` $mmcode(r4) ```
三角形
四邊形
五邊形
六邊形
七邊形
2020年5月29日 星期五
CSS ::before and ::after
css 的 ::before 和 ::after 是我比較少接觸的 css 語法, 可以在元素前後加上一個不存在網頁元素中的物件,範例如下: ``` $mmcode(r1) ```
我是文字
content 雖然可以用 url 秀圖片,但是無法調整圖片大小,如果要設定圖片大小,可以利用 background-image 來實現 ``` $mmcode(r1_1) ```
我是文字
CSS 的選擇器語法除了用 .class 還可以用 [] 來指定特定的attr , 如果搭配 hover 可以做到滑鼠移過去顯示說明的效果, 這個效果以前都是用 javascript 製作,其實 CSS 就可以做到了 ! ``` $mmcode(r2) ```
我是文字1
我是文字2
::before 和 ::after 有個特別的功能是 counter , 我個人覺得這個其實就是 `
` 的原型 特別的是,自己寫有更靈活的設定,例如可以設定數字間隔,或多個計數器 範例如下 : ``` $mmcode(r3) ```
開始
一樓
一樓
二樓
二樓
三樓
三樓
F2
F2
F2
三樓
二樓
一樓
結束
list-style-type 的值如下: disc , circle , square , armenian , cjk-ideographic , decimal , decimal-leading-zero , georgian , hebrew , hiragana , hiragana-iroha , katakana , katakana-iroha , lower-alpha , lower-greek , lower-latin , lower-roman , upper-alpha , upper-greek , upper-latin , upper-roman , none , inherit 除了 counter ,還有一個 counters 可以處理階層問題 ``` $mmcode(r4) ```
開始
一樓
一樓
二樓
二樓
三樓
三樓
三樓
二樓
一樓
結束
這個功能的實用範例,是直接搭配 h1 和 h2 來實做章節 ``` $mmcode(r5) ```
開始
出發
一個旅程的開始
繼續
回程
加油
到家
# 取值和修改 javascript 有一個超強的指令,可以取得該元素所有的設定 window.getComputedStyle('元素', '::before 或 ::after') ``` $mmcode(r6) ```
我是文字
::before 和 ::after 並不允許直接修改內容,最簡單的方法,是用新的 CSS 取代舊的 範例 : ``` $mmcode(r7) ```
我是文字
紅色
綠色
較舊的文章
首頁
訂閱:
文章 (Atom)