純 Css 繪製扇形

閱讀此文需具有基本數學知識:圓心角、弧度制、三角函數。css

爲實現以下效果嘔心瀝血:html

固然你能夠擁抱 Svg...在此分享如何純 Css 打造圓環進度條,只需三步!git

此物乃 2 + 1 夾心餅乾,藍綠色部分爲果醬。顯而易見餅乾爲兩個削成了圓形的 div ,咱們重點演示果醬是怎麼製做的:github

如圖所示,大扇形由 6 個小扇形構成,每一小扇形佔整個圓餅的 1/15 ,大扇形佔整個圓餅的 6/15 。咱們只需構造一個扇形單元,將其複製 6 份後旋轉相應角度鏈接至一塊兒便可。web

如何構造扇形?用三角形假裝...segmentfault

三角形的寬高如何計算?假定圓半徑 $radius 爲 100px,等分數 $count 爲 15。則小扇形的圓心角爲 360deg / 15 ,三角形的高爲 100px,寬爲 2 × 100px × tan(360deg / 15 / 2) 。其中 360deg / 15 / 2 轉化弧度製爲 PI / 15 (PI == 360deg / 2)。sass

span {
    width: 0;
    height: 0;
    border: $radius solid transparent;
    $borderWidth: tan(pi() / $count) * $radius;
    border-left-width: $borderWidth;
    border-right-width: $borderWidth;
}

數學欠佳的同窗請自行科普...bash

對於 $count12 的狀況需特殊處理,由於 tan(PI)tan(PI / 2) 爲無窮值,不瞭解的同窗請研究正切函數圖像:函數

相關代碼(其中 $diameter = 2 × $radius 爲圓直徑):post

span {
    @if $count == 1 {
        width: $diameter;
        height: $diameter;
    } @else if $count == 2 {
        width: $diameter;
        height: $radius;
    } @else {
        width: 0;
        height: 0;
        border: $radius solid transparent;
        $borderWidth: tan(pi() / $count) * $radius;
        border-left-width: $borderWidth;
        border-right-width: $borderWidth;
    }
}

最後,複製並逐一旋轉扇形單元:

@for $index from 0 to $count {
    span:nth-child(#{$index + 1}) {
        $transform: translate(-50%, 0) rotate(360deg / $count / 2 + 360deg * $index / $count);
        $origin: if($count == 2, bottom, center);
        -webkit-transform: $transform;
                transform: $transform;
        -webkit-transform-origin: $origin;
                transform-origin: $origin;
    }
}

果醬製做完畢,其它點綴請自行添加嘍...本例完整代碼在此


2017/11/14 續更

因爲本例引入了三角函數等數學運算,使用 Sass 預編譯。未安裝 Sass 的同窗可下載經編譯的 源碼 開啓 sector.html 查看效果。

安裝 Sass 請參考 https://segmentfault.com/a/11... 文章末尾的安裝教程。

本例調試方法:

cd sector
sass --watch style.scss:style.css --debug-info

做者:呆戀小喵

個人後花園:https://sunmengyuan.github.io...

個人 github:https://github.com/sunmengyuan

原文連接:https://sunmengyuan.github.io...

相關文章
相關標籤/搜索