Какой из двух методов соответствует стандартам W3C? Они оба ведут себя так, как ожидается во всех браузерах?
граница: нет;
граница: 0;
Какой из двух методов соответствует стандартам W3C? Они оба ведут себя так, как ожидается во всех браузерах?
граница: нет;
граница: 0;
Ответы:
Оба действительны. Это твой выбор.
Я предпочитаю, border:0
потому что это короче; Я считаю, что легче читать. Вы можете найти none
более разборчивым. Мы живем в мире очень мощных постпроцессоров CSS, поэтому я бы порекомендовал вам использовать то, что вы предпочитаете, а затем запустить его через «компрессор». Здесь нет священной войны, достойной борьбы.
Тем не менее, если вы пишете все свои рабочие 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
это как-то лучше, но использование этого как вашего рассуждения ошибочно.
Они эквивалентны в действии , указывая на разные ярлыки :
border: 0;
//short for..
border-width: 0;
И другие..
border: none;
//short for...
border-style: none;
Обе работы, просто выберите один и идти с ним :)
border: 0;
он действителен.
border: 0
это не ярлык для border-width: 0
. Вместо этого, короткая версия всегда устанавливает все три свойства: border-color
, border-style
и border-width
.
Как уже говорили другие, они действительны и сделают свое дело. Я не уверен на 100%, что они идентичны. Если у вас есть какой-то стиль каскадирования, то теоретически они могут дать разные результаты, поскольку они эффективно перекрывают разные значения.
Например. Если вы установите "border: none;" и позже у вас будет два разных стиля, которые переопределяют ширину и стиль границы, тогда один будет делать что-то, а другой - нет.
В следующем примере как для IE, так и для Firefox первые два тестовых 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
.
(примечание: этот ответ был обновлен 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
style. Итак, на первый взгляд, эти три правила выглядят эквивалентно. Однако они ведут себя по-разному в сочетании с другими правилами.
Когда таблица отображается с использованием 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 хорошо, но в предыдущих версиях он отображал границу, даже если стиль «нет». Я испытал это при использовании таблицы стилей печати, где я не хотел, чтобы границы на полях ввода.
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'>] | унаследуют
Так что любой из ваших методов выглядит хорошо.
Ну, чтобы точно увидеть разницу между нами border: 0
и border: none
мы можем провести несколько экспериментов.
Давайте создадим три элемента div: первый, чья граница может быть отключена только путем установки его ширины на ноль, второй - отключение только путем установки его стиля на none, и третий - с рамкой, которую можно «отключить» только путем установки его цвет к прозрачному. Тогда давайте попробуем эффект:
border: 0;
border: none;
border: transparent
стиль границы: твердый! важный; цвет границы: красный! важно; border-width: 2px! важно; цвет границы: красный! важно; border-width: 2px! важно; стиль границы: твердый! важный;
Мои результаты были одинаковыми как в Firefox, так и в Chrome:
border: 0;
Кажется, чтобы установить border-width в 0
и border-style none
, но не изменить border-color;
border: none;
Кажется, только изменить стиль границы (к none
);
border: transparent;
Кажется, чтобы изменить border-color на transparent
и border-style на none
;
Хотя результаты, скорее всего, будут одинаковыми (без границ), 0 и ни один из них технически не относятся к разным вещам.
0 адресов ширины границы и ни одного адреса границы стиля. Очевидно, что граница шириной 0 не существует, поэтому не будет иметь стиля.
Однако, если позже в вашей таблице стилей вы намерены переопределить это, вы, естественно, определенно обратились бы к одному или другому. Если бы я теперь хотел границу в 3 пикселя, это было бы непосредственно переопределением границы: 0 в отношении ширины. Если бы я теперь хотел пунктирную границу, это было бы непосредственно переопределившей границей: ничего не касалось стиля.
Самый простой способ удалить границу с помощью CSS
border: 0;
МЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ГРАНИЦУ 0
Согласно моему мнению и опыту, я бы предложил использовать границу: 0; Есть веская и очень веская причина, потому что всякий раз, когда мы используем рамку: нет, я понимаю, что это работает, но подумайте о том, что мы используем рамку, 1px, 2px, 3px и т. Д. Я имею в виду, что мы даем значение, которое наша граница равна ... px / em / rem правильно, поэтому нам нужно использовать border: 0; для удаления значения границы, потому что, как мы знаем, когда мы используем background: none; это означает, что мы удаляем фон некоторый фон, который не является значением, которое является чем-то другим.
Спасибо