tft每日頭條

 > 生活

 > divcss綜合排版教程

divcss綜合排版教程

生活 更新时间:2024-11-20 13:36:17

divcss綜合排版教程(用divcss輕松繪制正34)1

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

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

正三角形

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)4

正五邊形

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)6

正六邊形

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)8

正七邊形

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)10

正八邊形

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)12

加點料:動起來!

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

divcss綜合排版教程(用divcss輕松繪制正34)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綜合排版教程(用divcss輕松繪制正34)14

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

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved