Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
注: 因?yàn)橛行┢脚_(tái)渲染不支持嵌入代碼編輯器,如下圖展示,因此無法自己操作,想要自己操作可以前往預(yù)覽圖下對(duì)應(yīng)的源碼處,或者前往去我的個(gè)人網(wǎng)站:前端N多個(gè)弧形動(dòng)畫特效菜單,文章內(nèi)可以手勢(shì)體驗(yàn)
最后給個(gè)贊謝謝
#博客#
擊右上方紅色按鈕關(guān)注“web秀”,讓你真正秀起來
昨天再次收到"月球居民愛麗絲"的投稿(非常感謝"月球居民愛麗絲"),希望做一個(gè)冰淇淋加載動(dòng)畫,原圖:
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
看到如此美麗的冰淇淋是否想吃了?哈哈,大冬天的,還是不要了。今天我們就用CSS來制作一個(gè)冰淇淋吧。
1、 拋開動(dòng)畫部分,冰淇淋分為2部分,能吃的冰淇淋和下方的木棍(都是可以直接用樣式畫出的)
2、 動(dòng)畫部分,細(xì)數(shù)有4種顏色,紅色、米色、藍(lán)色、橙色。
3、 冰淇淋左上方的高光效果
通過這樣的解析,你是不是也可以制作一個(gè)簡(jiǎn)單冰淇淋了呢?
下面我們按步驟實(shí)現(xiàn)。
<div class="ice-cream"> <div class="body"></div> <div class="footer"></div> </div>
按照解析,我們把它也分成上下結(jié)構(gòu)2部分,身體(冰淇淋)、腳(木棍)。
.ice-cream{ width: 50px; height: 120px; margin: 100px auto; } .body{ margin: 0 auto; width: 50px; height: 100px; border-radius: 30px 30px 10px 10px; background: red; } .footer{ width: 10px; height: 15px; margin: 0 auto; border-radius: 0 0 4px 4px; background: #a77b64; }
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
這個(gè)效果相信很多小伙伴都會(huì)實(shí)現(xiàn),2部分都是通過border-radius圓角來改變形狀。這里就不做多的說明了。
同理,按解析,我們添加4種顏色到冰淇淋上面。
... <div class="body"> <div class="loading"> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> </div> </div>
添加不同顏色
.body{ position: relative; ... } ... .loading{ position: absolute; width: 200px; } .loading .line{ height: 40px; } .loading .line:nth-child(1){ background: #ff7632; } .loading .line:nth-child(2){ background: #46b0ff; } .loading .line:nth-child(3){ background: #fffce5; } .loading .line:nth-child(4){ background: red; }
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
發(fā)現(xiàn)把我們的整個(gè)冰淇淋都個(gè)蓋住了,這時(shí)只需要添加overflow: hidden;即可。
.body{ ... overflow: hidden; }
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
然后我們把顏色部分旋轉(zhuǎn)一個(gè)角度,并且使其動(dòng)起來。
.loading{ position: absolute; width: 200px; top: -77px; left: -89px; transform: rotate(45deg); animation: move 2.5s linear infinite; } @keyframes move{ from { top: -77px; left: -89px; } to { top: 9px; left: -84px; } }
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
這時(shí)候你會(huì)發(fā)現(xiàn)怎么調(diào)整,動(dòng)畫中間都會(huì)有斷層。
所以我的解決方案是,重新copy一份顏色,讓其可持續(xù)循環(huán)的。
<div class="loading"> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> <div class="line"></div> </div> .loading{ position: absolute; top: -213px; left: -27px; width: 200px; transform: rotate(45deg); animation: move 2.5s linear infinite; } @keyframes move{ from { top: -213px; left: -27px; } to { top: -46px; left: -83px; } } .loading .line{ height: 40px; } .loading .line:nth-child(1), .loading .line:nth-child(5){ background: #ff7632; } .loading .line:nth-child(2), .loading .line:nth-child(6){ background: #46b0ff; } .loading .line:nth-child(3), .loading .line:nth-child(7){ background: #fffce5; } .loading .line:nth-child(4), .loading .line:nth-child(8){ background: red; }
這個(gè)就是在body上面添加一個(gè)圓弧。
大家應(yīng)該都看過前面的CSS3動(dòng)畫解析抖音 LOGO制作文章了,這里面有制作圓弧的示例。
.body:before{ position: absolute; content: ""; width: 25px; height: 25px; border: 5px solid #fff; border-right: 5px solid transparent; border-top: 5px solid transparent; border-left: 5px solid transparent; border-radius: 100%; top: 5px; left: 5px; transform: rotate(120deg); opacity: 0.7; z-index: 10; }
利用border畫出1/4的圓,就可以啦。
最終效果:
css3實(shí)現(xiàn)ae動(dòng)畫冰激淋流動(dòng)的遮罩效果
不知道大家有沒有g(shù)et到每次開發(fā)的小經(jīng)驗(yàn)了?開發(fā)前先分析,分小步驟,完成各個(gè)功能點(diǎn)。
喜歡小編的點(diǎn)擊關(guān)注,了解更多知識(shí)!
源碼地址和源文件下載請(qǐng)點(diǎn)擊下方“了解更多”
ello~~大家好,今天小藍(lán)整理一些CSS樣式,2022已經(jīng)支持的特性。
@layer
解決業(yè)務(wù)代碼的 !important 問題。為什么業(yè)務(wù)代碼需要用 !important 解決問題?因?yàn)?css 優(yōu)先級(jí)由文件申明順序有關(guān),而現(xiàn)在大量業(yè)務(wù)使用動(dòng)態(tài)插入 css 的方案,插入的時(shí)機(jī)與 js 文件加載與執(zhí)行時(shí)間有關(guān),這就導(dǎo)致了樣式優(yōu)先級(jí)不固定。
@layer 允許業(yè)務(wù)定義樣式優(yōu)先級(jí),層越靠后優(yōu)先級(jí)越高,比如下面的例子,override 定義的樣式優(yōu)先級(jí)比 framework 高:
@layer framework, override;
@layer override {
.title {
color: white;
}
}
@layer framework {
.title {
color: red;
}
}
subgrid
subgrid 解決 grid 嵌套 grid 時(shí),子網(wǎng)格的位置、軌跡線不能完全對(duì)齊到父網(wǎng)格的問題。只要在子網(wǎng)格樣式做如下定義:
.sub-grid {
display: grid;
grid-template-columns: subgrid;
grid-template-rows: subgrid;
}
@container
@container 使元素可以響應(yīng)某個(gè)特定容器大小。在 @container 出來之前,我們只能用 @media 響應(yīng)設(shè)備整體的大小,而 @container 可以將相應(yīng)局限在某個(gè) DOM 容器內(nèi):
// 將 .container 容器的 container-name 設(shè)置為 abc
.container {
container-name: abc;
}
// 根據(jù) abc 容器大小做出響應(yīng)
@container abc (max-width: 200px) {
.text {
font-size: 14px;
}
}
一個(gè)使用場(chǎng)景是:元素在不同的 .container 元素內(nèi)的樣式可以是不同的,取決于當(dāng)前所在 .container 的樣式。
hwb
支持 hwb(hue, whiteness, blackness) 定義顏色:
.text {
color: hwb(30deg 0% 20%);
}
三個(gè)參數(shù)分別表示:角度 [0-360],混入白色比例、混入黑色比例。角度對(duì)應(yīng)在色盤不同角度的位置,每個(gè)角度都有屬于自己的顏色值,這個(gè)函數(shù)非常適合直觀的從色盤某個(gè)位置取色。
lch, oklch, lab, oklab, display-p3 等
lch(lightness, chroma, hue),即亮度、飽和度和色相,語法如:
.text {
color: lch(50%, 100, 100deg);
}
chroma(飽和度) 指顏色的鮮艷程度,越高色彩越鮮艷,越低色彩越暗淡。hue(色相) 指色板對(duì)應(yīng)角度的顏色值。
oklch(lightness, chroma, hue, alpha),即亮度、飽和度、色相和透明度。
.text {
color: oklch(59.69% 0.156 49.77 / 0.5);
}
更多的就不一一枚舉說明了,總之就是顏色表達(dá)方式多種多樣,他們之間也可以互相轉(zhuǎn)換。
color-mix()
css 語法支持的 mix,類似 sass 的 mix() 函數(shù)功能:
.text {
color: color-mix(in srgb, #34c9eb 10%, white);
}
第一個(gè)參數(shù)是顏色類型,比如 hwb、lch、lab、srgb 等,第二個(gè)參數(shù)就是要基準(zhǔn)顏色與百分比,第三個(gè)參數(shù)是要混入的顏色。
color-contrast()
讓瀏覽器自動(dòng)在不同背景下調(diào)整可訪問顏色。換句話說,就是背景過深時(shí)自動(dòng)用白色文字,背景過淺時(shí)自動(dòng)用黑色文字:
.text {
color: color-contrast(black);
}
還支持更多參數(shù),詳情見 Manage Accessible Design System Themes With CSS Color-Contrast()。
相對(duì)顏色語法
可以根據(jù)語法類型,基于某個(gè)語法將某個(gè)值進(jìn)行一定程度的變化:
.text {
color: hsl(from var(--color) h s calc(l - 20%));
}
如上面的例子,我們將 --color 這個(gè)變量在 hsl 顏色模式下,將其 l(lightness) 亮度降低 20%。
漸變色 namespace
現(xiàn)在漸變色也支持申明 namespace 了,比如:
.text {
background-image: linear-gradient(to right in hsl, black, white);
}
這是為了解決一種叫 灰色死區(qū) 的問題,即漸變色如果在色盤穿過了飽和度為 0 的區(qū)域,中間就會(huì)出現(xiàn)一段灰色,而指定命名空間比如 hsl 后就可以繞過灰色死區(qū)。
因?yàn)?hsl 對(duì)應(yīng)色盤,漸變的邏輯是在色盤上沿圓弧方向繞行,而非直接穿過圓心(圓心飽和度低,會(huì)呈現(xiàn)灰色)。
accent-color
accent-color 主要對(duì)單選、多選、進(jìn)度條這些原生輸入組件生效,控制的是它們的主題色:
body {
accent-color: red;
}
比如這樣設(shè)置之后,單選與多選的背景色會(huì)隨之變化,進(jìn)度條表示進(jìn)度的橫向條與圓心顏色也會(huì)隨之變化。
inert
inert 是一個(gè) attribute,可以讓擁有該屬性的 dom 與其子元素?zé)o法被訪問,即無法被點(diǎn)擊、選中、也無法通過快捷鍵選中:
<div inert>...</div>
COLRv1 Fonts
COLRv1 Fonts 是一種自定義顏色與樣式的矢量字體方案,瀏覽器支持了這個(gè)功能,用法如下:
@import url(https://fonts.googleapis.com/css2?family=Bungee+Spice);
@font-palette-values --colorized {
font-family: "Bungee Spice";
base-palette: 0;
override-colors: 0 hotpink, 1 cyan, 2 white;
}
.spicy {
font-family: "Bungee Spice";
font-palette: --colorized;
}
上面的例子我們引入了矢量圖字體文件,并通過 @font-palette-values --colorized 自定義了一個(gè)叫做 colorized 的調(diào)色板,這個(gè)調(diào)色板通過 base-palette: 0 定義了其繼承第一個(gè)內(nèi)置的調(diào)色板。
使用上除了 font-family 外,還需要定義 font-palette 指定使用哪個(gè)調(diào)色板,比如上面定義的 --colorized。
視口單位
除了 vh、vw 等,還提供了 dvh、lvh、svh,主要是在移動(dòng)設(shè)備下的區(qū)別:
dvh: dynamic vh, 表示內(nèi)容高度,會(huì)自動(dòng)忽略瀏覽器導(dǎo)航欄高度。
lvh: large vh, 最大高度,包含瀏覽器導(dǎo)航欄高度。
svh: small vh, 最小高度,不包含瀏覽器導(dǎo)航欄高度。
:has()
可以用來表示具有某些子元素的父元素:
.parent:has(.child) {
}
表示選中那些有用 .child 子節(jié)點(diǎn)的 .parent 節(jié)點(diǎn)。
即將支持的特性
@scope
可以讓某個(gè)作用域內(nèi)樣式與外界隔絕,不會(huì)繼承外部樣式:
@scope (.card) {
header {
color: var(--text);
}
}
如上定義后,.card 內(nèi) header 元素樣式就被確定了,不會(huì)受到外界影響。如果我們用 .card { header {} } 來定義樣式,全局的 header {} 樣式定義依然可能覆蓋它。
樣式嵌套
@nest 提案時(shí) css 內(nèi)置支持了嵌套,就像 postcss 做的一樣:
.parent {
&:hover {
// ...
}
}
prefers-reduced-data
@media 新增了 prefers-reduced-data,描述用戶對(duì)資源占用的期望,比如 prefers-reduced-data: reduce 表示期望僅占用很少的網(wǎng)絡(luò)帶寬,那我們可以在這個(gè)情況下隱藏所有圖片和視頻:
@media (prefers-reduced-data: reduce) {
picture,
video {
display: none;
}
}
也可以針對(duì) reduce 情況降低圖片質(zhì)量,至于要壓縮多少效果取決于業(yè)務(wù)。
自定義 media 名稱
允許給 @media 自定義名稱了,如下定義了很多自定義 @media:
@custom-media --OSdark (prefers-color-scheme: dark);
@custom-media --OSlight (prefers-color-scheme: light);
@custom-media --pointer (hover) and (pointer: coarse);
@custom-media --mouse (hover) and (pointer: fine);
@custom-media --xxs-and-above (width >= 240px);
@custom-media --xxs-and-below (width <= 240px);
我們就可以按照自定義名稱使用了:
@media (--OSdark) {
:root {
…
}
}
media 范圍描述支持表達(dá)式
以前只能用 @media (min-width: 320px) 描述寬度不小于某個(gè)值,現(xiàn)在可以用 @media (width >= 320px) 代替了。
@property
@property 允許拓展 css 變量,描述一些修飾符:
@property --x {
syntax: "<length>";
initial-value: 0px;
inherits: false;
}
上面的例子把變量 x 定義為長(zhǎng)度類型,所以如果錯(cuò)誤的賦值了字符串類型,將會(huì)沿用其 initial-value。
scroll-start
scroll-start 允許定義某個(gè)容器從某個(gè)位置開始滾動(dòng):
.snap-scroll-y {
scroll-start-y: var(--nav-height);
}
:snapped
:snapped 這個(gè)偽類可以選中當(dāng)前滾動(dòng)容器中正在被響應(yīng)的元素:
.card:snapped {
--shadow-distance: 30px;
}
這個(gè)特性有點(diǎn)像 IOS select 控件,上下滑動(dòng)后就像個(gè)左輪槍一樣轉(zhuǎn)動(dòng)元素,最后停留在某個(gè)元素上,這個(gè)元素就處于 :snapped 狀態(tài)。同時(shí) JS 也支持了 snapchanging 與 snapchanged 兩種事件類型。
:toggle()
只有一些內(nèi)置 html 元素?fù)碛?:checked 狀態(tài),:toggle 提案是用它把這個(gè)狀態(tài)拓展到每一個(gè)自定義元素:
button {
toggle-trigger: lightswitch;
}
button::before {
content: " ";
}
html:toggle(lightswitch) button::before {
content: " ";
}
上面的例子把 button 定義為 lightswitch 的觸發(fā)器,且定義當(dāng) lightswitch 觸發(fā)或不觸發(fā)時(shí)的 css 樣式,這樣就可以實(shí)現(xiàn)點(diǎn)擊按鈕后,黑臉與黃臉的切換。
anchor()
anchor() 可以將沒有父子級(jí)關(guān)系的元素建立相對(duì)位置關(guān)系,更詳細(xì)的用法可以看 CSS Anchored Positioning。
selectmenu
selectmenu 允許將任何元素添加為 select 的 option:
<selectmenu>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</selectmenu>
還支持更復(fù)雜的語法,比如對(duì)下拉內(nèi)容分組:
<selectmenu class="my-custom-select">
<div slot="button">
<span class="label">Choose a plant</span>
<span behavior="selected-value" slot="selected-value"></span>
<button behavior="button"></button>
</div>
<div slot="listbox">
<div popup behavior="listbox">
<div class="section">
<h3>Flowers</h3>
<option>Rose</option>
<option>Lily</option>
<option>Orchid</option>
<option>Tulip</option>
</div>
<div class="section">
<h3>Trees</h3>
<option>Weeping willow</option>
<option>Dragon tree</option>
<option>Giant sequoia</option>
</div>
</div>
</div>
</selectmenu>
總結(jié)
CSS 2022 新特性很大一部分是將 HTML 原生能力暴露出來,賦能給業(yè)務(wù)自定義,不過如果這些狀態(tài)完全由業(yè)務(wù)來實(shí)現(xiàn),比如 Antd <Select> 組件早已實(shí)現(xiàn)自定義下拉選項(xiàng)與樣式,既然 HTML 沒有提供自定義能力,就按照其交互用 DIV + JS 模擬一套實(shí)現(xiàn)出來,定制空間更大。但也有很多能力依賴瀏覽器實(shí)現(xiàn),或者本身更適合實(shí)現(xiàn)在 CSS 側(cè)。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。