本文為叩丁狼高級(jí)講師原創(chuàng)文章晦毙,轉(zhuǎn)載請(qǐng)注明出處遏乔。
現(xiàn)在的CSS功能非常強(qiáng)大了原叮,特別是CSS3的屬性拴鸵,例如轉(zhuǎn)換屬性,過(guò)渡屬性逞怨,動(dòng)畫(huà)屬性卖怜,能做的效果非常多史煎。在網(wǎng)頁(yè)開(kāi)發(fā)中衩藤,會(huì)經(jīng)常遇到一些小符號(hào)或者形狀吧慢,在以前就只能通過(guò)切圖來(lái)實(shí)現(xiàn),切圖這種方式是用起來(lái)方便赏表,但是會(huì)增加請(qǐng)求检诗。而現(xiàn)在瀏覽器對(duì)CSS3的兼容基本沒(méi)有什么問(wèn)題匈仗,所以在網(wǎng)頁(yè)開(kāi)發(fā)的時(shí)候遇到符號(hào)或者形狀,能寫(xiě)的都是用CSS來(lái)書(shū)寫(xiě)了逢慌。
而這篇文章就是收集了各種通過(guò)CSS書(shū)寫(xiě)的形狀悠轩,在開(kāi)發(fā)的時(shí)候可以快速應(yīng)用攻泼。例如:橢圓火架,三角形,梯形忙菠,多邊形距潘,五角星,多角星只搁,等等...
文章中涉及到的重要屬性有:border
,transform
俭尖,gradient
氢惋,偽元素
,border-radius
等稽犁,這些都是比較常用的屬性焰望,但是通過(guò)不同的組合,可以構(gòu)建出不同的形狀已亥。
為了便于理解實(shí)現(xiàn)原理熊赖,不同的組合采用了兩個(gè)或多個(gè)顏色進(jìn)行區(qū)分。
橢圓
畫(huà)圓虑椎,都是通過(guò)border-radius
來(lái)繪制震鹉,橢圓也不例外。
.ellipse {
width: 140px;
height: 180px;
background: orange;
border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
}
<div class="ellipse"></div>
三角形
三角形非常常見(jiàn)捆姜,繪制也不難传趾,通過(guò)border
就可以實(shí)現(xiàn)了。底邊控制三角形的高度泥技,左邊和右邊控制三角形的寬度浆兰。
.traingle {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid orange;
}
<div class="traingle"></div>
梯形
梯形有兩種繪制思路,一種是利用透視的近大遠(yuǎn)小來(lái)繪制得到珊豹;一種是利用三角形組合而來(lái)簸呈。
.trapezoid{
position: relative;
width: 60px;
padding: 60px;
}
.trapezoid::before{
content:"";
perspective: 20px;
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
transform: scaleY(1.3) rotateX(5deg);
transform-origin: bottom;
background: orange;
}
<div class="trapezoid"></div>
.trapezoid2 {
position: relative;
width: 60px;
border-top: 60px solid orange;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
}
<div class="trapezoid2"></div>
五邊形
五邊形是通過(guò)一個(gè)梯形+三角形組合而來(lái)。
.pentagon {
position: relative;
width: 54px;
border-width: 50px 18px 0;
border-style: solid;
border-color: orange transparent;
}
.pentagon:before {
content: "";
position: absolute;
height: 0;
width: 0;
top: -85px;
left: -18px;
border-width: 0 45px 35px;
border-style: solid;
border-color: transparent transparent blue;
}
<div class="pentagon"></div>
六邊形
六邊形是由上下兩個(gè)梯形組合得到店茶,是不是很簡(jiǎn)單蜕便?
.hexagon {
position: relative;
width: 60px;
border-bottom: 60px solid orange;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
}
.hexagon::before {
content: "";
position: absolute;
width: 60px;
height: 0px;
top: 60px;
left: -40px;
border-top: 60px solid blue;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
}
<div class="hexagon"></div>
八邊形
跟六邊形類(lèi)似,上下各一個(gè)梯形忽妒,中間一個(gè)矩形玩裙,就可以得到一個(gè)八邊形了兼贸。
.octagon {
position: relative;
width: 40px;
height: 100px;
background: orange;
}
.octagon::before {
content: "";
height: 60px;
position: absolute;
top: 0;
left: 40px;
border-left: 30px solid blue;
border-top: 20px solid transparent;
border-bottom: 20px solid transparent;
}
.octagon::after {
content: "";
height: 60px;
position: absolute;
top: 0;
left: -30px;
border-right: 30px solid blue;
border-top: 20px solid transparent;
border-bottom: 20px solid transparent;
}
<div class="octagon"></div>
以上的都是多邊形,下面來(lái)看一下“多角形”的繪制吃溅,首先當(dāng)然是五角星了溶诞。
五角星
原理是什么?三個(gè)三角形决侈,相對(duì)而放即可螺垢;
.star {
position: relative;
width: 0;
border-right: 100px solid transparent;
border-bottom: 70px solid orange;
border-left: 100px solid transparent;
transform: rotate(35deg) scale(.6);
}
.star:before {
content: '';
position: absolute;
border-bottom: 80px solid blue;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
top: -45px;
left: -65px;
transform: rotate(-35deg);
}
.star:after {
content: '';
position: absolute;
top: 3px;
left: -105px;
border-right: 100px solid transparent;
border-bottom: 70px solid blue;
border-left: 100px solid transparent;
transform: rotate(-70deg);
}
<div class="star"></div>
六角星
六角星更簡(jiǎn)單,比五角星還要少一個(gè)三角形赖歌,也就是有兩個(gè)三角形枉圃,疊在一起組成。
.sixstar {
position: relative;
width: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid orange;
}
.sixstar:after {
content: "";
position: absolute;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid blue;
top: 30px;
left: -50px;
}
<div class="sixstar"></div>
八角星
八角星庐冯,一個(gè)矩形就有4個(gè)角了孽亲,如果兩個(gè)疊在一起,并旋轉(zhuǎn)一下展父,是不是就有了八角返劲?
.eightstar {
position: relative;
width: 100px;
height: 100px;
background-color: orange;
transform: rotate(30deg);
}
.eightstar::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
transform: rotate(45deg);
background-color: blue;
}
<div class="eightstar"></div>
十二角星
十二角星跟八角星類(lèi)似,八角星已經(jīng)有2個(gè)矩形栖茉,加多一個(gè)矩形篮绿,就剛好十二個(gè)角了。
.twelvestar {
position: relative;
width: 100px;
height: 100px;
margin-bottom: 100px!important;
background-color: orange;
transform: rotate(30deg);
}
.twelvestar::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
transform: rotate(30deg);
background-color: blue;
}
.twelvestar::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
transform: rotate(60deg);
background-color: blue;
}
<div class="twelvestar"></div>
是不是挺好玩的吕漂?下面繼續(xù):
倒角
相當(dāng)于一個(gè)八邊形亲配,主要是通過(guò)漸變,設(shè)置不同角度得到惶凝。
.notching {
width: 40px;
height: 40px;
padding: 40px;
background: linear-gradient(135deg, transparent 15px, orange 0) top left,
linear-gradient(-135deg, transparent 15px, orange 0) top right,
linear-gradient(-45deg, transparent 15px, orange 0) bottom right,
linear-gradient(45deg, transparent 15px, orange 0) bottom left;
background-size: 50% 50%;
background-repeat: no-repeat;
}
<div class="notching"></div>
弧線
.arc {
width: 100px;
height: 100px;
border-top: 10px solid blue ;
border-right: 0 solid red;
border-bottom: 0 solid red;
border-left: 10px solid red;
background-color: transparent;
border-radius: 100px 0 0 0;
}
<div class="arc"></div>
心形
.heart {
position: relative;
width: 100px;
height: 90px;
}
.heart:before,
.heart:after {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 50px;
height: 80px;
background: blue;
-moz-border-radius: 50px 50px 0 0;
border-radius: 50px 50px 0 0;
transform: rotate(-45deg);
transform-origin: 0 100%;
}
.heart:after {
background: orange;
left: 0;
transform: rotate(45deg);
transform-origin :100% 100%;
}
<div class="heart"></div>
旋轉(zhuǎn)箭頭
.curvedarrow {
position: relative;
width: 0;
height: 0;
border-top: 20px solid transparent;
border-right: 20px solid orange;
transform: rotate(10deg);
}
.curvedarrow:after {
content: "";
position: absolute;
border: 0 solid transparent;
border-top: 10px solid blue;
border-radius: 20px 0 0 0;
top: -23px;
left: -12px;
width: 20px;
height: 20px;
transform: rotate(45deg);
}
<div class="curvedarrow"></div>
其實(shí)還有很多吼虎,后面也會(huì)持續(xù)更新,同時(shí)歡迎大家分享其他好的形狀代碼~~