Різниця між обрисами та кордоном


194

Хтось знає про різницю між властивостями "border" та "outline" у CSS? Якщо різниці немає, то чому існують дві властивості для однієї і тієї ж речі?

Відповіді:


199

Від: http://webdesign.about.com/od/advancedcss/a/outline_style.htm

Властивість контуру CSS є заплутаною властивістю. Коли ви вперше дізнаєтесь про це, важко зрозуміти, як воно навіть віддалено відрізняється від прикордонного майна. W3C пояснює, що він має такі відмінності:

1. Програми не займають місця.

2.Програми можуть бути не прямокутними.


1
Посилання це пояснило. Дякую :)
Kshitij Saxena -KJ-

2
@Manu, здається, контур намальований всередині елемента, тоді як межі з'являються поза ним.
Ман

51

Окрім деяких інших відповідей ... ось ще кілька відмінностей, про які я можу придумати:

1) Закруглені кути

borderпідтримує закруглені кути з border-radiusвластивістю. outlineне робить.

ПІДМОГА

(Примітка. Хоча Firefox має -moz-outline-radiusвластивість, яка дозволяє закруглені кути на контуру ... ця властивість не визначена в будь-якому стандарті CSS і не підтримується іншими браузерами ( джерело ))

2) Стилізація лише однієї сторони

межа має властивості стилю кожного боку з border-top:, і border-left:так далі

контур не може цього зробити. Немає контуру-зверху: тощо. Це все або нічого. (див. цю публікацію ТА )

3) зсув

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

ПІДМОГА

Примітка. Усі основні браузери підтримують, outline-offsetокрім Internet Explorer


Так, я бачу, що ви говорите, я намагався змінити радіус кордону своєї кнопки, але тепер мій контур фокусування не обертається навколо кнопки.
radtek

1
@Danield, але технічно все, що ти кажеш, правильно, дух питання був іншим. Навіщо окреслити, коли ми вже маємо кордон. І відповідь контур випадає за межі моделі коробки.
0fnt

2
@ user247077 - Я не згоден. Для ОП начебто контур і кордон здаються однаковими. Тому він хоче знати якомога більше відмінностей між ними. Деякі з інших відмінностей були розміщені в інших відповідях, тому я вирішив додати інших, які ще не були перелічені.
Даніельд

1
Чи означає outlinesце, що швидше передати, ніж межі?
Utkarsh Sinha

38

Крім інших відповідей, контури зазвичай використовуються для налагодження. Opera має кілька приємних стилів CSS для користувачів, які використовують властивість контуру, щоб показати вам, де всі елементи знаходяться в документі.

Якщо ви намагаєтесь з’ясувати, чому елемент не відображається там, де ви очікували, або в очікуваному розмірі, додайте кілька контурів і подивіться, де елементи.

Як вже було сказано, обриси не займають місця. Додаючи рамку, загальна ширина / висота елемента в документі збільшується, але це не відбувається з контуром. Крім того, ви не можете встановити контури на певних сторонах, таких як межі; це все або нічого.


17

tldr;

W3C пояснює, що він має такі відмінності:

  • Обриси не займають місця.
  • Обриси можуть бути не прямокутними.

Джерело

Контур слід використовувати для доступності

Слід також зазначити, що основною метою структури є доступність. Поставивши його окреслити: жодного не слід уникати.

Якщо потрібно видалити його, можливо, краща ідея запропонувати альтернативну стилізацію:

Я бачив досить багато порад щодо видалення індикатора фокусування за допомогою контуру: жодного або контуру: 0. Будь ласка, не робіть цього, якщо ви не заміните контур чимось іншим, що полегшує зрозуміти, який елемент має фокус на клавіатурі. Видалення візуального індикатора фокусування клавіатури дасть людям, які покладаються на навігацію на клавіатурі, дуже важко орієнтуватися та користуватися вашим сайтом.

Джерело: "Не знімайте контур із управління посиланнями та формами", вул. Береа 365


Більше ресурсів


8

Практичне використання структури стосується прозорості. Якщо у вас є батьківський елемент з фоном, але ви хочете, щоб межа дочірнього елемента була прозорою, щоб фоновий малюнок відображався, ви повинні використовувати "контур", а не "межу". Хоча рамка може бути прозорою, вона відображатиме походження дитини, а не батьківське.

Іншими словами, цей параметр створив такий ефект:

outline: 7px solid rgba(255, 255, 255, 0.2);

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


2
Не вся історія, кордон також може мати такий же ефект, якщо ви додасте background-clip: padding-box;до свого стилю .. :)
Dennis98

4

З сайту школи W3

В CSS прикордонні властивості дозволяють визначити стиль і колір межі елементу.

План є лінія , яка малюється навколо елемента (за межами кордонів) , щоб зробити елемент «виділитися».

Властивість скорочення контуру встановлює всі властивості контуру в одній декларації.

Властивості, які можна встановити, такі (по порядку): контурний колір, стиль контуру, ширина контуру.

Якщо одне з наведених вище значень відсутнє, наприклад, "контур: твердий # ff0000;", значення за замовчуванням для відсутнього властивості буде вставлено, якщо воно є.

Перегляньте тут для отримання додаткової інформації: http://webdesign.about.com/od/advancedcss/a/outline_style.htm


4

Трохи старе запитання, але варто згадати помилку візуалізації Firefox (все ще присутня станом на 13 січня), де контур відображатиметься назовні всіма дочірніми елементами, навіть якщо вони переповнюють батьків (через негативні поля, поле-тіні) тощо)

