Какой из двух методов соответствует стандартам W3C? Оба ли они в разных браузерах ведут себя должным образом?
граница: нет;
граница: 0;
Какой из двух методов соответствует стандартам W3C? Оба ли они в разных браузерах ведут себя должным образом?
граница: нет;
граница: 0;
Оба варианта допустимы. Это ваш выбор.
Я предпочитаю border:0, потому что он короче; Мне так легче читать. Вы можете найти none более разборчивым. Мы живем в мире очень мощных постпроцессоров CSS, поэтому я рекомендую вам использовать все, что вы предпочитаете, а затем запускать его через компрессор. Здесь нет священной войны, за которую стоит сражаться, но Webpack → LESS → PostCSS → PurgeCSS - хороший стек 2020 года.
Тем не менее, если вы пишете от руки весь производственный CSS, я утверждаю - несмотря на ворчание в комментариях - не помешает учитывать пропускную способность. Использование border:0 само по себе сэкономит бесконечно малую часть полосы пропускания, но если вы подсчитываете каждый байт, вы сделаете свой веб-сайт быстрее.
Спецификации CSS2 находятся здесь. Они расширены в CSS3, но не имеют к этому никакого отношения.
'border'
Value: [ <border-width> || <border-style> || <'border-top-color'> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual
Computed value: see individual properties
Вы можете использовать любую комбинацию ширины, стиля и цвета.
Здесь 0 задает ширину, none стиль. У них одинаковый результат рендеринга: ничего не отображается.
border:none в чем-то лучше, но использовать это в своих рассуждениях неверно.
- person BlueRaja - Danny Pflughoeft; 08.02.2014
Они эквивалентны эффекту, указывая на разные ярлыки:
border: 0;
//short for..
border-width: 0;
И другие..
border: none;
//short for...
border-style: none;
Оба работают, просто выберите один и продолжайте :)
border: 0; является допустимым.
- person Ishmael; 27.05.2010
border: 0 НЕ является ярлыком для border-width: 0. Вместо этого краткая версия всегда устанавливает все три свойства: border-color, border-style и border-width.
- person Denilson Sá Maia; 01.08.2014
Как говорили другие, оба действительны и сделают свое дело. Я не уверен на 100%, что они идентичны. Если у вас происходит каскадирование стилей, теоретически они могут давать разные результаты, так как они эффективно переопределяют разные значения.
Например. Если вы установите "border: none;" а затем, позже, есть два разных стиля, которые переопределяют ширину и стиль границы, тогда один будет что-то делать, а другой - нет.
В следующем примере как в IE, так и в firefox первые два тестовых div не имеют границы. Однако вторые два отличаются тем, что первый div во втором блоке является простым, а второй div во втором блоке имеет пунктирную границу средней ширины.
Так что, хотя они оба действительны, вам может потребоваться следить за своими стилями, если они много каскадируются и тому подобное, как я думаю.
<html>
<head>
<style>
div {border: 1px solid black; margin: 1em;}
.zerotest div {border: 0;}
.nonetest div {border: none;}
div.setwidth {border-width: 3px;}
div.setstyle {border-style: dashed;}
</style>
</head>
<body>
<div class="zerotest">
<div class="setwidth">
"Border: 0" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: 0" and "border-style: dashed"
</div>
</div>
<div class="nonetest">
<div class="setwidth">
"Border: none" and "border-width: 3px"
</div>
<div class="setstyle">
"Border: none" and "border-style: dashed"
</div>
</div>
</body>
</html>
border: none вместо border: 0.
- person Kris Khaira; 27.06.2012
(примечание: этот ответ был обновлен 01.08.2014, чтобы сделать его более подробным, точным и добавить демоверсия)
Согласно спецификации W3C CSS2.1 ( «Пропущенным значениям присваиваются начальные значения»), следующие свойства эквивалентны:
border: hidden; border-style: hidden;
border-width: medium;
border-color: <the same as 'color' property>
border: none; border-style: none;
border-width: medium;
border-color: <the same as 'color' property>
border: 0; border-style: none;
border-width: 0;
border-color: <the same as 'color' property>
Если эти правила являются наиболее конкретными, применяемыми к границам элемента, то границы не будут отображаться ни из-за нулевой ширины, ни из-за стиля _2 _ / _ 3_. Итак, на первый взгляд, эти три правила выглядят эквивалентными. Однако в сочетании с другими правилами они ведут себя по-разному.
Когда таблица визуализируется с использованием border-collapse: collapse, каждая визуализированная граница используется совместно несколькими элементами (внутренние границы используются совместно с соседними ячейками; внешние границы используются совместно между ячейками и самой таблицей; но также строки, группы строк, столбцы и группы столбцов имеют общий доступ. границы). В спецификации определены некоторые правила разрешения пограничных конфликтов:
Границы с
border-styleизhiddenимеют приоритет над всеми другими конфликтующими границами. […]Границы со стилем
noneимеют самый низкий приоритет. […]Если ни один из стилей не
hiddenи хотя бы один из них неnone, то узкие границы отбрасываются в пользу более широких. […]Если стили границ различаются только цветом, […]
Таким образом, в контексте таблицы border: hidden (или border-style: hidden) будет иметь наивысший приоритет и сделает общую границу скрытой, несмотря ни на что.
На другом конце приоритета border: none (или border-style: none) имеют самый низкий приоритет, за которым следует граница нулевой ширины (потому что это самая узкая граница). Это означает, что вычисленное значение border-style: none и вычисленное значение border-width: 0 по существу одинаковы.
Поскольку none и 0 влияют на разные свойства (border-style и border-width), они будут вести себя по-разному, когда более конкретное правило определяет только стиль или только ширину. См. Пример в ответе Криса.
Хотите увидеть все эти случаи на одной странице? Откройте живую демонстрацию!
С использованием
border: none;
не работает в некоторых версиях IE. IE9 прекрасен, но в предыдущих версиях он отображал границу, даже если стиль был «none». Я испытал это при использовании таблицы стилей печати, где мне не нужны границы в полях ввода.
border: 0;
похоже, нормально работает во всех браузерах.
Вы можете просто использовать оба в соответствии со спецификацией, любезно предоставленной Оли.
Я всегда использую border:0 none;.
Хотя нет ничего плохого в том, чтобы указать их по отдельности, и некоторые браузеры будут анализировать CSS быстрее, если вы используете устаревшие вызовы свойств CSS1.
Хотя border:0; обычно по умолчанию использует стиль границы none, я, тем не менее, заметил, что некоторые браузеры применяют свой стиль границы по умолчанию, который может странным образом перезаписывать border:0;.
Я использую:
border: 0;
Из 8.5.4 в CSS 2.1:
'граница'
Значение: [‹border-width> || ‹Border-style> || ‹'Border-top-color'>] | наследовать
Так что любой из ваших методов выглядит нормально.
Что ж, чтобы точно увидеть разницу между border: 0 и border: none, мы можем провести несколько экспериментов.
Давайте создадим три блока: первый, границу которого можно отключить, установив его ширину равным нулю, второй, который можно отключить, только установив для него значение none, и третий с рамкой, которую можно «отключить», только установив его цвет до прозрачного. Затем давайте попробуем эффект:
border: 0;border: none;border: transparent
стиль границы: твердый! важный; цвет границы: красный! важно; ширина границы: 2px! важно; цвет границы: красный! важно; ширина границы: 2px! важно; стиль границы: твердый! важный;
var container = document.querySelector('#container');
var btnSetZero = document.querySelector('#setZero');
var btnSetNone = document.querySelector('#setNone');
var btnSetTransparent = document.querySelector('#setTransparent');
var btnReset = document.querySelector('#reset');
btnSetZero.addEventListener('click', () => {
container.className = "border-zero";
});
btnSetNone.addEventListener('click', () => {
container.className = "border-none";
});
btnSetTransparent.addEventListener('click', () => {
container.className = "border-transparent";
});
btnReset.addEventListener('click', () => {
container.className = "";
});
div div {
border: 2px solid red;
margin: 2px;
font-family: monospace;
white-space: nowrap;
width: 250px;
}
div.border-zero div {
border: 0;
}
div.border-none div {
border: none;
}
div.border-transparent div {
border: transparent;
}
<div id="container">
<div style="border-style: solid!important; border-color: red!important;">
border-style: solid!important;<br>
border-color: red!important;
</div>
<div style="border-width: 2px!important; border-color: red!important;">
border-width: 2px!important;<br>
border-color: red!important;
</div>
<div style="border-width: 2px!important; border-style: solid!important;">
border-width: 2px!important;<br>
border-style: solid!important;
</div>
</div>
<button id="setZero">border: 0;</button>
<button id="setNone">border: none;</button>
<button id="setTransparent">border: transparent;</button>
<button id="reset">reset</button>
Мои результаты были одинаковыми как в Firefox, так и в Chrome:
border: 0; Похоже, что для ширины границы установлено значение 0, а для стиля границы - none, но не изменить цвет границы;
border: none; Похоже, меняет только стиль границы (на none);
border: transparent; Кажется, изменил цвет границы на transparent и стиль границы на none;
Хотя результаты, скорее всего, будут одинаковыми (без границы), 0 и none технически относятся к разным вещам.
0 указывает ширину границы, а 0 - стиль границы. Очевидно, что граница шириной 0 не существует, поэтому у нее не будет стиля.
Однако, если позже в вашей таблице стилей вы намереваетесь переопределить это, вы, естественно, специально обратитесь к одному или другому. Если бы мне теперь нужна граница в 3 пикселя, это было бы прямо переопределение границы: 0 в отношении ширины. Если бы мне теперь нужна пунктирная граница, это было бы напрямую переопределение границы: нет в отношении стиля.
Самый простой способ удалить границу с помощью css
border: 0;
Это результат в Firefox 78.0.2 (64-бит):
img {
border: none;
border-top-color: currentcolor;
border-top-style: none;
border-top-width: medium;
border-right-color: currentcolor;
border-right-style: none;
border-right-width: medium;
border-bottom-color: currentcolor;
border-bottom-style: none;
border-bottom-width: medium;
border-left-color: currentcolor;
border-left-style: none;
border-left-width: medium;
}
img {
border: 0;
border-top-color: currentcolor;
border-top-style: none;
border-top-width: 0px;
border-right-color: currentcolor;
border-right-style: none;
border-right-width: 0px;
border-bottom-color: currentcolor;
border-bottom-style: none;
border-bottom-width: 0px;
border-left-color: currentcolor;
border-left-style: none;
border-left-width: 0px;
border-image-outset: 0;
border-image-repeat: stretch;
border-image-slice: 100%;
border-image-source: none;
border-image-width: 1;
}
Дата: 20200720
По моему мнению,
border:none работает, но не соответствует стандарту w3c
так что лучше мы можем использовать border:0;
border: none нет ничего недействительного.
- person Quentin; 08.05.2016