Какой из двух методов соответствует стандартам W3C? Оба они ведут себя так, как ожидалось, в браузерах?
border: none,
border: 0;
Какой из двух методов соответствует стандартам W3C? Оба они ведут себя так, как ожидалось, в браузерах?
border: none,
border: 0;
Оба действительны. Я включил спецификацию и объяснение ниже.
Но о том, что вы "должны" использовать... Это действительно зависит от вас и вашего стиля. Я предпочитаю border:0
, потому что он короче, и мне кажется, что его легче читать. Вы можете предпочесть быть более явным.
Несмотря на ворчание комментариев, он также сохранит [бесконечно малую] величину полосы пропускания. Несмотря на скудную экономию, , это не мешает быть в полосе пропускания. Сделайте каждый байт, и вы сделаете свой сайт быстрее. Но это зависит от вас.
'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: 0;
//short for..
border-width: 0;
И другое..
border: none;
//short for...
border-style: none;
Оба работают, просто выберите один и идите с ним:)
Как говорили другие, оба действительны и будут делать трюк. Я не на 100% убежден, что они идентичны. Если у вас есть какой-то стиль каскадирования, то они могут теоретически производить разные результаты, поскольку они эффективно переопределяют разные значения.
Например. Если вы установите "border: none"; а затем позже имеют два разных стиля, которые переопределяют ширину и стиль границы, тогда один будет делать что-то, а другой не будет.
В следующем примере как IE, так и firefox первые два тестовых divs выходят без рамки. Второе второе, однако, отличается тем, что первый 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>
(примечание: этот ответ был обновлен в 2014-08-01, чтобы сделать его более подробным, точным и добавить живую демонстрацию)
В соответствии с спецификацией 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>
Если эти правила являются наиболее конкретными, применяемыми к границам элемента, то границы не будут отображаться ни из-за нулевой ширины, ни из-за стиля hidden
/none
. Итак, при первом взгляде эти три правила выглядят эквивалентными. Однако они ведут себя по-разному в сочетании с другими правилами.
Когда таблица отображается с помощью border-collapse: collapse
, каждая отображаемая граница распределяется между несколькими элементами (внутренние границы распределяются между соседними ячейками, внешние границы распределяются между ячейками и самой таблицей, а также строки, группы строк, столбцы и столбцы разделяют границы). Спецификация определяет некоторые правила для разрешения конфликтов границ:
Границы с
border-style
ofhidden
имеют приоритет над всеми другими конфликтующими границами. [...]Границы со стилем
none
имеют самый низкий приоритет. [...]Если ни один из стилей не является
hidden
и по крайней мере один из них неnone
, то узкие границы отбрасываются в пользу более широких. [...]Если стили границ отличаются только цветом, [...]
Итак, в контексте таблицы border: hidden
(или border-style: hidden
) будет иметь наивысший приоритет и сделает скрытую общую границу независимо от того, что.
На другом конце приоритетов border: none
(или border-style: none
) имеют самый низкий приоритет, за которым следует граница нулевой ширины (поскольку это самая узкая граница). Это означает, что вычисленное значение border-style: none
и вычисленное значение of border-width: 0
по существу совпадают.
Так как none
и 0
влияют на разные свойства (border-style
и border-width
), они будут вести себя по-другому, если более конкретное правило определяет только стиль или просто ширина. См. Крис для примера.
Хотите видеть все эти случаи на одной странице? Откройте живую демонстрацию!
Используя
border: none;
не работает в некоторых версиях IE. IE9 отлично, но в предыдущих версиях он отображает границу, даже если стиль "нет". Я испытал это, когда использовал таблицу стилей печати, где мне не нужны границы в поле ввода.
border: 0;
похоже, отлично работает во всех браузерах.
Вы можете просто использовать оба в соответствии со спецификацией, любезно предоставленной Oli.
Я всегда использую 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' > ] | наследовать
Итак, любой из ваших методов выглядит хорошо.
В то время как результаты, скорее всего, будут одинаковыми (без границ), 0 и ни один из них не обрабатывают разные вещи технически.
0 обращается к ширине границы, и ни один из них не поддерживает стиль границы. Очевидно, что граница ширины 0 не существует, поэтому она не имеет стиля.
Однако, если позже в вашей таблице стилей вы намереваетесь переопределить это, вы, естественно, конкретно обратитесь к тому или другому. Если бы мне теперь понадобилась граница 3px, это было бы непосредственно переопределением границы: 0 относительно ширины. Если бы мне теперь нужна пунктирная граница, это было бы непосредственно переопределяющей границей: нет в отношении стилизации.
В моем пункте
border:none
работает, но не допустим стандарт w3c
так лучше, что мы можем использовать border:0;