星期三的CSS-CSSBattle#96

更新於 2024/04/17閱讀時間約 7 分鐘

是的,身為前端工程師的基本功!還是需要時不時拿出來打磨一番!

很多大公司的切版與前端是分開的,但不能因為碰不到就不去理解,假如要系統性的調整樣式,那麼你就一定要懂基礎,就好像你要調整微前端的架構,總不能連包板工具的設定都不會吧!

回到正題,這系列文章每個禮拜三都會更新一題CSS Battle的題目,也歡迎想要學習或練習基礎切版的朋友們和我一起互動喔!

那麼我們這次從 #96 的問題來提供我的作法,那麼題目圖如下:

raw-image

這個圖案讓我想到國中的數學,感覺等一下要問你面積是多少XD

  1. 一樣先考慮用一個 wrapper 將整個圓形圖案置中,那我會比較習慣使用 grid 來處理。
  2. 條紋的部分可以想成四個圓形,帶有比較粗的 border,圓心可能會在上下左右靠近邊界的地方,互相堆疊所產生的紋路。
  3. 所以,wrapper 會是 position: relative;,內層4個圓圈會是 position: absolute;
  4. 最後 wrapper 可能還要加上 overflow: hidden;

下面的 html 是按照上述所描述的產出

<div class="wrapper">
<div id="t" class="strap"></div>
<div id="r" class="strap"></div>
<div id="b" class="strap"></div>
<div id="l" class="strap"></div>
</div>

這邊考量將四個圓圈的定位,改由 id 來處理,class 的部分統一處理線條樣式等問題。

body {
margin: 0;
display: grid;
place-items: center;
background: #243D83;
}
.wrapper {
width: 200px;
height: 200px;
background: #6592CF;
position: relative;
border-radius: 50%;
overflow: hidden;
}
.strap {
width: 130px;
height: 130px;
border-radius: 50%;
border: 20px solid #243D83;
position: absolute;
}
#t {
top: -60px;
left: 15px;
}
#r {
top: 15px;
right: -60px;
}
#b {
bottom: -60px;
left: 15px;
}
#l {
top: 15px;
left: -60px;
}

微小的誤差

上面就是我初步設想和測量後相符的解法,但實際送出後卻沒有達到實際100%的吻合,起初我以為是計算上的誤差,於是我又調整了上下左右的像素數值,但始終就是差那麼一點,不到 0.001的偏差值。

其實常做CSS battle的開發者會常常遇到類似的問題,主要是計算誤差值,也就是我們常說的 IEEE-754 所造成問題,那麼官方給出的解法是採用CSS中 radial-gradient() 方法,來計算圓形漸層的渲染,我不推薦是因為這個需要有一點元面積與橢圓面積公式基礎,不然畫出來的東西會有偏差,而且直接畫出來的話也不利於component 互動上的複用。

官方的解法

