当前位置: 首页 > 面试题库 >

这个CSS如何产生一个圆?

钱言
2023-03-14
问题内容

This is the CSS:

div {
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}

How does it produce the circle below?

假设,如果矩形的宽度为180像素,高度为180像素,则它将矩形变得越来越小,也就是说,如果半径大小增加,矩形几乎会消失。

那么,如何将180像素的边界height/width-> 0px变成半径为180像素的圆?


问题答案:

高度/宽度-> 0px的180像素边框如何变成半径为180像素的圆?

让我们将其重新表述为两个问题:

在哪里width和height实际应用?让我们看一下一个典型盒子的区域(source):

在height和width只在内容应用,如果正确的盒模型被使用(没有怪癖模式,没有旧的Internet Explorer)。

在哪里border-radius申请?该border-radius应用在边框边缘。如果既没有填充也没有边框,它将直接影响您的内容边缘,这就是您的第三个示例。

这对我们的边界半径/圆意味着什么?
这意味着您的CSS规则会导致一个仅包含边框的框。您的规则规定,该边框的每一边最大宽度应为180像素,而另一方面,其最大半径应相同:

范例图片

在图片中,元素的实际内容(小黑点)确实不存在。如果您不应用任何border-radius内容,则最终会出现绿色框。该border-radius给你的蓝色圆圈。

如果border-radius 仅将两个角应用于两个角,将更容易理解:

#silly-circle{
    width:0; height:0;
    border: 180px solid red;
    border-top-left-radius: 180px;
    border-top-right-radius: 180px;
}

因为在您的示例中,所有角/边界的大小和半径都相等,所以您得到了一个圆。

示威

请打开下面的演示,演示如何border-radius影响边框(以内部蓝色框为内容框,以内部黑色框为填充框,以空白为填充框,以红色大框为框,边界)。内部框和红色边框之间的交点通常会影响内容边缘。

var all = $('#TopLeft, #TopRight, #BottomRight, #BottomLeft');



all.on('change keyup', function() {

  $('#box').css('border' + this.id + 'Radius', (this.value || 0) + "%");

  $('#' + this.id + 'Text').val(this.value + "%");

});



$('#total').on('change keyup', function() {

  $('#box').css('borderRadius', (this.value || 0) + "%");

  $('#' + this.id + 'Text').val(this.value + "%");

  all.val(this.value);

  all.each(function(){$('#' + this.id + 'Text').val(this.value + "%");})

});


#box {

  margin:auto;

  width: 32px;

  height: 32px;

  border: 100px solid red;

  padding: 32px;

  transition: border-radius 1s ease;

  -moz-transition: border-radius 1s ease;

  -webkit-transition: border-radius 1s ease;

  -o-transition: border-radius 1s ease;

  -ms-transition: border-radius 1s ease;

}

#chooser{margin:auto;}

#innerBox {

  width: 100%;

  height: 100%;

  border: 1px solid blue;

}


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="box">

  <div id="innerBox"></div>

</div>

<table id="chooser">

  <tr>

    <td><label for="total">Total</label></td>

    <td><input id="total" value="0" type="range" min="0" max="100" step="1" /></td>

    <td><input readonly id="totalText" value="0" type="text" /></td>

  </tr>

  <tr>

    <td><label for="TopLeft">Top-Left</label></td>

    <td><input id="TopLeft" value="0" type="range" min="0" max="100" step="1" /></td>

    <td><input readonly id="TopLeftText" value="0" type="text" /></td>

  </tr>

  <tr>

    <td><label for="TopRight">Top right</label></td>

    <td><input id="TopRight" value="0" type="range" min="0" max="100" step="1" /></td>

    <td><input readonly id="TopRightText" value="0" type="text" /></td>

  </tr>

  <tr>

    <td><label for="BottomRight">Bottom right</label></td>

    <td><input id="BottomRight" value="0" type="range" min="0" max="100" step="1" /></td>

    <td><input readonly id="BottomRightText" value="0" type="text" /></td>

  </tr>

  <tr>

    <td><label for="BottomLeft">Bottom left</label></td>

    <td><input id="BottomLeft" value="0" type="range" min="0" max="100" step="1" /></td>

    <td><input readonly id="BottomLeftText" value="0" type="text" /></td>

  </tr>

  <caption><code>border-radius</code> values. All values are in percent.</caption>

</table>

<p>This demo uses a box with a <code>width/height</code> of 32px, a <code>padding</code> of 32px, and a <code>border</code> of 100px.</p>


 类似资料:
  • 问题内容: 即使未对哈希集进行排序,以下代码也会产生输出。 这是为什么? 问题答案: 编辑:从Java 8及更高版本开始,以下内容不再适用。这证明您不应该依赖未记录的Java行为。 此行为是由几个单独的原因引起的: 整数对自己散列 在Java中,s和s由数组备份 它们还使用较高的位修改哈希,以修改较低的位;如果哈希值在0..15范围内,则不会被修改 对象运行的存储桶取决于修改后的哈希的低位 在地图

  • 问题内容: 所以,这就是我正在做的: 我有一张桌子,上面放着所有的桌子。 但是在一个特殊的场合,我希望一个特定的对象在各个方向都有,我将其设置为。 显然,我将CSS样式依次放在一个外部文件中。 但是渲染的CSS仅具有,并且似乎已被覆盖! 请说明: 这是怎么发生的以及为什么发生? 我应该如何安排这些规则来解决我的问题(除了内联样式)? 编辑:我在表中删除之前。我从来没有使用过它,我只是在这里提到它以

  • 我有三根线。线程1(T1)是生成器,它生成数据。线程2和线程3(T2和T3)分别等待T1的数据在单独的循环中处理。我正在考虑在线程之间共享BlockingQueue,并通过调用“Take”让T2和T3等待。

  • 当我发现这个奇怪的东西时,我正在玩JSX。使用以下JSX: 会产生正确的结果: 但我想在引号周围添加双引号,因此我尝试: 令我惊讶的是,它给出了正确的输出: 我希望得到类似的输出,因为它是字符串文字: 既然在字符串文本中,它为什么不按字面意思告诉我?这是巴贝尔的错误吗? 注意:这是一个自我提问和回答