首页
/
每日頭條
/
圖文
/
divcss例子
divcss例子
更新时间:2025-02-11 04:33:43

divcss例子(隻用1個div你能用CSS繪制)1

給你一個div,你能用CSS繪制一個正三角形、正方形、正五邊形、正六邊形、正七邊形、正八邊形嗎?

今天我們來玩一個有趣的CSS實驗,想象下,隻用一個div,你能用CSS繪制一個正三角形、正方形、正五邊形、正六邊形、正七邊形、正八邊形嗎?今天筆者帶着大家一起動手實踐下這個有趣的聯系,由于正多邊形用到不少三角函數計算,為了方便計算,這裡正多邊形統一設定為100px,為啥隻做到正八邊形?因為就一個div最多隻能做到正八邊形。

正三角形

正三角形不需要用到僞元素,隻需要設定div本身的邊框寬度即可産生,先來看一下正三角形的邊長與中線,若邊長為100px,則中線四舍五入就是87px ( 100 x sin(60) = 87 )。

divcss例子(隻用1個div你能用CSS繪制)2

因此我們要将div的長寬都設為0,接着把底部border的寬度設為87px,左右的border寬度設為50px (顔色設為透明transparent ),就可以做出一個漂亮的三角形。

width:0; height:0; border-width:0 50px 87px ; border-style:solid; border-color:transparent transparent #095;

divcss例子(隻用1個div你能用CSS繪制)3

正方形

正方形應該是最簡單的,隻要設定長寬設定為同樣數值就可以了,不過其實還有另外兩種方法,第一種你可以把長寬設為0,把上下左右的border設為50px也可以,第二種則是高度設為0,寬度設為100px,然後某個邊寬也設為100,都是可以的。