body {
background: radial-gradient(1px at 50% 75px, #0000 65px, #243D83 65px 85px, #0000 1%),
radial-gradient(1px at 50% 225px, #0000 65px, #243D83 65px 85px, #0000 1%),
radial-gradient(1px at 125px, #0000 65px, #243D83 65px 85px, #0000 1%),
radial-gradient(1px at 275px, #0000 65px, #243D83 65px 85px, #0000 1%),
radial-gradient(200px, #6592CF 100px, #243D83 1%);
}

圓形的背景漸層

radial-gradient() 他主要是來處理投射光漸層效果,可以想像成光源打在牆壁上擴散的效果,所以形狀會是圓形或是橢圓形的,基礎的使用與參數的概念如下:

radial-gradient([<shape> at <position>], <color-stop>, <color-stop>, ...)
  • <shape> : 是指形狀,可以是 circleellipse。如果省略,預設值通常是 ellipse
  • <position>:定義漸層的位置,如 center, top, 50% 50%(預設值為 center)。
  • <color-stop>:顏色的停頓點,定義漸層切換顏色的點位以及出現消失的位置。每个颜色停靠点可以是一个颜色值和/或一个位置(如 red 50%)。

以上述官方的例子為例:

radial-gradient(1px at 50% 75px, #0000 65px, #243D83 65px 85px, #0000 1%)

這個 radial-gradient() 方法可以分為以下幾部分:

  • 漸層大小和位置
    • 1px at 50% 75px:這表示漸層的大小是直徑為 1px 的極小圓形,然後位置是相對於元素的水平位置為 50%(通常是元素寬度的中點),垂直位置為 75px。這種特殊的大小設定實際上在視覺上不會顯示為一個可見的圓形,而是用來創建一個顏色的 "點"。
  • 顏色停靠點
    • #0000 65px:顏色停靠點開始於距離漸層中心 65px 的位置,顏色 #0000 是一個透明色,這裡使用四個數字的十六進位表示透明。
    • #243D83 65px 85px:從 65px85px,顏色從透明過渡到 #243D83(一種深藍色)。這表示從漸層中心向外 65px 的位置開始變為深藍色,直到 85px 的位置。
    • #0000 1%:從 85px 的位置後,顏色再次過渡回透明,就是作為沒有過度的最小值,因為後面直接是 1% 的位置標記。

技術總結

這題主要還是要靠 background: radial-gradient(...) 的方式直接長出整個圖案來解,不過我也必須承認那個做法我真的不常使用,那麼以上就是我的 100% 解法分享,一樣這題 100% 的解法絕對不會只有我這一種,大家也可以分享自己的作法與我交流,那麼我們下個禮拜三再見,Happy coding~ !


avatar-img
1會員
22內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Lee Luciano的沙龍 的其他內容
在CSS Battle的第153題,我們會使用grid、css選擇器、偽元素等技巧來解決西洋棋盤的排版問題。這篇文章分享了完整的解法,包括選擇器使用、偽元素的應用以及其他排版技巧,並激勵讀者分享自己的解法。
本篇文章分享了 CSS Battle 的題目 #160 的解法,並講解了對於前端工程師基礎切版的重要性和技術總結。
這篇文章將解析CSS Battle第136題的解法,主要考驗基本CSS置中排版的能力,並提供了作者的解法與技術總結。透過互動學習,讓想要學習或練習基礎切版的朋友可以參與討論。
本篇文章介紹了 CSS Battle 第 163 題的解法,並分享了作者的實際操作方法。透過使用 gird 排版、before & after 搭配 overflow: hidden 等修飾來創建多邊形。這篇提供了基本的 CSS 切版技術以及解法分享。
前端工程師需要時不時拿出來打磨基本功。本文分享了從#18問題來提供的CSS Battle的題目作法,並介紹了grid的使用方式,以及nth-of-type的應用。這題算是蠻能鑑別你對基本CSS常用排版的熟悉程度。歡迎大家分享自己的作法與我交流 !
本文介紹CSS Battle題目#73的解法,涵蓋了分層拆解圖形、使用grid排版、調整樣式等基礎技巧。
在CSS Battle的第153題,我們會使用grid、css選擇器、偽元素等技巧來解決西洋棋盤的排版問題。這篇文章分享了完整的解法,包括選擇器使用、偽元素的應用以及其他排版技巧,並激勵讀者分享自己的解法。
本篇文章分享了 CSS Battle 的題目 #160 的解法,並講解了對於前端工程師基礎切版的重要性和技術總結。
這篇文章將解析CSS Battle第136題的解法,主要考驗基本CSS置中排版的能力,並提供了作者的解法與技術總結。透過互動學習,讓想要學習或練習基礎切版的朋友可以參與討論。
本篇文章介紹了 CSS Battle 第 163 題的解法,並分享了作者的實際操作方法。透過使用 gird 排版、before & after 搭配 overflow: hidden 等修飾來創建多邊形。這篇提供了基本的 CSS 切版技術以及解法分享。
前端工程師需要時不時拿出來打磨基本功。本文分享了從#18問題來提供的CSS Battle的題目作法,並介紹了grid的使用方式,以及nth-of-type的應用。這題算是蠻能鑑別你對基本CSS常用排版的熟悉程度。歡迎大家分享自己的作法與我交流 !
本文介紹CSS Battle題目#73的解法,涵蓋了分層拆解圖形、使用grid排版、調整樣式等基礎技巧。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
那陣子的每週三下午,都是令我最期待的一刻。 上完半天的課程後,我火速回家,換個衣服,吃點簡單的午餐,拾起裝備,再衝回去與他們玩耍。
Thumbnail
華燈拍攝的年代,大約是我三、四年級的時候,當時好流行吹高角度,我覺得好漂釀🥰🥰🥰從小擁有實驗精神的我,吵著媽媽幫我買罐果凍髮膠、尖尾梳,利用星期三讀半天的下午,自己想辦法法吹出「夢幻高角度」。輕而易舉的,我破解了高角度的做法,每個星期三下午,我都讓自己頂著美美高角度,在家附近閒晃。 這一天,
週三又是三堂課的日子,早上在九如上活氧舒展(Jun)和熱血戰鼓(Alan),下午在博愛上熱力燃脂(Owen)。 相對靜態,又有練到平衡、肌力和伸展的活氧舒展,對我來說本季是替代樂活瑜珈的一堂課,音樂很好聽,上課很享受。今天有帶新動作,Jun說如果這動作讓屁股很酸,就要去上超能55,呵呵~我不由得會心
Thumbnail
被遺忘的《愛登士家庭》 在本公子的記憶中,跟《愛登士家庭》的初接觸應該是小學時期,曾在電視上看過一些片段。
Thumbnail
今天來聊聊復古作品的延伸新作《星期三》,即使不記得舊作故事,或許也記得經典的家族合照和片頭曲的第一小節!是個很抓眼球的作品
Thumbnail
雖然這幾天持續低溫特報,桃園觀音的風勢也特別大,但這一天孩子卻特別認真於課堂活動,讓老師覺得欣慰。
Thumbnail
「你知道我為什麼喜歡喝威士忌嗎?威士忌源自uisge beatha這,意指「生命之水」……給人生命與活力的水,那不是很美好嗎?」
Thumbnail
這個月開始,我參加了作家朋友帶領的線上讀書會,這一週,她以自己的著作《親愛的,你好》一書中的一篇文章〈我姓白,名老鼠〉為主題,讓大家以醫學這個傳統的權威角色,透過書寫來審視自己的權威議題。
Thumbnail
簡介: 七種不同人格在一個人體內輪流出現,一週中交換醒來。有一天,普通、沒有特別嗜好的星期二突然在星期三時醒來,他發現,星期三不見了。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
那陣子的每週三下午,都是令我最期待的一刻。 上完半天的課程後,我火速回家,換個衣服,吃點簡單的午餐,拾起裝備,再衝回去與他們玩耍。
Thumbnail
華燈拍攝的年代,大約是我三、四年級的時候,當時好流行吹高角度,我覺得好漂釀🥰🥰🥰從小擁有實驗精神的我,吵著媽媽幫我買罐果凍髮膠、尖尾梳,利用星期三讀半天的下午,自己想辦法法吹出「夢幻高角度」。輕而易舉的,我破解了高角度的做法,每個星期三下午,我都讓自己頂著美美高角度,在家附近閒晃。 這一天,
週三又是三堂課的日子,早上在九如上活氧舒展(Jun)和熱血戰鼓(Alan),下午在博愛上熱力燃脂(Owen)。 相對靜態,又有練到平衡、肌力和伸展的活氧舒展,對我來說本季是替代樂活瑜珈的一堂課,音樂很好聽,上課很享受。今天有帶新動作,Jun說如果這動作讓屁股很酸,就要去上超能55,呵呵~我不由得會心
Thumbnail
被遺忘的《愛登士家庭》 在本公子的記憶中,跟《愛登士家庭》的初接觸應該是小學時期,曾在電視上看過一些片段。
Thumbnail
今天來聊聊復古作品的延伸新作《星期三》,即使不記得舊作故事,或許也記得經典的家族合照和片頭曲的第一小節!是個很抓眼球的作品
Thumbnail
雖然這幾天持續低溫特報,桃園觀音的風勢也特別大,但這一天孩子卻特別認真於課堂活動,讓老師覺得欣慰。
Thumbnail
「你知道我為什麼喜歡喝威士忌嗎?威士忌源自uisge beatha這,意指「生命之水」……給人生命與活力的水,那不是很美好嗎?」
Thumbnail
這個月開始,我參加了作家朋友帶領的線上讀書會,這一週,她以自己的著作《親愛的,你好》一書中的一篇文章〈我姓白,名老鼠〉為主題,讓大家以醫學這個傳統的權威角色,透過書寫來審視自己的權威議題。
Thumbnail
簡介: 七種不同人格在一個人體內輪流出現,一週中交換醒來。有一天,普通、沒有特別嗜好的星期二突然在星期三時醒來,他發現,星期三不見了。