欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么用CSS繪制各種形狀

這篇文章主要為大家展示了“怎么用CSS繪制各種形狀”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么用CSS繪制各種形狀”這篇文章吧。

創(chuàng)新互聯(lián)聯(lián)系熱線:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域10多年,包括成都樓梯護(hù)欄等多個(gè)方面擁有豐富設(shè)計(jì)經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián),為企業(yè)保駕護(hù)航。

自適應(yīng)的橢圓

1.自適應(yīng)的橢圓

實(shí)現(xiàn)方式是通過border-radius這個(gè)屬性;border-radius它可以單獨(dú)指定水平和垂直半徑。用 /  分隔這兩個(gè)值。并且該屬性的值不僅可以接受長度值,還能接收百分比的值。百分比的值會(huì)基于元素的尺寸進(jìn)行解析,寬是水平半徑的解析,高是垂直半徑的解析。

所以可以把兩個(gè)半徑的值都設(shè)置成50%;

border-radius: 50% / 50%; 
/* 值都是50% 就可以簡化成 border-radius: 50%; */

最終的效果:

怎么用CSS繪制各種形狀

2.半橢圓的實(shí)現(xiàn)

border-radius的值是可以分開設(shè)置的,用空格進(jìn)行分開,甚至可以為四個(gè)角提供完全不同的水平和垂直的半徑。

border-radius四個(gè)值的渲染順序是從左上角開始,順時(shí)針渲染;
當(dāng)只給定3個(gè)值時(shí),第四個(gè)值和第二個(gè)相等;
當(dāng)給定兩個(gè)值時(shí),第三個(gè)值和***個(gè)值相等,第四個(gè)值和第二個(gè)值相等。

所以半橢圓的實(shí)現(xiàn)方法就是:

border-radius: 50% / 100% 100% 0 0; 

/*  *  會(huì)解析成下面的樣子     border-top-left-radius: 50% 100%;     border-top-right-radius: 50% 100%;     border-bottom-right-radius: 50% 0px;     border-bottom-left-radius: 50% 0px; */

最終效果:

怎么用CSS繪制各種形狀

同理的四分之一的橢圓的生成方法:

/* 不能設(shè)置圓角的就設(shè)置成 0 */border-radius: 100% 0 0 0;

最終效果:

怎么用CSS繪制各種形狀

平行四邊形的實(shí)現(xiàn)

在生成平行四邊形時(shí),直接對當(dāng)前對div使用transform: skew(-45deg);變形,會(huì)導(dǎo)致div里面的內(nèi)容也會(huì)發(fā)生變形,就像下面這樣:

怎么用CSS繪制各種形狀

通用的解決辦法是通過偽元素的方法,就是把所有的樣式用到偽元素上,對偽元素進(jìn)行變形,由于內(nèi)容不在偽元素里,所以內(nèi)容不會(huì)受到影響。具體的實(shí)現(xiàn)如下:

<div class="parallelogram">click</div>
.parallelogram {text-align: center;position: relative;
}.parallelogram::before {transform: skew(-45deg);position: absolute;left: 0;right: 0;top: 0;bottom: 0;z-index: -1;content: ' ';background: #fb3;
}

生成的效果如下:

怎么用CSS繪制各種形狀

這種技巧不僅對于skew()變形來說有用,還適用于其他任何變形樣式,當(dāng)想變形任何一個(gè)元素而不想改變它的內(nèi)容的時(shí)候都可以用到它。

菱形圖片的生成

在css中,有些需求是要把圖片裁剪成菱形,使用css可以很好的解決這個(gè)問題,為不需要預(yù)先把圖片裁剪成菱形而影響后期的維護(hù)。

基于變形的方案

直接使用類似平行四邊形的方式旋轉(zhuǎn),給img設(shè)置max-width:  100%,會(huì)導(dǎo)致圖片被裁剪成八邊形。因?yàn)?00%會(huì)被解析成div的邊長。所以解決這個(gè)問題的辦法就是讓圖片的寬等于div這個(gè)容器的對角線的長度,比較好的辦法就是把圖片用scale放大根號(hào)2倍(大概是1.42倍),具體實(shí)現(xiàn)的代碼如下:

<div class="picture"><img src="cat.jpg" /> </div>
.picture {width: 400px;height: 400px;transform: rotate(45deg);overflow: hidden;
}.picture1 > img {max-width: 100%;height: 400px;transform: rotate(-45deg) scale(1.42);
}

效果如下:

