今天本打算要完成一个相似于进度条的小组件, 原型是这样的(这里长200px, 高28px)css
我一看, 很简单嘛, 抛开那个数字1样式不谈, 总体父级样式就是一个左边半圆形, 右边带有弧度的div啊。
这个用css的border-radius就能够搞定了啊。 左边是圆角, 圆角50px啊, 右边是小圆角, 以往的div都是8px弧度的。 根据border-radius中角的顺序(以顺时针的方向解析,上左,上右,下右,下左), 设置border-radius: 50px 8px 8px 50px;就行了啊。 满心欢喜写好样式, 打开浏览器。浏览器
傻了, 不对啊, 我原觉得是这样的spa
实际上, 浏览器中是这样的3d
不对了啊, 右边的角度设置了啊, 怎么看起来跟没设置同样呢, 我把8改为了10px在试了下, 仍是差很少跟没设置同样的。code
8px按理说应该有明显的弧度了啊, 全设置成8px看看呢blog
对啊, 这是8px应该有的弧度, 为何改为左边写成50px就变样了呢, 难道跟50px有关?带着疑问, 我看了看百度。ip
百度说, 其实border-radius的完整写法(w3c)是 原型
border-radius: 1-4 length|% / 1-4 length|%;
平时咱们写的border-radius : 50px,其实完整的写法应该是:it
border-radius : 50px 50px 50px 50px / 50px 50px 50px 50px;
“/”前的四个数值表示圆角的水平半径,后面四个值表示圆角的垂直半径 class
每一个顺序一一对应 (水平半径:左上 右上 右下 左下)/(垂直半径:左上 右上 右下 左下),
什么是水平半径和垂直半径呢?
根据水平半径跟垂直半径的比值, 能够调整角的弧度, 二者半径相同, 就是个圆角。 这就是问什么我平时设置的角都是圆角的缘由, 由于我没有写完整过
例如 border-radius:10px 20px 30px 40px/40px 30px 20px 10px
就是这样的样子
再来回头看咱们以前的问题
咱们忽略了高度28px了啊. 这样算来, 咱们要设置右边是个半圆形, 只要水平跟垂直半径都是14px不就行了吗
border-radius: 14px 8px 8px 14px / 14px 8px 8px 14px;
这样,父级样式不就对了吗。
以前右边设置的8px圆角看起来没有效果, 可能跟50px比起来, 被等比例压缩了吧, 由于左边原本就高28px, 塞了个半径50px进去, 我算算(14 * 8 / 50 = 2.24), 就等于设置成了
border-radius: 14px 2.24px 2.24px 14px / 14px 2.24px 2.24px 14px;
之后写样式要小心了啊, 小问题也不小啊。