用純 HTML + CSS 畫出圓餅圖

更新 發佈閱讀 9 分鐘

爬了很多文,終於做出不用外掛的純 HTML + CSS 的圓餅圖。

在 AC 的課程作業中有練習為鋼鐵人製作簡單的名片及介紹網頁,我在做的時候就一直想著之後也要為自己做網頁版名片和履歷!

上網搜尋看到別人的作品用圓餅圖或是長條圖來呈現技能熟練度,我原本想說:「喔,就放幾張圖片就好了。」,準備要開始用 AI 畫圖之前,覺得先用 Devtools 看一下那個人的圖是怎麼做的好了,看一下完全佩服耶!人家是用語法寫的,不是放圖片!

我看到的履歷畫面類似這樣

(圖片截自網路上別人的作品,點圖片可以進去原作的 Codepen)

raw-image

我看了很想學的圓餅圖

當時看到這個呈現方式就非常想學,上網查了很多關鍵字,但網路上的文章很多都是用外掛套件做的,很少用純 HTML + CSS 做,我有查到原作者做這個圓餅圖的原理跟教學,同一篇也有教長條圖和其他圖的畫法,非常實用,但我覺得原理有點複雜,後來我又找到了幾篇覺得比較好理解的,我會一併把參考文章放在最後呦!

跟著實作了之後我做了兩款不同的樣子,一種是單純圓餅圖,字要放外面;另一種是外框顯示比例,中間可以放字。

看看成品

raw-image

以 50% 作為區分,50% 以下和 50% 以上的作法有一點點不一樣,所以有四個圓餅圖。

開始第一步啦~

先畫出兩個 Div 區塊,這不是圓餅圖本體,只是為了讓圓餅圖整齊排好所以先做的排版,背景色設定淺紫色是方便看區塊的位置及大小,也可以用別的顏色或是不要設定背景顏色。

raw-image

先畫出兩個淺紫色 Div 區塊,方便看區塊的位置及大小

程式碼

HTML

<div>不會動的圓餅圖<br>(小於50%)</div>
<div>不會動的圓餅圖<br>(大於50%)</div>

CSS

div {
width: 200px; /* 寬 */
height: 200px; /* 高 */
display: inline-block; /* 橫向排列 */
margin: 20px; /* 外距 20px */
background: #f1eaff; /* 背景淺紫色*/
text-align: center; /* 文字置中對齊 */
font-size: 1em; /* 文字大小 1em */
color: #146b9b; /* 文字深藍色 */
}

接下來是圓餅圖了,兩個圓餅長一樣,所以用同一個CSS 的選擇器。

.pie1, .pie2 {
width: 100px; /* 寬 */
height: 100px; /* 高 */
background: pink; /* 背景粉紅色*/
border: 3px solid white; /* 邊框 粗3px 實線 白色 */
border-radius: 50%; /* 圓角 50% (變成圓形) */
box-shadow: 0px 1px 5px 5px rgba(0, 0, 0, 0.1); /* 陰影 */
}

raw-image

文章講述的原理是利用漸層背景的方式製作出圓餅圖,先把圓餅圖切一半,上面再利用一個圖層遮罩偽元素讓增減的百分比顯示或隱藏。

兩個圓餅圖共同一個選擇器,添加線性漸層的背景,顏色一半是背景色,另一半則是可以自訂的顏色。

background-image: /* 背景為線性漸層 */ linear-gradient(
/* 方向為向右 */ to right,
/* 左半邊為背景圖片的顏色 */ transparent 50%,
/* 右半邊為深咖啡色 */ #655 0%
);

寫完之後會長這樣

raw-image

添加線性漸層的背景,將圓餅圖切半

線性漸層的撰寫方式

background:linear-gradient(方向, 顏色1 位置, 顏色2 位置);

接下來用偽元素覆蓋在兩個圓餅圖上層,做出圓餅圖不同的 % 數,到這裡因為兩個圓餅圖的 % 數不同了,所以選擇器要分開寫喔~

/* 加入上方遮罩偽元素 <50% */
.pie1::before {
content: "";
display: block;
margin-left: 50%;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background-color: inherit;
transform-origin: left;
transform: rotate(0.2turn);
}
/* 加入上方遮罩偽元素 >50% */
.pie2::before {
content: "";
display: block;
margin-left: 50%;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background: #655;
transform-origin: left;
transform: rotate(0.1turn);
}

raw-image

為兩個圓餅圖添加偽元素

到這邊就完成單純的圓餅圖了,文字要放外面,如果想要做外框顯示比例,中間可以放字的圓餅圖的話,我在圓餅圖中間再加上一個圓形。