怎么用CSS繪制各種形狀

scale和width放大的區(qū)別:scale的縮放圖片是以它的中心點(diǎn)進(jìn)行縮放的(在不指定transform-origin的前提下),通過width屬性來放大圖片時(shí),只會(huì)以它左上角的原點(diǎn)進(jìn)行縮放,然后用額外的負(fù)邊距來調(diào)整圖片的位置。

裁切路徑方案上面的辦法還需要前套一層多余的html標(biāo)簽,使用clip-path這個(gè)屬性,這個(gè)原本是svg的屬性,使用polygon()這個(gè)多邊形的函數(shù),使用的百分比的值會(huì)解析為元素自身的尺寸。

img {clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
}

clip-path這個(gè)屬性還能參與動(dòng)畫,只要?jiǎng)赢嬍窃谕粋€(gè)形狀函數(shù)之間進(jìn)行的,而且點(diǎn)的數(shù)量是相同的就可以,比如我們希望鼠標(biāo)hover時(shí)平滑的擴(kuò)展為完成的面積,只需這樣:

.picture {clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);transition: 1s clip-path;
}.picture:hover {clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}

切腳效果的實(shí)現(xiàn)

徑向漸變的方式

實(shí)現(xiàn)一個(gè)角被切掉的效果,可以使用漸變,漸變接受一個(gè)角度作為方向,并且允許文字溢出并超出切角區(qū)域(因?yàn)樗皇潜尘皥D案),具體實(shí)現(xiàn)如下:

div {  background: #58a;  background: linear-gradient(-45deg, transparent 15px, #58a 0);
}

效果如下:

怎么用CSS繪制各種形狀

實(shí)現(xiàn)兩個(gè)切角的辦法:

div {width: 200px;height: 100px;background: #58a;background: linear-gradient(-45deg, transparent 15px, #58a 0) 
                right, linear-gradient(45deg, transparent 15px, #65a 
                 0) left;background-size: 50% 100%;background-repeat: no-repeat;
}

效果如下:
怎么用CSS繪制各種形狀

同理的四個(gè)切角的實(shí)現(xiàn):

