Reset Свойство отображения CSS для значения по умолчанию
Можно ли переопределить свойство отображения с его значением по умолчанию? Например, если я не задал ни одного в одном стиле, и я хочу переопределить его в другом по умолчанию.
Или это единственный способ узнать, что такое по умолчанию для этого элемента, и затем установить его на это? Хотелось бы не знать, является ли элемент обычно блочным, встроенным или в зависимости от того, что...
Ответы
Ответ 1
Стили браузера по умолчанию определены в его таблице стилей агента пользователя, источники которой вы можете найти здесь. К сожалению, спецификация Cascading and Inheritance level 3, по-видимому, не предлагает способ сброса свойства стиля в его браузер по умолчанию. Однако есть планы повторно ввести ключевое слово для этого на уровне 4 каскадирования и наследования - рабочая группа просто еще не определилась с именем для этого ключевого слова (в настоящее время ссылка говорит " revert
, но она не является окончательной). Информацию о поддержке браузера для revert
можно найти на caniuse.com.
В то время как спецификация уровня 3 вводит initial
ключевое слово, установка свойства к его начальному значению сбрасывает его к его значению по умолчанию, как определено CSS, а не как определено браузером. Начальное значение display
inline
; это указано здесь. initial
ключевое слово относится к этому значению, а не к браузеру по умолчанию. Сама спецификация делает это примечание под all
свойством:
Например, если автор указывает элемент all: initial
для элемента, он блокирует все наследование и сбрасывает все свойства, как если бы не было правил на уровне автора, пользователя или агента пользователя в каскаде.
Это может быть полезно для корневого элемента "виджета", включенного в страницу, который не хочет наследовать стили внешней страницы. Однако обратите внимание, что любой стиль "по умолчанию", примененный к этому элементу (такой как, например, display: block
из таблицы стилей UA для элементов блока, таких как <div>
), также будет удален.
Поэтому я думаю, что единственный способ использовать чистый CSS прямо сейчас - это найти значение по умолчанию в браузере и установить его вручную:
div.foo { display: inline-block; }
div.foo.bar { display: block; }
(Альтернативой вышеупомянутому будет div.foo:not(.bar) { display: inline-block; }
, но это включает в себя изменение исходного селектора, а не переопределение.)
Ответ 2
Если использование javascript разрешено, вы можете установить для свойства display
пустую строку. Это заставит его использовать значение по умолчанию для этого конкретного элемента.
var element = document.querySelector('span.selector');
// Set display to empty string to use default for that element
element.style.display = '';
Вот ссылка на jsbin.
Это приятно, потому что вам не нужно беспокоиться о том, чтобы различные типы дисплеев возвращались (block
, inline
, inline-block
, table-cell
и т.д.).
Но для этого требуется javascript, поэтому , если вы ищете решение, основанное только на CSS, тогда это не решение для вас.
Примечание. Это переопределяет встроенные стили, но не стили, установленные в css
Ответ 3
Unset display
:
Вы можете использовать значение unset
, которое работает как в Firefox и Chrome.
display: unset;
.foo { display: none; }
.foo.bar { display: unset; }
Ответ 4
Нет, это вообще невозможно. Когда какой-то код CSS (или HTML) устанавливает значение для свойства в элементе, нет способа отменить его и сообщить браузеру использовать его значение по умолчанию.
Конечно, можно установить свойство, значение которого вы считаете значением по умолчанию. Это может работать довольно широко, если вы проверите Rendering раздел HTML5 CR, в основном отражающий, что на самом деле делают браузеры.
Тем не менее, ответ "Нет", поскольку браузеры могут иметь любые значения по умолчанию, которые им нравятся. Вы должны проанализировать, в чем причина желания reset по умолчанию; исходная проблема все еще может быть разрешимой.
Ответ 5
Если у вас есть доступ к JavaScript, вы можете создать элемент и прочитать его вычисленный стиль.
function defaultValueOfCssPropertyForElement(cssPropertyName, elementTagName, opt_pseudoElement) {
var pseudoElement = opt_pseudoElement || null;
var element = document.createElement(elementTagName);
document.body.appendChild(element);
var computedStyle = getComputedStyle(element, pseudoElement)[cssPropertyName];
element.remove();
return computedStyle;
}
// Usage:
defaultValueOfCssPropertyForElement('display', 'div'); // Output: 'block'
defaultValueOfCssPropertyForElement('content', 'div', ':after'); // Output: 'none'
Ответ 6
Относительно ответа BoltClock и John у меня были проблемы с начальным ключевым словом при использовании IE11. Он отлично работает в Chrome, но в IE он не имеет никакого эффекта.
В соответствии с этим ответом IE не поддерживает начальное ключевое слово:
Дисплей Div: начальный не работает, как предполагалось, в ie10 и chrome 29
Я попробовал установить его пустым, как это предлагается здесь:
как вернуться к нормальной работе после отображения: нет для строки таблицы
Это сработало и было достаточно хорошим для моего сценария. Конечно, чтобы установить реальное начальное значение, этот ответ является единственным хорошим, который я мог бы найти.