Кто-нибудь знает о какой-либо разнице между свойствами 'border' и 'outline' в CSS? Если нет никакой разницы, то почему есть два свойства для одной и той же вещи?
195
От: http://webdesign.about.com/od/advancedcss/a/outline_style.htm
Свойство CSS CSS - это запутанное свойство. Когда вы впервые узнаете об этом, трудно понять, как это даже отдаленно отличается от свойства border. W3C объясняет это тем, что имеет следующие отличия:
1. Контуры не занимают места.
2. Планы могут быть не прямоугольными.
В дополнение к некоторым другим ответам ... вот еще несколько различий, которые я могу придумать:
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.источник
outlines
быстрее рендерить, чем границы?В дополнение к другим ответам, схемы обычно используются для отладки. В Opera есть несколько хороших пользовательских стилей CSS, которые используют свойство outline, чтобы показать вам, где находятся все элементы в документе.
Если вы пытаетесь выяснить, почему элемент не появляется там, где вы ожидали, или в ожидаемом размере, добавьте несколько контуров и посмотрите, где находятся эти элементы.
Как уже упоминалось, контуры не занимают места. Когда вы добавляете границу, общая ширина / высота элемента в документе увеличивается, но этого не происходит с контуром. Также вы не можете устанавливать контуры на определенных сторонах, таких как границы; это все или ничего.
источник
tldr;
W3C объясняет это тем, что имеет следующие отличия:
Источник
Схема должна быть использована для доступности
Следует также отметить, что основной целью плана является доступность. Установка его в общих чертах: ни один не следует избегать.
Если вы должны удалить его, может быть, лучше предложить альтернативный стиль:
Источник: «Не удаляйте контур из элементов управления ссылками и формами», ул. Береа, 365
Больше ресурсов
источник
Практическое использование набросков касается прозрачности. Если у вас есть родительский элемент с фоном, но вы хотите, чтобы граница дочернего элемента была прозрачной, чтобы фон родительского элемента просвечивал, вы должны использовать «контур» вместо «граница». Хотя граница может быть прозрачной, на ней будет отображаться фон ребенка, а не родитель.
Другими словами, этот параметр создал следующий эффект:
источник
background-clip: padding-box;
в свой стиль .. :)С сайта школы W3
В CSS пограничные свойства позволяют определить стиль и цвет границы элемента.
План является линия , которая рисуется вокруг элемента (за пределами границ) , чтобы сделать элемент «выделиться».
Сокращенное свойство структуры устанавливает все свойства структуры в одном объявлении.
Свойства, которые можно установить: (по порядку): контурный цвет, контурный стиль, контурная ширина.
Если одно из указанных выше значений отсутствует, например, "outline: solid # ff0000;", будет добавлено значение по умолчанию для отсутствующего свойства, если оно есть.
Проверьте здесь для получения дополнительной информации: http://webdesign.about.com/od/advancedcss/a/outline_style.htm
источник
Немного старый вопрос, но стоит упомянуть об ошибке рендеринга в Firefox (все еще присутствующей на январь '13), когда контур будет визуализироваться снаружи всех дочерних элементов, даже если они переполняют своих родителей (через отрицательные поля, box-shadows) , и т.д.)
Вы можете исправить это с помощью:
Очень жаль, что это все еще не исправлено. Я очень предпочитаю контуры во многих случаях, так как они не увеличивают размеры элемента, избавляя вас от необходимости учитывать ширину границы при настройке размеров элемента.
В конце концов, что проще?
Или:
источник
box-sizing
попробуйте! ссылкаСтоит также отметить, что контур W3C является границей IE, поскольку IE не реализует блочную модель W3C.
В блочной модели w3c граница не зависит от ширины и высоты элемента. В IE это включено.
источник
Я сделал небольшой кусочек кода CSS / HTML, чтобы увидеть разницу между ними.
outline
Лучше включать потенциальные переполненные дочерние элементы, особенно во встроенный контейнер.border
гораздо более приспособлен для блочных элементов.Скрипка для вас, сэр!
источник
Свойство outline в CSS рисует линию вокруг внешней части элемента. Это похоже на границу, за исключением того, что:
положение элемента или соседних элементов.
Источник: https://css-tricks.com/almanac/properties/o/outline/
источник
В качестве практического примера использования «контура», слабая пунктирная граница, которая следует за фокусом системы на веб-странице (например, если вы переходите по ссылкам), может управляться с помощью свойства outline (по крайней мере, я знаю, что это возможно в Firefox , не пробовал другие браузеры).
Обычный метод «замены изображения» заключается в использовании, например:
со следующим в CSS:
Проблема в том, что когда фокус достигает метки, контур отклоняется от 1000em влево. Контур может позволить вам отключить контур фокуса на таких элементах.
Я считаю, что панель инструментов разработчика IE также использует что-то вроде контура "под капотом" при выделении элементов для проверки в режиме "выбор". Это хорошо показывает тот факт, что «контур» не занимает места.
источник
Подумайте о контуре как о границе, которую проектор рисует вне чего-либо, поскольку граница - это реальный объект вокруг этой вещи.
проекция может легко перекрываться, но граница не позволяет вам пройти.
в некоторых случаях, когда я использую
grid+%width
, border изменяет масштабирование порта представления, например, div сwidth:100%
родительскимwidth:100px
элементом, полностью заполняет родительский, но когда я добавляюborder:solid 5px
к div, это уменьшает размер div, чтобы освободить место для границы (хотя это редко и обходной путь!),но с контуром у него нет этой проблемы, так как контур более виртуален: D это просто линия вне элемента, но проблема в том, что если вы не сделаете интервалы должным образом, он будет перекрываться с другим содержимым.
короче говоря:
нарисуйте плюсы:
не мешайте с пробелами и позициями
минусы:
высокая вероятность совпадения
источник
Различия между границей и контуром:
Граница является частью блочной модели, поэтому она учитывает размер элемента. Контур не является частью блочной модели, поэтому он не влияет на соседние элементы.
Демо-версия:
Другие отличия:
контур отображается за пределами границы.
Контуры не могут иметь закругленные углы; границы могут.
источник
Скопировано из W3Schools:
источник
outline
есть