Как этот CSS создает круг?
это CSS:
div {
width: 0;
height: 0;
border: 180px solid red;
border-radius: 180px;
}
как он производит круг ниже?
предположим, если ширина прямоугольника составляет 180 пикселей, а высота-180 пикселей, то он будет выглядеть так:
после применения границы радиуса 30 пикселей это будет выглядеть так:
прямоугольник становится меньше, то есть почти исчезнет, если размер радиуса увеличивается.
Итак, как же a граница 180 пикселей с height/width-> 0px
стать кругом с радиусом 180 пикселей?
5 ответов:
как граница 180 пикселей с высотой / шириной - > 0px становится кругом с радиусом 180 пикселей?
давайте переформулируем это в два вопроса:
где
width
иheight
на самом деле применить?давайте посмотрим на области типичной коробки (источник):
The
height
иwidth
применить только к содержимому, если используется правильная модель коробки (нет в режиме совместимости, ни старый Интернет Эксплорер).где
border-radius
применить?The
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>
давайте рассмотрим вопрос по-другому с этой демонстрационной картинке:
давайте сначала посмотрим, как создается радиус границы?
для получения радиуса требуется две стороны его границы. Если вы установите border-radius на 50 пикселей, то это займет 25 пикселей с одной стороны и 25 пикселей с другой стороны.
и с 25 пикселей с каждой стороны он будет производить, как это:
div{ width: 0px; height: 0px; border: 180px solid red; border-radius: 0 50px 0 0; }
теперь посмотрим, сколько это может занять максимум площади, чтобы применить на одном углу?
это может занять до 180 пикселей сверху и 180 пикселей справа. Тогда он будет производить вот так:
div{ width: 0px; height: 0px; border: 180px solid red; border-radius: 0 180px 0 0; }
и посмотрите, как это происходит, если мы устанавливаем неравное значение радиуса?
предположим, если вы применяете радиус границы только к двум углам неравномерно:
верхний правый угол до 180 пикселей
нижний правый угол до 100 пикселей
тогда это займет
вверху справа: 90 пикселей сверху и 90 пикселей справа
внизу справа: 50 пикселей справа и 50 пикселей снизу
затем он будет производить, как это
div{ width: 0px; height: 0px; border: 180px solid red; border-radius: 0 180px 100px 0; }
сколько максимум своей границы может он принять квадрата для того чтобы примениться на всех сторонах? И посмотрите, как он создает круг?
это может занять до половины размера границы, то есть 180 пикселей / 2 = 90 пикселей. Тогда бы получился такой круг
div{ width: 0px; height: 0px; border: 180px solid red; border-radius: 180px; }
почему это занимает только половину площади, чтобы применить со всех сторон?
потому что все углы должны установить их радиус значение одинаково.
принимая равные части своей границы, он создает круг.
границы-это внешняя коробка любого содержимого, и если вы примените радиус к ней, она просто создаст круговую кромку.
Я думаю, что он изначально создает прямоугольник с
height and width = 180px
а затем сделать кривую с заданным радиусом, как30px
С каждого угла. Так что он устанавливаетborder
Сradius
.
и
.a
и.b
даст идентичные результаты.вопрос: почему я использовал
width: 360px; height: 360px;
?А.
border: 180px solid red;
на.a
работы какborder-width: 180px 180px 180px 180px; /* Top Right Bottom Left */
.Надежда эта скрипка поможет вам понять концепцию.
.a{ width: 0; height: 0; border: 180px solid red; border-radius: 180px; } .b{ background:red; width: 360px; height: 360px; border-radius: 180px; }