raw-image

在兩個圓餅圖區塊裡面各加上一個 div 區塊。

HTML

<div>
不會動的圓餅圖<br>(小於50%)
<div class="pie1">
<div class="pie1-m">PS</div>
</div>
</div>
<div>
不會動的圓餅圖<br>(大於50%)
<div class="pie2">
<div class="pie2-m">PS</div>
</div>
</div>

raw-image

CSS

.pie1-m,
.pie2-m {
width: 80px; /* 寬 */
height: 80px; /* 高 */
background: #d6ebff; /* 背景淺藍色 */
border-radius: 50%; /* 圓角 50% (變成圓形) */
position: absolute; /* 位置是絕對定位 */
display: flex;
align-items: center;
justify-content: center;
}

到這裡會緊張,為什麼上面的圓形不在圓餅圖正中間?

沒關係!在上面的 CSS 裡我們已經把這個圓形區塊定位方式設定成 absolute 絕對定位了,接下來要利用上下左右距離,把上面的圓形區塊推到正中間,或是也可以利用這種方式把圓形推到其他想放的位置。

raw-image

CSS

.pie1-m {
left: 69px;
top: 83px;
}
.pie2-m {
left: 312px;
top: 83px;
}

這裡要注意的是,依照我的排版方式,我的圓形跟上方和左方的距離是這樣的數值.如果排版的方式改變了,距離也會改變,所以要依照自己的排版去調整上下左右的距離數值喔!

調整完就得到好看的圓餅圖了!

raw-image

(上面背景利用淺紫色、圓形用淺藍色,是為了讓區塊看得清楚,做完之後也可以再調整~)

附上圓餅圖們的 Codepen ~



參考資料:

純 HTML + CSS 的圓餅圖參考這篇(有包含長條圖畫法)

第 4 章,作業 2 成果 - 動畫互動網頁程式入門 (HTML/CSS/JS) - Hahow 好學校
Homework1 製作自己的個人簡歷 作業繳交時標題前面格式如下 [Homework 1 個人簡歷] xxxxx(一兩句話(…hahow.in

這裡練習的是參考這兩篇(兩篇原理相同,但詳細度和講解方法不同。)

Secret 14: 簡單的圓餅圖 (CSS transforms) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
圓餅圖,即使是只有二種顏色的簡單圖案,在CSS也不是容易做得到。 常用的做法包括用繪圖軟體事先製作許多圖案給不同的值使用,或者用大型的JavaScript函式庫來繪製圖案。…ithelp.ithome.com.tw

用css能實現一個圓等分12份的樣子嗎?
我要是說不行,肯定會被打。可以看看下面的文章:用CSS和SVG製作餅圖_CSS3, svg, CSS秘密花園 教程_w3cplus基本解決方案就是介紹的,當然沒有像題主所說的12等份,但知道方案也就不難了。…www.getit01.com

留言
avatar-img
留言分享你的想法!
avatar-img
Lucy慢慢想
0會員
17內容數
我是Lucy,一個什麼都想做、什麼都做得很慢的人。 在這裡紀錄職場裡的挫折與成長、自學網頁設計的奇妙旅程、偶爾手作的時光、旅行的花費與風景,以及生活裡那些沒來得及說出口的小想法。 歡迎跟我一起,用自己的步調慢慢想、慢慢走,慢慢成長。
你可能也想看
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
這篇文章分享如何透過免費電子郵件課程提供價值,建立信任,並引導訂閱者購買付費產品。透過豐富內容、獨特風格,以及AI的幫助,讓你的需求看起來更具吸引力。
Thumbnail
這篇文章分享如何透過免費電子郵件課程提供價值,建立信任,並引導訂閱者購買付費產品。透過豐富內容、獨特風格,以及AI的幫助,讓你的需求看起來更具吸引力。
Thumbnail
Ae 小技巧:製作3D 方塊 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:製作3D 方塊 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:如何製作網格 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:如何製作網格 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
有很多人會想要自學平面設計,不管是想要從事相關工作、興趣、協助自己工作等等,雖然網路資源越來越多,但對於剛想入門的人卻因為選擇太多反而不知道該如何入門。 這邊分享我自己詳細學習設計的經驗,希望可以提供給大家一些幫助。
Thumbnail
有很多人會想要自學平面設計,不管是想要從事相關工作、興趣、協助自己工作等等,雖然網路資源越來越多,但對於剛想入門的人卻因為選擇太多反而不知道該如何入門。 這邊分享我自己詳細學習設計的經驗,希望可以提供給大家一些幫助。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News