整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          CSS奇思妙想-寫CSS的一些奇怪套路你都會哪些?(下篇)

          寫CSS的常用套路(下篇)...

          點擊觀看——我寫CSS的常用套路(上篇)...

          box-shadow

          為盒子添加陰影,增加盒子的立體感,可以多層疊加,并且會使陰影更加絲滑

          本demo地址:Pagination

          內(nèi)發(fā)光

          注意到box-shadow還有個inset,用于盒子內(nèi)部發(fā)光

          利用這個特性我們可以在盒子內(nèi)部的某個范圍內(nèi)設(shè)定顏色,做出一個新月形

          再加點動畫和濾鏡效果,“猩紅之月”閃亮登場!

          注意到它散發(fā)著淡淡的紅光,其實就是2個偽元素應(yīng)用了模糊濾鏡所產(chǎn)生的效果

          本demo地址:Crimson Crescent Loading

          text-shadow

          文本陰影,本質(zhì)上和box-shadow相同,只不過是相對于文本而言,常用于文本發(fā)光,也可通過多層疊加來制作霓虹文本和偽3D文本等效果

          發(fā)光文本

          本demo地址:Staggered GlowIn Text

          霓虹文本

          本demo地址:Neon Text

          偽3D文本

          本demo地址:Staggered Bouncing 3D Loading

          background-clip:text

          能將背景裁剪成文字的前景色,常用來和color: transparent配合生成漸變文本

          本demo地址:Menu Hover Fill Text

          gradient

          漸變可以作為背景圖片的一種,具有很強的色彩效果,甚至可以用來模擬光

          linear-gradient

          線性漸變是筆者最常用的漸變

          這個作品用到了HTML的dialog標(biāo)簽,線性漸變背景,動畫以及overflow障眼法,細心的你看出來了嗎:)

          本demo地址:Confirm Modal

          radial-gradient

          徑向漸變常用于生成圓形背景,上面例子中Snow的背景就是一個橢圓形的徑向漸變

          此外,由于背景可以疊加,我們可以疊加多個不同位置大小的徑向漸變來生成圓點群,再加上動畫就產(chǎn)生了一種微粒效果,無需多余的div元素

          本demo地址:Particle Button

          conic-gradient

          圓錐漸變可以用于制作餅圖

          用一個偽元素疊在餅圖上面,并將content設(shè)為某個值(這個值通過CSS變量計算出來),就能制作出度量計的效果,障眼法又一次完成了它的使命

          本demo地址:Gauge (No SVG)

          filter

          PS里的濾鏡,blur最常用

          融合效果

          當(dāng)blur濾鏡和contrast濾鏡一起使用時,會產(chǎn)生一種融合(gooey)的奇特效果

          本demo地址:Snow Scratch

          backdrop-filter

          對背景應(yīng)用濾鏡,產(chǎn)生毛玻璃的效果

          本demo地址:Frosted Glass

          mix-blend-mode

          PS里的混合模式,常用于文本在背景下的特殊效果

          以下利用濾色模式(screen)實現(xiàn)文本視頻蒙版效果

          本demo地址:Video Mask Text

          clip-path

          PS里的裁切,可以制作各種不規(guī)則形狀。如果和動畫結(jié)合也會相當(dāng)有意思

          本demo地址:Name Card Hover Expand

          故障效果

          由于clip-path有裁切功能,因此可以將多個文字疊在一起,并按比例裁切成多分,再應(yīng)用交錯動畫,就能制作出酷炫的故障效果(glitch)。

          本demo地址:Cross Bar Glitch Text

          mask

          PS里的遮罩。所謂遮罩,就是原始圖片只顯示遮罩圖片非透明的部分

          鏤空效果

          雖然clip-path能裁切出形狀,但它無法鏤空,因為形狀的里面它管不著

          可能有人(包括我)會用偽元素來“模擬”鏤空(通過設(shè)置同樣的背景色),但這樣并非真的鏤空,換了個背景或浮在圖片上就會暴露出來,這時我們就要求助于遮罩了

          假設(shè),你想制作一個空心的圓環(huán),那么你只需將一個徑向漸變作為元素的遮罩,并且第一個color-stop設(shè)置為透明,其他的color-stop設(shè)置為其他顏色即可,因為遮罩的定義就是只顯示遮罩圖片非透明的部分

          注意:為了消除鋸齒,這個徑向漸變的中間需要有一個額外的color-stop用于緩沖,長度設(shè)置為原長度加0.5px即可

          本demo地址:Circle Arrow Nav

          -webkit-box-reflect

          投影效果,不怎么常用,適合立體感強的作品

          本demo地址:Card Flip Reflection

          web animations

          雖然這并不是一個CSS特性,但是它經(jīng)常用于完成那些CSS所做不到的事情

          那么何時用它呢?當(dāng)CSS動畫中有屬性無法從CSS中獲取時,自然就會使用到它了

          跟蹤鼠標(biāo)的位置

          目前CSS還尚未有獲取鼠標(biāo)位置的API,因此考慮用JS來進行

          通過查閱相關(guān)的DOM API,發(fā)現(xiàn)在監(jiān)聽鼠標(biāo)事件的API中,可通過e.clientX和e.clientY來獲得鼠標(biāo)當(dāng)前的位置

          既然能夠獲取鼠標(biāo)的位置,那么跟蹤鼠標(biāo)的位置也就不是什么難事了:通過監(jiān)聽mouseenter和mouseleave事件,來獲取鼠標(biāo)出入一個元素時的位置,并用此坐標(biāo)來當(dāng)作鼠標(biāo)的位移距離,監(jiān)聽mousemove事件,來獲取鼠標(biāo)在元素上移動時的位置,同樣地用此坐標(biāo)來當(dāng)作鼠標(biāo)的位移距離,這樣一個跟蹤鼠標(biāo)的效果就實現(xiàn)了

          本demo地址:Menu Hover Image

          CSS Houdini

          CSS Houdini是CSS的底層API,它使我們能夠通過這套接口來擴展CSS的功能

          讓漸變動起來

          目前來說,我們無法直接給漸變添加動畫,因為瀏覽器不理解要改變的值是什么類型

          這時,我們就可以利用CSS.registerProperty()來注冊我們的自定義變量,并聲明其語法類型(syntax)為顏色類型<color>,這樣瀏覽器就能理解并對顏色應(yīng)用插值方法來進行動畫

          還記得上文提到的圓錐漸變conic-gradient()嗎?既然它可以用來制作餅圖,那么我們能不能讓餅圖動起來呢?答案是肯定的,定義三個變量:--color1、--color2和--pos,其中--pos的語法類型為長度百分比<length-percentage>,將其從0變?yōu)?00%,餅圖就會順時針旋轉(zhuǎn)出現(xiàn)

          利用絕對定位和層疊上下文,我們可以疊加多個從小到大的餅圖,再給它們設(shè)置不同的顏色,應(yīng)用交錯動畫,就有了下面這個炫麗的效果

          本demo地址:Mawaru

          彩蛋

          將交錯動畫和偽類偽元素結(jié)合起來寫出來的慎重勇者風(fēng)格的菜單

          本demo地址:Shinchou Menu

          先在src下面創(chuàng)建"src"下創(chuàng)建文件夾dialogDrag(文件名可以自定義): (目錄crc/dialogDrag)
          然后在此文件下創(chuàng)建 index.js 和 drag.js文件 (
          直接復(fù)制這兩個js文件即可)

          drag.js

          export default {
            bind(el, binding, vnode) {
              const dialogHeaderEl = el.querySelector('.el-dialog__header')
              const dragDom = el.querySelector('.el-dialog')
              dialogHeaderEl.style.cssText += ';cursor:move;'
              dragDom.style.cssText += ';top:0px;'
          
              // 獲取原有屬性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
              const getStyle = (() => {
                if (window.document.currentStyle) {
                  return (dom, attr) => dom.currentStyle[attr]
                } else {
                  return (dom, attr) => getComputedStyle(dom, false)[attr]
                }
              })()
          
              dialogHeaderEl.onmousedown = (e) => {
                // 鼠標(biāo)按下,計算當(dāng)前元素距離可視區(qū)的距離
                const disX = e.clientX - dialogHeaderEl.offsetLeft
                const disY = e.clientY - dialogHeaderEl.offsetTop
          
                const dragDomWidth = dragDom.offsetWidth
                const dragDomHeight = dragDom.offsetHeight
          
                const screenWidth = document.body.clientWidth
                const screenHeight = document.body.clientHeight
          
                const minDragDomLeft = dragDom.offsetLeft
                const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
          
                const minDragDomTop = dragDom.offsetTop
                const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight
          
                // 獲取到的值帶px 正則匹配替換
                let styL = getStyle(dragDom, 'left')
                let styT = getStyle(dragDom, 'top')
          
                if (styL.includes('%')) {
                  styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
                  styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
                } else {
                  styL = +styL.replace(/\px/g, '')
                  styT = +styT.replace(/\px/g, '')
                }
          
                document.onmousemove = (item) => {
                  // 通過事件委托,計算移動的距離
                  let left = item.clientX - disX
                  let top = item.clientY - disY
          
                  // 邊界處理
                  if (-(left) > minDragDomLeft) {
                    left = -minDragDomLeft
                  } else if (left > maxDragDomLeft) {
                    left = maxDragDomLeft
                  }
          
                  if (-(top) > minDragDomTop) {
                    top = -minDragDomTop
                  } else if (top > maxDragDomTop) {
                    top = maxDragDomTop
                  }
          
                  // 移動當(dāng)前元素
                  dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
          
                  // emit onDrag event
                  vnode.child.$emit('dragDialog')
                }
          
                document.onmouseup = () => {
                  document.onmousemove = null
                  document.onmouseup = null
                }
              }
            }
          }

          index.js

          import drag from './drag'
          
          const install = (Vue) => {
            Vue.directive('el-drag-dialog', drag)
          }
          
          if (window.Vue) {
            window['el-drag-dialog'] = drag
            Vue.use(install); // eslint-disable-line
          }
          
          drag.install = install
          export default drag

          在main.js中引用:

          import elDragDialog from '@/dialogDrag';//自定義dialog拖拽,此路徑為src/dialogDrag的文件
          
          Vue.use(elDragDialog);

          最后在你使用 Dialog標(biāo)簽 的時候加 v-el-drag-dialog屬性 就可實現(xiàn)拖拽

          使用:



          寫CSS的常用套路

          前言

          本文是筆者寫CSS時常用的套路。不論效果再怎么華麗,萬變不離其宗。

          交錯動畫



          有時候,我們需要給多個元素添加同一個動畫,播放后,不難發(fā)現(xiàn)它們會一起運動,一起結(jié)束,這樣就會顯得很平淡無奇。

          那么如何將動畫變得稍微有趣一點呢?很簡單,既然它們都是同一時刻開始運動的,那么讓它們不在同一時刻運動不就可以了嗎。如何讓它們不在同一時刻運動呢?注意到CSS動畫有延遲(delay)這一屬性。舉個例子,比如有十個元素播放十個動畫,將第二個元素的動畫播放時間設(shè)定為比第一個元素晚0.5秒(也就是將延遲設(shè)為0.5秒),其他元素以此類推,這樣它們就會錯開來,形成一種獨特的視覺效果。



          這就是所謂的交錯動畫:通過設(shè)置不同的延遲時間,達到動畫交錯播放的效果。

          本demo:Staggered Wave Loading

          訪問地址:https://codepen.io/alphardex/pen/XWWWBmQ

          用JS分割文本

          還有一種經(jīng)常用到的玩法:用JS將句子或單詞分割成字母,并給每個字母加上不同延時的動畫,同樣也很華麗



          本demo地址:Staggered LandIn Text

          訪問地址:https://codepen.io/alphardex/full/KKwvKGY

          不同位置的交錯動畫

          一般我們都是從第一個元素開始交錯的。但如果要從中間元素開始交錯的話,就要給當(dāng)前元素的延時各加上一個值,這個值就是中間元素的下標(biāo)到當(dāng)前元素的下標(biāo)的距離(也就是下標(biāo)之差的絕對值)與步長的乘積



          本demo地址:Reveal Text

          訪問地址:https://codepen.io/alphardex/full/eYYMYXJ

          隨機粒子動畫

          說到隨機性,我們可以實現(xiàn)一種更瘋狂的效果:給幾百個粒子添加交錯動畫,并且交錯時間隨機,位置大小也都是隨機。如此一來我們就能用純CSS模擬出下雪的效果。



          本demo地址:Snow (Pure CSS)

          訪問地址:https://codepen.io/alphardex/full/dyPorwJ

          偽類和偽元素

          偽類



          HTML元素的狀態(tài)是可以動態(tài)變化的。舉個例子,當(dāng)你的鼠標(biāo)懸浮到一個按鈕上時,按鈕就會變成“懸浮”狀態(tài),這時我們就可以利用偽類:hover來選中這一狀態(tài)的按鈕,并對其樣式進行改變。

          :hover是筆者最最常用的一個偽類。還有一個很常用的偽類是:nth-child,用于選中元素的某一個子元素。其他的類似:focus、:focus-within等也有一定的使用。

          本demo地址:Button Hover Border Stroke With Float Text

          絕對定位實現(xiàn)多重邊框

          誰規(guī)定按鈕只能有一套邊框的?利用絕對定位和padding,我們可以給按鈕做出3套大小不一的邊框來,這樣效果更炫了



          本demo地址:Button Hover Multiple Border Stroke

          https://codepen.io/


          主站蜘蛛池模板: 国产吧一区在线视频| 色欲AV蜜桃一区二区三| 日韩在线一区二区三区视频| 一区二区三区杨幂在线观看| 99精品国产一区二区三区不卡| 亚洲日本va一区二区三区| 国产精品毛片a∨一区二区三区 | 成人区精品人妻一区二区不卡| 亚洲欧美日韩中文字幕在线一区| 国产天堂一区二区综合| 久久蜜桃精品一区二区三区| 日本一区二区不卡在线| 日韩精品一区二区三区中文3d | 丝袜无码一区二区三区| 女女同性一区二区三区四区| 精品一区二区三区自拍图片区| 亚洲美女高清一区二区三区| 人妻夜夜爽天天爽一区| 国产精品一级香蕉一区| 亚洲AV午夜福利精品一区二区| 三级韩国一区久久二区综合| 人妻av综合天堂一区| 97人妻无码一区二区精品免费| 久久中文字幕一区二区| 中文字幕在线观看一区二区三区| 国产麻豆媒一区一区二区三区| 国产一区二区三区乱码网站| 日韩精品无码中文字幕一区二区 | 国产精品男男视频一区二区三区| 无码人妻一区二区三区兔费| 亚洲午夜电影一区二区三区 | 国产在线不卡一区| 亚洲精品伦理熟女国产一区二区| 日韩人妻一区二区三区免费| 国产亚洲一区二区手机在线观看 | 日韩精品一区二区三区中文| 免费一区二区三区| 无码国产伦一区二区三区视频 | 人妻精品无码一区二区三区| 亚洲av无码片vr一区二区三区| 国产精品香蕉一区二区三区|