div {width: 200px;height: 100px;background: #58a;background: linear-gradient(135deg, transparent 15px, #58a 0) top 
left, linear-gradient(-135deg, transparent 15px, #58a 0) top right, linear-gradient(-45deg, transparent 15px, #58a 0) bottom right, linear-gradient(45deg, transparent 15px, #58a 0) bottom left;background-size: 50% 50%;background-repeat: no-repeat;
}

效果如下:

怎么用CSS繪制各種形狀

上面的代碼可維護(hù)比較差,在改變切角和顏色時(shí)都要修改多處,所以我們可以使用scss的mixin來寫:

@mixin beveled-corners($bg, $tl:0, $tr:$tl, $br:$tl, $bl:$tr) {
    background: $bg;
    background:
    linear-gradient(135deg, transparent $tl, $bg 0) top left,
    linear-gradient(225deg, transparent $tr, $bg 0) top right,
    linear-gradient(-45deg, transparent $br, $bg 0) bottom right,
    linear-gradient(45deg, transparent $bl, $bg 0) bottom left;
    background-size: 50% 50%;
    background-repeat: no-repeat;
}

調(diào)用時(shí):

@include beveled-corners(#58a, 15px, 5px);

***生成的效果是左上角和右下角是15px的切角,右上角和左下角是5px的切角。上面的minxin設(shè)置了初值,當(dāng)傳入的值少于四個(gè)值時(shí),就跟border-radius賦值一樣。

一樣的道理我們也可以創(chuàng)建弧形切角,至少改成徑向漸變

div {width: 200px;height: 100px;background: #58a;background: radial-gradient(circle at top left, transparent 15px, #58a 0) top left, radial-gradient(circle at top right, transparent 15px, #58a 0) top right, radial-gradient(circle at bottom right, transparent 15px, #58a 0) bottom right, radial-gradient(circle at bottom left, transparent 15px, #58a 0) bottom left;background-size: 50% 50%;background-repeat: no-repeat;
}

效果如下:
怎么用CSS繪制各種形狀

內(nèi)聯(lián)SVG與border-image的方式

SVG 可以實(shí)現(xiàn)與尺寸完全無關(guān)的***縮放,當(dāng)文本溢出的時(shí)候,則會(huì)起到普通邊框的作用,令文字折行。具體的實(shí)現(xiàn)如下:

div {  width: 200px;  height: 100px;  border: 15px solid transparent;  border-image: 1 url('data:image/svg+xml,\<svg xmlns="http://www.w3.org/2000/svg" width="3" height="3" fill="%2358a">\<polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\</svg>');
}

效果如下:

怎么用CSS繪制各種形狀

解決中間的背景色的填充可以給div塊加一個(gè)和border一樣的背景色:

div {width: 200px;height: 100px;border: 15px solid transparent;border-image: 1 url(data:image/svg+xml,\<svg xmlns="http://www.w3.org/2000/svg" width="3" heigh="3" fill="%2358a">\<polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\</svg>);background: #58a;background-clip: padding-box;
}

裁切路徑方案CSS 裁切路徑最神奇的地方在于我們可以同時(shí)使用百分比數(shù)值(它會(huì)以元素自身的寬高作為基數(shù)度進(jìn)行換算)和絕對長度值,從而提供巨大的靈活性。

如果用裁切路徑將一個(gè)元素切出20px大小的斜面切角,具體的代碼如下:

background: #58a;clip-path: polygon( 20px 0, calc(100% - 20px) 0, 100% 20px, 100% calc(100% - 20px), calc(100% - 20px) 100%, 20px 100%, 0 calc(100% - 20px), 0 20px);

這個(gè)方法***的好處:可以使用任意類型的背景,甚至可以對替換元素(比如圖片)進(jìn)行裁切
,并且支持動(dòng)畫效果。

缺點(diǎn):當(dāng)內(nèi)邊距不夠?qū)挄r(shí),它會(huì)裁切掉文本。

梯形標(biāo)簽頁的實(shí)現(xiàn)

梯形的實(shí)現(xiàn)可以通過

div {position: relative;display: inline-block;padding: .5em 1em .35em;color: white;
}div::before {content: '';position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: -1;background: #58a;transform: scaleY(1.3) perspective(.5em) rotateX(5deg);transform-origin: bottom;
}

效果如下:

怎么用CSS繪制各種形狀

變形效果會(huì)讓這個(gè)元素以它自身的中心線為軸進(jìn)行空間上的旋轉(zhuǎn),這會(huì)讓它的尺寸很難控制,解決辦法可以設(shè)置transform-origin:bottom;,當(dāng)它在3D空間中旋轉(zhuǎn)時(shí),把它的底邊固定。固定底邊的同時(shí),高度的縮水會(huì)變得更加顯眼。為了解決這個(gè)問題,可以通過變形屬性(scaleY())來改變它的尺寸。

同樣的方法可以實(shí)現(xiàn)下面這種tab布局:

怎么用CSS繪制各種形狀

具體代碼如下:

nav > a {position: relative;display: inline-block;padding: .3em 1em 0;
}nav > a::before {content: '';position: absolute;top: 0; right: 0; bottom: 0; left: 0;z-index: -1;background: #ccc;background-image: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,0));border: 1px solid rgba(0,0,0,.4);border-bottom: none;border-radius: .5em .5em 0 0;box-shadow: 0 .15em white inset;transform: perspective(.5em) rotateX(5deg);transform-origin: bottom;
}

通過把transform-origin改成bottom left或bottom right,就可以立即得到左側(cè)傾斜或右側(cè)傾斜的標(biāo)簽頁。

這個(gè)方法的缺點(diǎn)是:斜邊的角度依賴于元素的寬度。不過,對于寬度變化不大的多個(gè)元素(比如導(dǎo)航菜單)來說,這個(gè)方法還是非常管用的。

簡單的餅圖的繪制

思路是把圓形的左右兩部分指定為上述兩種顏色,然后用偽元素覆蓋上去,通過旋轉(zhuǎn)來決定露出多大的扇區(qū)。具體的代碼如下:

.pie {width: 100px;height: 100px;border-radius: 50%;background: yellowgreen;background-image: linear-gradient(to right, transparent 50%, #655 0);.pie::before {
    content: '';display: block;margin-left: 50%;height: 100%;border-radius: 0 100% 100% 0 / 50%;background-color: inherit;transform-origin: left;
}

實(shí)現(xiàn)的效果如下:

怎么用CSS繪制各種形狀

這種方式還支持動(dòng)畫,就可以用CSS動(dòng)畫來實(shí)現(xiàn)一個(gè)餅圖從0 變化到100% 的動(dòng)畫,從而得到一個(gè)炫酷的進(jìn)度指示器:

@keyframes spin {to { transform: rotate(.5turn); }
}
@keyframes bg {
    50% { background: #655; }
}.pie::before {content: '';display: block;margin-left: 50%;height: 100%;border-radius: 0 100% 100% 0 / 50%;background-color: inherit;transform-origin: left;animation: spin 3s linear infinite, bg 6s step-end infinite;
}

生成多個(gè)不同比率的靜態(tài)餅圖的辦法,可以通過上面的那個(gè)動(dòng)畫的實(shí)現(xiàn),需要設(shè)置動(dòng)畫處于暫停狀態(tài),然后設(shè)置負(fù)的動(dòng)畫延時(shí)直接跳轉(zhuǎn)到動(dòng)畫中的任意時(shí)間點(diǎn), 最終實(shí)現(xiàn)的代碼如下:

<div class="pie" style="animation-delay: -20s"><span>20</span></div><div class="pie" style="animation-delay: -60s"><span>60</span></div>
.pie{position: relative;width: 100px;height: 100px;line-height: 100px;border-radius: 50%;background: yellowgreen;background-image: linear-gradient(to right, transparent 50%, #655 0);color: #000;text-align: center;
}

@keyframes spin {to { transform: rotate(.5turn); }
}
@keyframes bg {
    50% { background: #655; }
}.pie::before {content: '';position: absolute;top: 0; left: 50%;width: 50%; height: 100%;border-radius: 0 100% 100% 0 / 50%;background-color: inherit;transform-origin: left;animation: spin 50s linear infinite, bg 100s step-end infinite;animation-play-state: paused;animation-delay: inherit;
}.pie span {position: relative;z-index: 10;
}

效果如下:

怎么用CSS繪制各種形狀

用SVG 解決方案

<svg viewBox="0 0 32 32"><circle r="16" cx="16" cy="16" /></svg>
svg {width: 100px; height: 100px;transform: rotate(-90deg);background: yellowgreen;border-radius: 50%;
}circle {fill: yellowgreen;stroke: #655;stroke-width: 32;stroke-dasharray: 38 100; /* 可得到比率為38%的扇區(qū) */}

讓餅圖的周長***接近100,就可以直接把比率的百分比值指定為strokedasharray的長度,不需要做任何計(jì)算了。因?yàn)橹荛L是2&pi;r,半徑就是100/22&pi;  &asymp;  15.915,最終把這個(gè)值取整為16。在SVG的viewBox屬性中指定其尺寸,而不再使用width和height屬性,這樣就可以讓它自動(dòng)適應(yīng)容器的大小了。

SVG的優(yōu)點(diǎn)是?增加第三種顏色是非常容易的,并且可以用內(nèi)聯(lián)樣式來指定顏色。

以上是“怎么用CSS繪制各種形狀”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞標(biāo)題:怎么用CSS繪制各種形狀
URL標(biāo)題:http://aaarwkj.com/article8/pccsop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、定制網(wǎng)站虛擬主機(jī)、ChatGPT、面包屑導(dǎo)航、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
麻豆视传媒短视频网站免费| 日本激情人妻一区二区| 深夜福利在线观看97| 国产精品三级国产精品高| 国欧美一区二区三区| 成年人免费观看黄色片| 亚洲视频在线视频看视频在线| 午夜精品国产日韩欧美在线 | 国产丝袜在线精品丝袜不卡| 插美女逼免费视频导航| 在线亚洲精品一区二区| 丰满少妇诱惑在线观看| 国产日韩精品综合一区| 亚洲精品一区二区三区三州| 欧美日韩专区一区二区三区 | 国产精品六区久久综合亚洲av| 国产精品毛片一区内射| 欧美伦理片三级在线观看| 日韩欧美一区二区中文字幕视频| 99久久久国产精品日本久久区一| 日韩欧美一级性生活片| 99热免费精品在线观看| 亚洲综合久久精品少妇av| 欧美日韩亚洲视频二区| 黄色录像一级大片中国的| 手机不卡高清播放一区二区| 亚洲成年人黄片在线播放| 欧美高清视频免费播放| 成人av在线天堂一区二区三区| 清纯唯美校园春色亚洲激情| 97视频在线观看观看| 国产精品国产三级国产专播精品 | 日韩中文字幕在线二区| 国产一区二区精品小视频| 国产一区二区精品不卡| 亚洲中少妇久久中文字幕| 国产怡红院在线视频观看| 亚洲成av人的天堂在线观看女人| 国产精品久久久久精品综合| 久久国产精品一二三区| 日本一区二区三区精彩视频|