Як цей CSS створює коло?


206

Це CSS:

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

Як воно виробляє коло нижче?

Введіть тут опис зображення

Припустимо, якщо ширина прямокутника становить 180 пікселів, а висота - 180 пікселів, то це буде виглядати так:

Введіть тут опис зображення

Після застосування радіусу кордону в 30 пікселів це буде виглядати так:

Введіть тут опис зображення

Прямокутник стає меншим, тобто майже зникає, якщо збільшується розмір радіуса.

Отже, як межа з 180 пікселів з height/width-> 0pxколом стає колом із радіусом 180 пікселів?


14
Це об'єкт 0x0 з облямівкою 180 пікселів навколо нього, що має закруглені кути. Отже, закруглені кути - це квадрати кола.
Каз

У мене в думці дурне питання, чому ви хочете зробити circleз кордоном ??? ми можемо легко зробити circleз widthі heightтак , чому ми робимо зborder
механіком

7
FYI для створення кола використовуйте <code> радіус межі: 50% </code> - полегшує регулювання просто ширини / висоти при правильному розташуванні макета.
Девід Гілбертсон

Так, пані, це математика
Медет Тлейкабілулі

Відповіді:


372

Як межа з 180 пікселів з висотою / шириною> 0 пікс стає колом із радіусом 180 пікселів?

Давайте переформулюємо це у два питання:

Де widthі як heightнасправді застосовуватись?

Давайте подивимося на області типового поля ( джерела ):

W3C: зони типового поля

Застосовується heightта widthзастосовується лише до вмісту, якщо використовується правильна модель вікна (немає режиму примх, немає старого Internet Explorer).

Куди 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впливає кордон (подумайте про внутрішню синю рамку як поле вмісту, про внутрішню чорну облямівку як облямівку, про порожній простір як прокладку та гігантську червону облямівку як, ну, кордон). Перехрестя між внутрішньою рамкою та червоною облямівкою зазвичай впливає на край вмісту.


Я не думаю, що css3-фон не містить посилань на css3-box (css3-box очікує на перезапис).
BoltClock

@BoltClock: Я думав, що css3-box визначить краї . У вступі є лише посилання на css2.1-box (ненормативне), і дане зображення також є, тому css3-box насправді не потрібно розуміти border-radius(яких змін очікувати в переписанні css3- ящик?).
Зета,

@Zeta У мене на думці питання, чому ви хочете зробити circleз кордоном ??? ми можемо легко зробити circleз widthі heightтак , чому ми робимо зborder
механіком

1
@Sarfaraz: Погляньте на питання ОП: "Отже, як межа з 180px з height/width-> 0pxстає колом із радіусом 180px?" . Я просто відповів на питання. Є й інші способи створення кола, але ОП цікавило лише те, як працює цей конкретний метод.
Зета

@Zeta: Я не впевнений, що саме буде змінено, але враховуючи, що WD не оновлювався протягом 6 років, я підозрюю, що це буде багато. Я знаю, що розділ 11 ( overflowсімейство властивостей) тепер живе у власному модулі css-overflow-3, але це ще не відображено в ED. Ви побачите багато питань в ЕД, але я думаю, що це не вичерпний список: dev.w3.org/csswg/css3-box
BoltClock

94

Демо

Давайте розглянемо питання по-іншому за допомогою цієї демонстрації малюнків:

Подивимось спочатку, як виробляється радіус кордону?

Для отримання радіусу потрібно дві сторони його межі. Якщо встановити радіус кордону в 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;
}

Введіть тут опис зображення

Чому на всі сторони потрібно застосувати лише половину площі?

Тому що всі кути повинні встановлювати значення радіусу однаково.

Займаючи рівні частини своєї межі, він утворює коло.


7
Насправді нинішня версія цієї відповіді наближає її до небагато. Питання просто в тому, "як ця CSS створює коло", а не "як працює радіус кордону взагалі", тож при технічній коректності - це небагато на багато. Також ви можете переформатувати питання і ввести фактичний код у середовище коду.
Зета

3

Межі - це зовнішня скринька будь-якого вмісту, і якщо ви накладете на неї радіус, він просто створить круговий край.


3

Я думаю, що він спочатку створює прямокутник з, height and width = 180pxа потім робить криву із заданим радіусом, як 30pxз кожним кутом. Так воно встановлюється borderіз заданим radius.


1

І те .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;
}

9
Так? "Як працює .a?" "Ось порівняння між .a та .b" Я не впевнений, що ви намагаєтесь сказати тут.
BoltClock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.