14、簡單的餅圖

使用漸變背景和偽元素,可以實現(xiàn)簡單的餅圖。其原理是:將漸變背景作為底色,再將主元素一半大小的偽元素覆蓋在主元素之上,并遮蓋住漸變背景中顯示比率的顏色。主元素中背景色和比率色各占一半,利用偽元素的旋轉(zhuǎn)來顯示出表示比率部分的顏色。

#a{
    width: 200px;
    height: 200px;
    margin: 200px auto;
    border-radius: 50%;
    overflow: hidden;
    background-color: yellowgreen;
    background-image: linear-gradient(to right,transparent 50%,#655 0);
    position: relative;
}

加上覆蓋偽元素之后,虛線框表示偽元素的位置。將偽元素設(shè)置成剛好覆蓋比率色的半圓,并將旋轉(zhuǎn)對稱點設(shè)定為左邊的中點,這樣偽元素就會以主元素的圓心為對稱點進(jìn)行旋轉(zhuǎn)。

#a:after{
    content: "";
    display: block;
    outline: 1px dashed #333;
    border-radius: 0 100% 100% 0 / 50%;
    width: 50%;
    height: 100%;
    margin-left: 50%;
    background-color: inherit;
    transform-origin: left;
}

偽元素旋轉(zhuǎn)20%時。

transform: rotate(.2turn);

當(dāng)偽元素旋轉(zhuǎn)的度數(shù)大于50%時,比例圖會崩壞。



利用CSS3animation動畫可以解決這一問題,原理是:當(dāng)比率超過50%時,將偽元素的顏色改為比率色的顏色。一個從0到100%的比率動畫。

@keyframes ani {
    to { transform: rotate(.5turn) }
}
@keyframes bg {
    50% { background: #655 }
}
#a:after{
    /*outline: 1px dashed #333; */
    animation: ani 3s linear infinite,
               bg 6s step-end infinite; // step-end表示只顯示動畫每一步的結(jié)束幀,這里即讓偽元素的背景色在50%位置時發(fā)生突變。
}

利用以下簡單的HTML結(jié)構(gòu)顯示不同比率的靜態(tài)餅圖。

<div class="a">20%</div>
<div class="a">60%</div>

解決方案是讓偽元素的動畫靜止在相應(yīng)比率的位置,給動畫延遲animation-delay屬性設(shè)置一個負(fù)的值,表示動畫已經(jīng)播放了相應(yīng)的時間,將整個動畫的時間設(shè)置為100s,這樣60%的餅圖就是動畫靜止在已經(jīng)執(zhí)行了60s的位置。為了能根據(jù)結(jié)構(gòu)的內(nèi)容自動生成餅圖,要將animation-delay屬性設(shè)置在主元素的內(nèi)聯(lián)樣式中,因為偽元素?zé)o法設(shè)置內(nèi)聯(lián)樣式,所以在偽元素中使用animation-delay的繼承值。

<div class="a" style="animation-delay: -20s;">20%</div>
<div class="a" style="animation-delay: -60s;">60%</div>
#a:after{
    /*outline: 1px dashed #333; */
    animation: ani 50s linear infinite,
               bg 100s step-end infinite; 
animation-play-state: paused;
animation-delay: inherit;
}

利用JS獲取內(nèi)容的值,并將其轉(zhuǎn)化為內(nèi)聯(lián)樣式賦值給主元素,就可以實現(xiàn)任意比率的簡單餅圖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,438評論 0 11
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,119評論 0 2
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,753評論 0 7
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,362評論 4 61
  • “刺猬怎么變優(yōu)雅?這是電影《刺猬的優(yōu)雅》留給我們的疑惑,也是電影教給我們最大的收獲。 看門人勒妮是一個又老又胖的寡...
    行壹1閱讀 492評論 0 0

友情鏈接更多精彩內(nèi)容