您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用CSS實(shí)現(xiàn)仿Windows10鼠標(biāo)照亮邊框效果”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用CSS實(shí)現(xiàn)仿Windows10鼠標(biāo)照亮邊框效果”吧!
拿桌面日歷中的效果為例,鼠標(biāo)移動(dòng)時(shí)附近的邊框也漸變性可見。這個(gè)效果不就是探照燈效果嘛!這個(gè)完全可以用 CSS 中的 mask 蒙版配合一個(gè)徑向漸變實(shí)現(xiàn)。
但問題是,mask 蒙版是作用于整個(gè)元素的,沒辦法只作用于 border 而不影響內(nèi)容。這個(gè),那只能把 border 和實(shí)際內(nèi)容分離用不同層來表示了。嗯,鼠標(biāo)移動(dòng)就更新蒙版位置,應(yīng)該不成問題。
首先,擼好兩層日歷格子,一層展示日期信息,一層展示探照燈效果的邊框。用 flex 布局也好,grid 也好,哪怕 inline-block 也都是沒有問題的,這都不重要,重要的是上下兩層的格子一定要對(duì)齊,然后我們用 relative 的容器把這兩層 absolute 層圈起來,固定住。
<div class="calendar"> <div class="calendar-header"> <div class="week-day">一</div> <div class="week-day">二</div> <div class="week-day">三</div> <div class="week-day">四</div> <div class="week-day">五</div> <div class="week-day">六</div> <div class="week-day">日</div> </div> <div class="calendar-body"> <div class="grid-container border-layer"> <div class="grid-item"></div> ... <div class="grid-item"></div> </div> <div class="grid-container number-layer"> <div class="grid-item"><span>28</span><span>十四</span></div> <div class="grid-item"><span>29</span><span>十五</span></div> ... <div class="grid-item"><span>2</span><span>十九</span></div> </div> </div> </div>
層示意圖:
效果就是這樣了:
鼠標(biāo)沒有放上去的時(shí)候,先把 border 層隱藏掉。
.border-layer { ... visibility: hidden; } .calendar:hover .border-layer { visibility: visible; }
CSS Mask 類似于 Photoshop 中的圖層蒙版,可以使用一張圖作為蒙版用作在目標(biāo)元素上,圖片的 alpha 通道(也就是透明度信息)決定了目標(biāo)元素哪部分可見(也可以選擇使用亮度信息)。
舉個(gè)例子,如果蒙版圖片是一張半透明圖,則作用到實(shí)際元素上效果和設(shè)置 opacity: 0.5 效果一樣;如果蒙版圖片是一張中間鏤空的五角星,則效果就是元素被裁剪成五角星形狀。
Mask 的語法和 background 的語法幾乎完全一致,這里我們用徑向漸變創(chuàng)建一個(gè)半徑 80px 從中心白色到邊緣透明的漸變圓,配合 mask-repeat 和 mask-size 防止 repeat 和變形。
-webkit-mask-image: radial-gradient(circle at center, white 0%, transparent 80px); -webkit-mask-repeat: no-repeat; -webkit-mask-size: 160px 160px; /* 半徑80px 所以 size 需要是 160px */
接下來我們來更新 mask-position 。這里有兩個(gè)點(diǎn)要注意,一是獲取鼠標(biāo)對(duì)目標(biāo)元素的相對(duì)坐標(biāo),一是 position 偏移。
MouseEvent 中有一堆的 X/Y,我們用相對(duì) document 的坐標(biāo) pageX/pageY,減去目標(biāo)元素相對(duì) document 的坐標(biāo),就能得到我們需要的坐標(biāo)了。 向量公式: AB = AC - BC:
不過,這里 mask-position 的坐標(biāo)還需要處理一下。我們定義的 mask 是一張 160x160 的圓形漸變,而 mask-position 和 background-position 一樣,定義的是蒙層左上角 (0,0) 的位置實(shí)際需要和容器的哪個(gè)坐標(biāo)對(duì)齊。因此我們需要把計(jì)算得到的坐標(biāo)再減去 (80, 80) 才能讓漸變中心和鼠標(biāo)的坐標(biāo)保持一致。
var borderLayer = document.querySelector(".border-layer"); document.querySelector(".calendar").addEventListener("mousemove", function(ev){ var x = ev.pageX; var y = ev.pageY; var bounding = borderLayer.getBoundingClientRect(); borderLayer.style.webkitMaskPosition = `${x - bounding.x - 80}px ${y -bounding.y - 80}px`; });
感謝各位的閱讀,以上就是“怎么用CSS實(shí)現(xiàn)仿Windows10鼠標(biāo)照亮邊框效果”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么用CSS實(shí)現(xiàn)仿Windows10鼠標(biāo)照亮邊框效果這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。