Ви можете виправити це за допомогою:

.container {
    position: relative;
}
.container:before {
   content: '';
   margin: 0;
   padding: 0;
   position: absolute;
   top: 0;
   left: 0;
   width: 100%;
   height: 100%;
   outline: 1px solid #ff0000;
}

Супер прикро, що це ще не виправлено. Я дуже віддаю перевагу контурам у багатьох випадках, оскільки вони не додають розмірів елемента, рятуючи вас від того, що завжди потрібно враховувати ширину меж при встановленні розмірів елемента.

Зрештою, що простіше?

.container {
    width: 960px;
    height: 300px;
    outline: 3px solid black;
}

Або:

.container {
    width: 954px;
    height: 294px;
    border: 3px solid black;
}

1
Якщо ви ще цього не зробили, box-sizingспробуйте! посилання
Брендан

Приклади в нижній частині цієї відповіді не дають однакових результатів. Перший дає коробку розміром 960 * 300 з контуром 3 пікселя, що покриває все, що знаходиться поза коробкою. Другий дає поле 954 * 294 з контуром 3 пікселя, що нічого не покриває
Петро R

3

Варто також зазначити, що контур W3C є межею IE, оскільки IE не реалізує модель коробки W3C.

У моделі коробки w3c рамка не включає ширину та висоту елемента. В IE це включно.


Це не вірно для IE10. - І, здається, ви змішуєте моделі розміру коробки і те, що контури взагалі не займають місця, незалежно від обраної моделі.
Роберт Сімер

1

Я зробив невеликий шматок css / html-коду, щоб побачити різницю між обома.

outlineкраще включити потенційні перелиті дочірні елементи, особливо в вбудований контейнер.

borderнабагато більше пристосований для елементів, що ведуть блок .

Загадка для вас, сер!


1

Властивість контуру в CSS малює лінію навколо зовнішньої сторони елемента. Це схоже на кордон за винятком того, що:

  • Це завжди обходиться з усіх боків, не можна конкретизувати конкретні
  • сторони Це не частина моделі коробки, тому це не вплине на
    положення елемента або сусідніх елементів

Джерело: https://css-tricks.com/almanac/properties/o/outline/


1

Як практичний приклад використання "контуру", слабкий пунктирний кордон, який слід за фокусом системи на веб-сторінці (наприклад, якщо ви переходите на посилання), можна керувати за допомогою властивості контуру (принаймні, я знаю, що це може бути у Firefox , не пробували інші браузери).

Поширеною технікою "заміни зображення" є використання, наприклад:

<div id="logo"><a href="/">Foo Widgets Ltd.</a></div>

із таким у CSS:

#logo
{
    background: url(/images/logo.png) center center no-repeat;
}
#logo a
{
    display: block;
    text-indent: -1000em;
}

Проблема полягає в тому, що, коли фокус досягає тегу, контур відхиляється 1000em зліва. Контур може дозволити вам вимкнути контури фокусу на таких елементах.

Я вважаю, що панель інструментів розробника IE також використовує щось на зразок контуру "під капотом", коли виділяє елементи для перевірки в режимі "вибору". Це добре показує той факт, що "контур" не займає місця.


Мені хотілося б знати, хто винайшов цю техніку заміни зображення і чому. Здається, його єдиною метою є зникнення тексту для всіх, у кого зображення відключені. Що не так з нормальним зображенням, з відповідним текстом alt?
Стюарт

Це (тепер досить дискредитований з тієї самої причини, який ви згадуєте) метод Фарка, який був адаптацією заміни Фарнера . Я просто використовував це як швидкий спосіб демонстрації практичного застосування того, чому хтось може захотіти змінити контур фокусу :)
Метт Сах

1

подумайте про контур як про межу, яку проектор малює поза чимось як рамку, - це фактичний об'єкт навколо цієї речі.
проекція може легко перекриватися, але межа не дозволить вам пройти.
в деяких випадках, коли я використовую grid+%width, межа буде змінювати масштабування на порт подання, наприклад, div з width:100%в батьківському з width:100pxзаповненням батьківського повністю, але коли я додаю border:solid 5pxдо div, це зробить div менше, щоб зробити місце для кордону (хоча це рідко і обхідна робота!),
але з контуром у неї немає цієї проблеми, оскільки контур більш віртуальний: D це лише рядок поза елементом, але проблема полягає в тому, що якщо ви не зробите належним чином інтервал, він би перекривався іншим вмістом.

коротше:
окреслити плюси:
він не возиться з проміжками та
мінусами позицій :
велика ймовірність перекриття


1

Відмінності між кордоном та контуром:

Бордюр є частиною моделі коробки, тому він рахується з розміром елемента. Контур не є частиною моделі коробки, тому він не впливає на елементи поблизу.

Демонстрація:

#border {
  border: 10px solid black;
}
#outline {
  outline: 10px solid black;
}
<html>
<body>
<span id="border">Border</span>Other text<br><br>
<span id="outline">Outline</span>Other text
</body>
</html>

Інші відмінності:
контур відображається за межами кордону.
Контури не можуть мати закруглені кути; кордони можуть.


-2

Скопійовано з W3Schools:

Визначення та використання

Контур - це лінія, яка промальована навколо елементів (поза межами), щоб зробити елемент «виділеним».


Це не пояснює різницю між двома, лише те, що outlineє
Каспар Лі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.