用純 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會員
10內容數
我是Lucy,一個什麼都想做、什麼都做得很慢的人。 在這裡紀錄職場裡的挫折與成長、自學網頁設計的奇妙旅程、偶爾手作的時光、旅行的花費與風景,以及生活裡那些沒來得及說出口的小想法。 歡迎跟我一起,用自己的步調慢慢想、慢慢走,慢慢成長。
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
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
有很多人會想要自學平面設計,不管是想要從事相關工作、興趣、協助自己工作等等,雖然網路資源越來越多,但對於剛想入門的人卻因為選擇太多反而不知道該如何入門。 這邊分享我自己詳細學習設計的經驗,希望可以提供給大家一些幫助。
Thumbnail
本文介紹瞭如何寫 HTML 標籤,製作一個簡單的自我介紹網頁。透過介紹寫標籤的實例,讓讀者能夠更瞭解如何在 HTML 中使用不同的標籤。
Thumbnail
本文介紹瞭如何寫 HTML 標籤,製作一個簡單的自我介紹網頁。透過介紹寫標籤的實例,讓讀者能夠更瞭解如何在 HTML 中使用不同的標籤。
Thumbnail
本文章介紹了建立網頁的整個流程,包括設置 Templates, Views, Urls 等步驟。透過這些步驟,大家便能創建一個新的網頁,並成功測試。
Thumbnail
本文章介紹了建立網頁的整個流程,包括設置 Templates, Views, Urls 等步驟。透過這些步驟,大家便能創建一個新的網頁,並成功測試。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News