Разница между контуром и границей


195

Кто-нибудь знает о какой-либо разнице между свойствами 'border' и 'outline' в CSS? Если нет никакой разницы, то почему есть два свойства для одной и той же вещи?

Ответы:


199

От: http://webdesign.about.com/od/advancedcss/a/outline_style.htm

Свойство CSS CSS - это запутанное свойство. Когда вы впервые узнаете об этом, трудно понять, как это даже отдаленно отличается от свойства border. W3C объясняет это тем, что имеет следующие отличия:

1. Контуры не занимают места.

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


1
Ссылка объяснила это. Спасибо :)
Kshitij Saxena -KJ-

2
@Manu, кажется, контур рисуется внутри элемента, а границы появляются за его пределами.
Ман

51

В дополнение к некоторым другим ответам ... вот еще несколько различий, которые я могу придумать:

1) Закругленные углы

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

FIDDLE

(Примечание: хотя у firefox есть -moz-outline-radiusсвойство, которое позволяет скруглять углы на контуре ... это свойство не определено ни в одном стандарте CSS и не поддерживается другими браузерами ( источник ))

2) Укладка только на одну сторону

граница имеет свойства стиля каждой стороны с border-top:, и border-left:т.д.

контур не может этого сделать. Там нет контура сверху и т. Д. Это все или ничего. (см. этот пост )

3) смещение

outline поддерживает смещение с помощью свойства outline-offset . граница не

FIDDLE

Примечание. Поддерживаются все основные браузеры, outline-offsetкроме Internet Explorer.


Да, я понимаю, что вы говорите, я пытался изменить радиус границы моей кнопки, но теперь мой контур на фокусе не оборачивается вокруг кнопки.
Радтек

1
@ Данилд, хотя технически все, что ты говоришь, правильно, дух вопроса был другим. Зачем наброски, когда у нас уже есть граница. И ответ - набросок выпадает за рамки модели.
0

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

1
Значит ли это, что outlinesбыстрее рендерить, чем границы?
Уткарш Синха

38

В дополнение к другим ответам, схемы обычно используются для отладки. В Opera есть несколько хороших пользовательских стилей CSS, которые используют свойство outline, чтобы показать вам, где находятся все элементы в документе.

Если вы пытаетесь выяснить, почему элемент не появляется там, где вы ожидали, или в ожидаемом размере, добавьте несколько контуров и посмотрите, где находятся эти элементы.

Как уже упоминалось, контуры не занимают места. Когда вы добавляете границу, общая ширина / высота элемента в документе увеличивается, но этого не происходит с контуром. Также вы не можете устанавливать контуры на определенных сторонах, таких как границы; это все или ничего.


17

tldr;

W3C объясняет это тем, что имеет следующие отличия:

  • Контуры не занимают места.
  • Контуры могут быть не прямоугольными.

Источник

Схема должна быть использована для доступности

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

Если вы должны удалить его, может быть, лучше предложить альтернативный стиль:

Я видел довольно много советов о том, как убрать индикатор фокуса, используя контур: нет или контур: 0. Пожалуйста, не делайте этого, если только вы не замените контур чем-то другим, что позволяет легко увидеть, какой элемент имеет фокус клавиатуры. Удаление визуального индикатора фокуса клавиатуры даст людям, которые полагаются на навигацию с помощью клавиатуры, очень сложную навигацию и использование вашего сайта.

Источник: «Не удаляйте контур из элементов управления ссылками и формами», ул. Береа, 365


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


8

Практическое использование набросков касается прозрачности. Если у вас есть родительский элемент с фоном, но вы хотите, чтобы граница дочернего элемента была прозрачной, чтобы фон родительского элемента просвечивал, вы должны использовать «контур» вместо «граница». Хотя граница может быть прозрачной, на ней будет отображаться фон ребенка, а не родитель.

Другими словами, этот параметр создал следующий эффект:

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

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


2
Не вся история, граница также может иметь тот же эффект, если вы добавите background-clip: padding-box;в свой стиль .. :)
Dennis98

4

С сайта школы W3

В CSS пограничные свойства позволяют определить стиль и цвет границы элемента.

План является линия , которая рисуется вокруг элемента (за пределами границ) , чтобы сделать элемент «выделиться».

Сокращенное свойство структуры устанавливает все свойства структуры в одном объявлении.

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

Если одно из указанных выше значений отсутствует, например, "outline: solid # ff0000;", будет добавлено значение по умолчанию для отсутствующего свойства, если оно есть.

Проверьте здесь для получения дополнительной информации: http://webdesign.about.com/od/advancedcss/a/outline_style.htm


4

Немного старый вопрос, но стоит упомянуть об ошибке рендеринга в Firefox (все еще присутствующей на январь '13), когда контур будет визуализироваться снаружи всех дочерних элементов, даже если они переполняют своих родителей (через отрицательные поля, box-shadows) , и т.д.)

Вы можете исправить это с помощью:

.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 коробку с контуром 3px, который ничего не покрывает
Питер Р

3

Стоит также отметить, что контур W3C является границей IE, поскольку IE не реализует блочную модель W3C.

В блочной модели w3c граница не зависит от ширины и высоты элемента. В IE это включено.


Это не верно для IE10. - И кажется, что вы смешиваете модели размеров коробки и тот факт, что контуры вообще не занимают места, независимо от выбранной модели.
Роберт Симер

1

Я сделал небольшой кусочек кода CSS / HTML, чтобы увидеть разницу между ними.

outlineЛучше включать потенциальные переполненные дочерние элементы, особенно во встроенный контейнер.

borderгораздо более приспособлен для блочных элементов.

Скрипка для вас, сэр!


1

Свойство outline в CSS рисует линию вокруг внешней части элемента. Это похоже на границу, за исключением того, что:

  • Это всегда идет вокруг всех сторон, вы не можете указать конкретный
  • стороны Он не является частью блочной модели, поэтому он не повлияет на
    положение элемента или соседних элементов.

Источник: https://css-tricks.com/almanac/properties/o/outline/


1

В качестве практического примера использования «контура», слабая пунктирная граница, которая следует за фокусом системы на веб-странице (например, если вы переходите по ссылкам), может управляться с помощью свойства outline (по крайней мере, я знаю, что это возможно в 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 также использует что-то вроде контура "под капотом" при выделении элементов для проверки в режиме "выбор". Это хорошо показывает тот факт, что «контур» не занимает места.


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

Это (сейчас довольно дискредитированный по той же причине, о которой вы упомянули) метод Фарка, который был адаптацией Fahrner Image Replacement . Я просто использовал это как быстрый способ демонстрации практического применения того, почему кто-то может захотеть изменить схему фокуса :)
Matt Sach

1

Подумайте о контуре как о границе, которую проектор рисует вне чего-либо, поскольку граница - это реальный объект вокруг этой вещи.
проекция может легко перекрываться, но граница не позволяет вам пройти.
в некоторых случаях, когда я использую grid+%width, border изменяет масштабирование порта представления, например, 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.