.a{ width:100px; height:100px; background:#c00; } .b{ width:0; height:0; border-width:50px; border-style:solid; border-color:#095; } .c{ width:100px; height:0; border-width:0 0 100px; border-style:solid; border-color:#069; }

divcss例子(隻用1個div你能用CSS繪制)4

正五邊形

正五邊形就需要進入基本的三角函數領域了,其實知道了原理還是蠻簡單的。讓我們先把正五邊形分解,用原本的div作為上方的三角形,然後用一個僞元素制作下方的梯形,因為正五邊形每邊的夾角為108度,所以可以藉由三角函數計算出上方三角形的高度為59px ( 100 x cos(54) ),寬度為192px ( 100 x sin(54) x 2 ),下方梯形的高度為95px ( 100 x sin(72) ),長邊的寬度跟上面的三角形一樣都是192px。

divcss例子(隻用1個div你能用CSS繪制)5

了解原理之後,就可以利用僞元素來搭配制作啰!

.a{ position:relative; width:0; height:0; border-width:0 81px 59px; border-style:solid; border-color:transparent transparent #069; } .a:before{ position:absolute; content:""; top:59px; left:-81px; width:100px; height:0; background:none; border-width:95px 31px 0; border-style:solid; border-color:#069 transparent transparent; }

divcss例子(隻用1個div你能用CSS繪制)6

正六邊形

正六邊形的每個夾角是120度,如果以純CSS的方向來看的話,就是把正五邊形上面的三角形改變一下,就可以做出正六邊形,也就是變成上下兩個梯形的組合而已,梯形的長邊為200px ( 100 x cos(60) x 2 100 ),梯形的高度為87px ( 100 x sin(60) )。

divcss例子(隻用1個div你能用CSS繪制)7

所以隻要把正五邊形的CSS稍作修改就可以做出正六邊形了。

.a{ position:relative; width:100px; height:0; border-width:0 50px 87px; border-style:solid; border-color:transparent transparent #f80; } .a:before{ position:absolute; content:""; top:87px; left:-50px; width:100px; height:0; background:none; border-width:87px 50px 0; border-style:solid; border-color:#f80 transparent transparent; }

divcss例子(隻用1個div你能用CSS繪制)8

正七邊形

正七邊形開始就必須再使用after 這個僞元素了,因為正七邊形必須要拆解為三個區塊,分别是用原本的div 作為上面的三角形,一個僞元素作為中間的梯形,然後另一個僞元素作為底部的梯形,正七邊形的夾角比較特殊不是整數,而是128又4/7 度,大概取到小數第二位是128.57,所以計算起來結果就如下圖所示,重點就是必須要清楚地知道長寬是多少。

divcss例子(隻用1個div你能用CSS繪制)9

有了長寬之後,就開始用CSS來寫啰!

.a{ position:relative; width:0; height:0; border-width:0 90px 43px; border-style:solid; border-color:transparent transparent #09c; } .a:before{ position:absolute; content:""; top:140px; left:-112px; width:100px; height:0; border-width:78px 62px 0; border-style:solid; border-color:#09c transparent transparent; } .a:after{ position:absolute; content:""; top:43px; left:-112px; width:180px; height:0; border-width:0 22px 97px; background:none; border-style:solid; border-color:transparent transparent #09c; }

divcss例子(隻用1個div你能用CSS繪制)10

正八邊形

正八邊形其實就是把正七邊形上面的三角形變成梯形,然後中間的梯形變成矩形就搞定了,正八邊形的夾角為135 度,計算出來的各個區域長寬如下圖。

divcss例子(隻用1個div你能用CSS繪制)11

同樣的了解原理,CSS做起來就簡單多啰!

.a{ position:relative; width:100px; height:0; border-width:0 71px 71px; border-style:solid; border-color:transparent transparent #f69; } .a:before{ position:absolute; content:""; top:171px; left:-71px; width:100px; height:0; border-width:71px 71px 0; border-style:solid; border-color: #f69 transparent transparent; } .a:after{ position:absolute; content:""; top:71px; left:-71px; width:242px; height:0; border-width:0 0 100px; background:none; border-style:solid; border-color:transparent transparent #f69; }

divcss例子(隻用1個div你能用CSS繪制)12

加點料:動起來!

以上就是純粹利用CSS做出來的單一div的正多邊形變換,是不是很好玩,一個div能做出來這麼多形狀,是不是很過瘾,不過瘾的話,我們加點料來點動畫,其實加上動畫效果,就可以做出像下面範例這個樣子的變換動畫啰!不過下面的範例筆者再最外層另外用一個div進行包裹,避免因為大小的變換造成銜接處的不自然,大家可以參考看看喔!

divcss例子(隻用1個div你能用CSS繪制)13

css部分

body{ margin:100px; } .s{ position:absolute; -webkit-animation:s 5s infinite linear alternate; } .a{ position:relative; width:0; height:0; border-width:0 50px 87px ; border-style:solid; border-color:transparent transparent #095; -webkit-animation:a 5s infinite linear alternate; } .a:before,.a:after{ position:absolute; content:""; border-width:0; border-style:solid; } .a:before{ -webkit-animation:ab 5s infinite linear alternate; } .a:after{ -webkit-animation:af 5s infinite linear alternate; } @-webkit-keyframes a{ 0%,5%{ width:0; height:0; border-width:0 50px 87px ; border-color:transparent transparent #095; } 23%{ width:0; height:0; border-width:0 50px 0 ; border-color:transparent transparent #c00; } 42%{ width:0; height:0; border-width:0 81px 59px; border-color:transparent transparent #069; } 61%{ width:100px; height:0; border-width:0 50px 87px; border-color:transparent transparent #f80; } 80%{ width:0; height:0; border-width:0 90px 43px; border-color:transparent transparent #09c; } 95%,100%{ width:100px; height:0; border-width:0 71px 71px; border-color:transparent transparent #f69; } } @-webkit-keyframes ab{ 0%,5%{ top:87px; left:-50px; width:100px; height:0; background:#095; border-width:0; border-color:#095 transparent transparent; } 22.99%{ top:0; left:-50px; width:100px; height:100px; background:#c00; border-width:0; border-color:#c00 transparent transparent; } 23%{ top:0; left:-50px; width:100px; height:0; background:none; border-width:100px 0 0; border-color:#c00 transparent transparent; } 42%{ top:59px; left:-81px; width:100px; height:0; background:none; border-width:95px 31px 0; border-color:#069 transparent transparent; } 61%{ top:87px; left:-50px; width:100px; height:0; border-width:87px 50px 0; border-color:#f80 transparent transparent; } 80%{ top:140px; left:-112px; width:100px; height:0; border-width:78px 62px 0; border-color:#09c transparent transparent; } 95%,100%{ top:171px; left:-71px; width:100px; height:0; border-width:71px 71px 0; border-color: #f69 transparent transparent; } } @-webkit-keyframes af{ 0%,61%{ top:87px; left:-50px; width:200px; height:0; border-width:0; background:none; border-color:transparent transparent #f80; } 80%{ top:43px; left:-112px; width:180px; height:0; border-width:0 22px 99px; background:none; border-style:solid; border-color:transparent transparent #09c; } 95%,100%{ top:71px; left:-71px; width:242px; height:0; border-width:0 0 100px; background:none; border-style:solid; border-color:transparent transparent #f69; } } @-webkit-keyframes s{ 0%,5%{ -webkit-transform:translateX(0) translateY(0) scale(1); } 23%{ -webkit-transform:translateX(-15px) translateY(-10px) scale(.9); } 42%{ -webkit-transform:translateX(-50px) translateY(-20px) scale(.8); } 61%{ -webkit-transform:translateX(-70px) translateY(-25px) scale(.7); } 80%{ -webkit-transform:translateX(-80px) translateY(-25px) scale(.6); } 95%,100%{ -webkit-transform:translateX(-100px) translateY(-25px) scale(.5); } }

html部分

<div class="s"> <div class="a"></div> </div>

小節

divcss例子(隻用1個div你能用CSS繪制)14

今天的内容就到這裡,我們的确用一個div,再結合三角函數的相關知識,一口氣繪制完了正三角形、正方形、正五邊形、正六邊形、正七邊形、正八邊形,是不是很有趣呢。你不妨按照上述示例,親自動手試試哦。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
迪士尼收購福克斯不再制作電影(二十世紀福克斯)
迪士尼收購福克斯不再制作電影(二十世紀福克斯)
  參考消息網1月19日報道美媒稱,迪士尼公司一名發言人說,該公司重新命名了2019年收購的二十世紀福克斯影業公司,去掉了“福克斯”,将其更名為“二十世紀影業公司”。   據美國《華爾街日報》網站1月17日報道,迪士尼還把二十世紀福克斯下屬的子公司、傳統上以出品低預算的藝術電影著稱的“福克斯探照燈電影公司”更名為“探照燈電影公司”。   報道稱,這一變化在兩...
2025-02-11
極限挑戰7季用什麼車(漢EV廣州
極限挑戰7季用什麼車(漢EV廣州
  漢EV創世版廣州-陽江往返極限挑戰   實測續航高達701.8km   無懼遠行,即刻出發!      ,
2025-02-11
2米高的女兒牆可以用砌體施工麼(砌體女兒牆的限制)
2米高的女兒牆可以用砌體施工麼(砌體女兒牆的限制)
  什麼情況下可采用磚做女兒牆?有何構造要求?      《非結構構件抗震設計規範》JGJ 339-2015第4.4.2條,女兒牆高度超過0.5m時、人流出入口、通道處或9度時,出屋面砌體女兒牆應設置構造柱與主體結構錨固,構造柱間距宜取2.0m~2.5m;高層建築的女兒牆,不得采用砌體女兒牆。      22G614-1具體規定   1、砌體女兒牆頂部應采用...
2025-02-11
朱竹清終于接受戴沐白(朱竹清為何稱和星羅學院是生死之戰)
朱竹清終于接受戴沐白(朱竹清為何稱和星羅學院是生死之戰)
  導讀:随着鬥羅大陸動畫96集的更新,戴沐白的哥哥戴維斯和朱竹清的姐姐朱竹雲也相繼登場。他們所在的星羅皇家學院和史萊克學院在第三輪狹路相逢。本來隻是一場普通的魂師交流大賽,為何戴沐白卻說是生死大戰呢?      戴沐白和朱竹清的家族   一場魂師交流大賽,卻為何要以命相搏?主要是因為戴沐白和星羅學院隊長戴維斯的關系。戴沐白和朱竹清都是星羅帝國人,分别屬于兩...
2025-02-11
田言嫁給誰了(究竟誰在套路誰)
田言嫁給誰了(究竟誰在套路誰)
  導語:在秦時明月最新的劇情當中,農家衆人集體上演了感人的一幕。原本農家六堂人多勢衆,在江湖上也算是基礎雄厚。可是六堂之人卻各自争鬥,每位堂主都對俠魁之位觊觎已久,因此,農家不得不分為兩大派。但随着劇情的發展,實力占優的田言這一派逐漸掌握了大局。因此心有不服的朱家也不得不審時度勢,将神農堂投向田言的懷抱,雙方彼此化解了往日的恩怨。      可事實上真的有...
2025-02-11
Copyright 2023-2025 - www.tftnews.com All Rights Reserved