如何使用 css 画一个半圆呢?介绍三种方法
border-radius
boder-radius 属性也支持单边设置弧度,不同的弧度可以绘制不同的图形,今天来画一个半圆
直接上代码:
1 | <div id="half_circle"></div> |
1 | #half_circle { |
border-radius 的值顺序是左上、右上、右下、左下顺时针,盒子的宽高要求是 1:2 或者 2:1,border-radius 值不能是百分比,应该与短边一致
clip
css3 中的 clip 属性可以剪裁绝对定位元素,画半圆的思想就是先画一个圆,然后用 clip 剪切掉一半
看代码:
1 | <div class="half_circle"></div> |
1 | .half_circle { |
clip 唯一合法的形状值是:rect (top, right, bottom, left)
线性渐变
思想还是先画一个圆,然后利用背景线性渐变展示一半
代码:
1 | <div class="half_circle"></div> |
1 | .half_circle { |
以上,有其他方法再补充~
实现一个环形进度条
遇到一个需求,需要实现一个环形进度条,下面是一种方法
环形进度条
实现思路:背景画一个圆形,在圆形上左右两边各覆盖一个半圆,顺时针旋转右边的半圆直至180deg,此时右边的半圆转到了左边,左右两个半圆完全重叠,下一步恢复右边半圆到初始位置,且背景色设置为与背景圆形一致,接着顺时针旋转左边半圆180deg(因为左边半圆渲染层级在右半圆的下方),即可完成一个完整的旋转进度,在上方盖一个同心小圆即可实现环形进度条的效果。
层级旋转效果:1
2
3
4
5<div class="block">
<div class="left"></div>
<div class="right"></div>
<div class="circle"></div>
</div>
1 | .block { |
1 | let blockEl = document.querySelector('.block'); |
完整实现:1
2
3
4
5<div class="block">
<div class="left"></div>
<div class="right"></div>
<div class="circle"></div>
</div>
1 | .block { |
1 | let leftEl = document.querySelector('.left'); |
中间透明的环形进度条
又想,如果要求中间带透明度的或者中间完全透明的环形进度条怎么实现呢?
稍微调整一下,将半圆用border显示,底层背景用内阴影shadow表示,即可实现效果
代码:1
2
3
4
5<div class="block">
<div class="left"></div>
<div class="right"></div>
<div class="circle"></div>
</div>
1 | body { |
1 | let leftEl = document.querySelector('.left'); |
以上~