边界半径百分比(%)和像素(px)或em

web*_*iki 104 css css3 css-shapes

如果我对border-radius 使用像素或em值,则边缘半径始终为圆弧药丸形状,即使该值大于元素的最大边.

当我使用百分比时,边缘半径是椭圆形的,从元素每边的中间开始,形成椭圆形或椭圆形:

像素(px)边界半径百分比(%)border-radius

border-radius的像素值:

div {
   background: teal;
   border-radius: 999px;
   width: 230px;
   height: 100px;
   padding: 40px 10px;
   box-sizing: border-box;
   font-family: courier;
   color: #fff;
 }
Run Code Online (Sandbox Code Playgroud)
<div>border-radius:999px;</div>
Run Code Online (Sandbox Code Playgroud)

border-radius的百分比值:

div {
  background: teal;
  border-radius: 50%;
  width: 230px;
  height: 100px;
  padding:40px 10px;
  box-sizing:border-box;
  font-family:courier;
  color:#fff;
}
Run Code Online (Sandbox Code Playgroud)
<div>border-radius:50%;</div>
Run Code Online (Sandbox Code Playgroud)

为什么边界半径百分比的作用方式与使用像素值或em值设置的border-radius的作用方式相同?

web*_*iki 158

边界半径:

首先,您需要了解border-radius属性需要2个值.这些值是定义拐角形状的四分之一椭圆的X/Y轴上的半径.
如果仅设置了一个值,则第二个值等于第一个值.所以border-radius: x相当于border-radius:x/x;.

百分比值

参考W3C规范:CSS背景和边框模块级别3 border-radius属性这是我们可以阅读的有关百分比值的内容:

百分比:请参阅边框的相应尺寸.

因此border-radius:50%;,通过这种方式定义椭圆的raddi:

  • X轴上的半径是容器宽度的 50%
  • Y轴上的半径是容器高度的 50%

边界半径百分比(%)作为省略号

像素和其他单位

使用边框半径百分比以外的一个值(em,in,视口相关单位,cm ...)将始终生成具有相同X/Y半径的椭圆.换句话说,一个圆圈.

当你设置border-radius:999px;圆的半径应该是999px.但是当曲线重叠时应用另一个规则,将圆的半径减小到最小边的一半.所以在你的例子中,它等于元素高度的一半:50px.

边界半径(像素(px))形成药丸形状


对于此示例(使用固定大小的元素),您可以使用px和百分比获得相同的结果.作为元素是230px x 100px,border-radius: 50%;相当于border-radius:115px/50px;(两侧的50%):

div {
  display: inline-block;
  background: teal;
  width: 230px;
  height: 100px;
  padding: 40px 10px;
  box-sizing: border-box;
  font-family: courier;
  font-size: 0.8em;
  color: #fff;
}
.percent {
  border-radius: 50%;
}
.pixels {
  border-radius: 115px/50px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="percent">border-radius:50%;</div>
<div class="pixels">border-radius:115px/50px;</div>
Run Code Online (Sandbox Code Playgroud)

  • 但我可能不希望半圆形的结束.我希望能够指定x半径,例如,盒子宽度的10%和y半径等于x半径. (7认同)
  • 嘿,你做过这样的其他自我回复的帖子吗?我很感激阅读这些. (4认同)
  • 很好的答案.遗憾的是,百分比半径值是针对宽度和高度分别计算的.这意味着在不知道对象的纵横比的情况下,我无法获得与对象大小成比例的圆角.如果将百分比应用于较大的对象尺寸,这不是很好吗? (3认同)
  • 但实际上百分比的作用是:`border-radius:50%/ 100%`(在Chrome 60 + 61中测试) (3认同)
  • @ChrisDennis那不是真的.就像OP说的那样,你可以简单地使用`border-radius:999px;`.这样你就可以获得圆角并确保它们与你的元素一起缩放 (2认同)
  • @denns `border-radius: 50%/100%` 也适用于 Firefox!我在 Firefox 58 上测试过。 (2认同)

Ree*_*gag 8

一种让它正确缩放到视口大小,但在没有任何 js 的情况下保持圆角的方法是:

border-radius: 3vmin;
Run Code Online (Sandbox Code Playgroud)

那么它总是会缩放到最小尺寸,所以你永远不会有一个带有半圆形边的盒子,并且你不需要任何js来计算正确的百分比。

编辑:抱歉,忘记了vmin存在,所以将其更改为使用它。


Cyb*_*erJ 5

只需将第一个值除以所需的百分比即可。如果您希望边界半径为50%,请输入:

border-radius: 25%/50%; 
Run Code Online (Sandbox Code Playgroud)

或另一个例子:

border-radius: 15%/30%;
Run Code Online (Sandbox Code Playgroud)

您可以轻松地在js或SASS中进行数学运算。

  • 我不知道你一直在做什么样的数学,但这不仅仅是“数学”。它是边界半径的专门定义的简写,与算术除法完全无关。https://www.w3.org/TR/css-backgrounds-3/#border-radius (10认同)
  • 那不是宽度的25%和高度的50%吗?这与 X 和 Y 方向高度的 50% 不同。 (5认同)