Css по умолчанию. Сброс стилей с помощью CSS Reset

Настройка WI-FI 20.11.2020
Настройка WI-FI

От автора: сайтостроение в Сети бывает похоже на строительство на зыбучих песках. Браузеры делают все то же, но время от времени у них получаются раздражающе непредсказуемые отличия. Например, у всех браузеров есть «таблицы стилей user agent» - набор стилей CSS по умолчанию, чтобы заголовок выглядел заголовком и т.д., еще до назначения вами стилей странице1. Конечно, в каждом браузерном движке наборы по умолчанию применяются немного разные.

Одним из примеров являлись стили списка по умолчанию, где изначально в браузерных таблицах стилей по умолчанию Internet Explorer’а и Opera был отступ списка margin-left: 30pt;, тогда как Firefox и KHTML шли с padding-left: 40px;. Если вам хотелось изменить отступ по умолчанию, определив ul {padding-left: 0;}, то в браузерах это приводило к очень разным результатам.

СБРОС ИСХОДНЫХ НАСТРОЕК CSS

Чтобы добиться небольшой стабильности, некоторые разработчики сбрасываю все поля и отступы с помощью универсального селектора:

* {margin: 0; padding: 0;}

* { margin : 0 ; padding : 0 ; }

Определив отступ списка и начав с этого свою таблицу стилей, вы получите то, что ожидали. Однако применение * означало, что поле и отступ по умолчанию «грохнулись» для всех элементов и, как только вы добавляли элемент form, становилось совсем тяжко.

Цель сброса состоит в том, чтобы обнулить все, что можно… [и] послужить стартовой точкой ваших собственных основных стилей - Эрик Майер (Eric Meyer)

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; }

html , body , div , span , applet , object , iframe ,

h1 , h2 , h3 , h4 , h5 , h6 , p , blockquote , pre ,

a , abbr , acronym , address , big , cite , code ,

del , dfn , em , img , ins , kbd , q , s , samp ,

small , strike , strong , sub , sup , tt , var ,

b , u , i , center ,

dl , dt , dd , ol , ul , li ,

fieldset , form , label , legend ,

table , caption , tbody , tfoot , thead , tr , th , td ,

article , aside , canvas , details , embed ,

figure , figcaption , footer , header , hgroup ,

menu , nav , output , ruby , section , summary ,

time , mark , audio , video {

margin : 0 ;

padding : 0 ;

border : 0 ;

font - size : 100 % ;

font : inherit ;

vertical - align : baseline ;

Он делает сброс некоторых свойств многих (но не всех) элементов до эквивалента простого текста. Так как сбрасываются только соответствующие элементы, таким образом обходятся некоторые проблемы * {margin: 0; padding: 0;}. Затем мы можем определять стили для этих сброшенных «обесстиленных» свойств, будучи уверенными в том, что строим на стабильной кроссбраузерной основе. Такое назначение стилей, кроме того, действует как сигнализатор потребности в осознанной установке подходящих стилей для этих элементов.

ПРОБЛЕМЫ СБРОСА НАСТРОЕК CSS

Сбросы CSS были настоящим спасением, но сейчас, особенно при условии возвышения каркасов-фреймов, они часто используются «как есть». Например, Эрик предполагал, что другие разработчики начнут строить сайты на предложенных им стилях сброса, соответствующим образом отменяя их, и в первую версию Meyer Reset временно включалось это правило:

/* помните о том, что нужно определить стили фокуса! */ :focus { outline: 0; }

К сожалению, на деле не все определяли стили фокуса, и из второй версии Эрик его удалил.

Применяя сбросы, ощущаешь себя немного извращенцем. Сброс стилей браузера по умолчанию заставляет размышлять о том, как должен показываться каждый элемент, помогая убедиться, что элементы применяются по семантике, а не стилям по умолчанию. Но для элементов вроде i и em почти всегда имеется стиль браузера по умолчанию. Другие браузерные стили по умолчанию, такие, как бывший некогда смехотворно большим размер текста заголовков, изменились и по умолчанию стали довольно сносными. Проблемы начинаются, когда кто-то хочет после передачи применить сброшенный элемент HTML только с назначенными «обесстиленными» стилями сброса.

Для меня важнейшей проблемой сбросов является наследование, ведущее к спаму в браузерных инструментах. При попытке отследить в чужом коде проблему CSS глубоко вложенного элемента это не поможет:

Правила сброса CSS, повторяемые по причине наследования

NORMALIZE.CSS

Николас Галлахер (Nicolas Gallagher) и Джонатан Нил (Jonathan Neal) предприняли иной подход с помощью Normalize.css , «маленького файла CSS, гарантирующего лучшую кроссбраузерную последовательность в стилях по умолчанию элементов HTML». Как и в случае со сбросами CSS, он дает нам надежную кроссбраузерную стартовую точку - в первую очередь основную причину применения сброса - но два этих подхода разнятся с философской точки зрения.

Сбросы CSS отменяют стили агента пользователя и возвращают множество элементов к их «обесстиленному» состоянию, некому ровному основанию, на котором можно безопасно строить. Однако затем нужно назначить стили большей части элементов до того, как мы сможем строить с их помощью. Вместо этого Normalize.css адресуется только к несообразностям стилей агента пользователя, выбирая самые подходящие настройки по умолчанию, в чем и заключается различие. Здесь мы тоже получаем безопасный кроссбраузерный фундамент, но такой, который включает нормализованные стили агента пользователя в качестве готовых к использованию базовых строительных материалов. В основном это нечто вроде идеализированной кроссбраузерной версии таблицы стилей по умолчанию CSS 2.1. В обоих случаях мы затем должны добавлять собственные доминирующие стили для создания изображения, но оттого, что настройки браузера по умолчанию в Normalize.css остаются, в общем приходится добавлять меньше стилей.

Так как изменения в Normalize.css более адресные, в ваших браузерных инструментах разработки отсутствует каскад наследования переписанных правил. Вот простой ul:, «обесстиленный» с помощью Meyer Reset и Normalize.css версий 1 и 2:

«Обесстиленный» элемент неупорядоченного списка

Применяем Meyer Reset

Применяем Normalize.css v1

Applying Normalize.css v2

Явно видна разница в философии, когда пример Meyer Reset появляется как пара строк простого текста без полей, отступа или маркеров, тогда как примеры Normalize.css похожи на стили по умолчанию. Разница в стилях, примененных к этому ul, тоже легко заметна.

Однако это не все стили, примененные к ul. Для сравнения вот вам тот же самый «обесстиленный» скриншот, но с видимыми стилями агента пользователя, в Firefox 21 и Opera Next 15.

В этой статье мы поговорим о сбросе стилей и рассмотрим пример создания такого файла reset.css .

Идея броса стилей появилась около 10 лет назад. Которая собственно заключалась в том, чтобы при помощи небольшого набора CSS стилей привести вид страницы во всех браузерах к одинаковому. Конечно не всегда это получается, но некоторые моменты можно исправить - например border не понятно откуда берущийся в некоторых версиях IE . Или синяя обводка (outline ) у полей.

Не для одного front-end разработчика не секрет, что браузеры очень привередливы и каждый обрабатывает элементы HTML по своему, добавляя свои стандартные стили.

Так как этой идей загорелись давно, не удивительно, что есть уже готовые файлы сброса, обычно их называют reset.css , и подключают ко всем проектам.

Почему в отдельном файле? Да просто по тому, что так удобнее их переносить от проекта к проекту.

Вот пример reset.css от 2007 года:

/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; } table { border-collapse: collapse; border-spacing: 0; }

Это лишь стандарт этого файла принятый определнным кругом веб-разработчиков.

Я же советую вам, будь вы опытным программистом или только начинающим разработать свой файл сброса. За основу можно взять вышеописанный стандарт, дополнить его своими селекторами или изменить существующие. Вот пример такого файла, который я разработал для себя:

input, textarea,a , button, select{outline:none} img {border:none;} hr { clear:both; border:none; background:none; } * { background-repeat:no-repeat; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; margin:0; padding:0; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; } table { border-collapse: collapse; border-spacing: 0; }

Вы можете коппировать любой вышеуказанный код для личного использования, но если будете использовать его в своих статьях - ставьте ссылку на источник.

По определению разработка файла стилей предполагает задание свойствам CSS новых значений. Сложные файлы стилей со временем дорастают до того момента, когда значения CSS нужно удалить полностью, т. е., сбросить на их значения по умолчанию. В некоторых случаях эти значения по умолчанию хорошо известны и легко запоминаются, но не для всех свойств это верно. К счастью, современные возможности CSS предоставляют нам простой путь для сброса значений свойств.

Сброс настроек

Предположим, что Вы задали изображениям свойство всплытия влево:

Img { float : left ; }

После этого для изображений в особых случаях, например, для тех, у которых есть класс.recall, нужно задать отсутствие всплытия, но Вы не можете вспомнить, как именно записывается это свойство.

Другими словами, Вы знаете, что по умолчанию всплытие отсутствует, но Вы не помните, как задать отсутствие всплытия. Вместо того, чтобы искать, как это записать, можно просто добавить следующую строку в таблицу стилей:

Img.recall { float : initial; }

Существует распространенное заблуждение, что значение по умолчанию сбрасывает значение свойства на первое значение, которое было задано этому свойству в файле стиле, или на значение по умолчанию в спецификации CSS. Но оба эти варианта не верны: применение значения по умолчанию сбрасывает свойство на его значение по умолчанию для браузера пользователя.

В большинстве случаев значение по умолчанию будет одним и тем же или близким для всех браузеров. Это значение особенно полезно в следующих ситуациях:

Примеры использования

Значение по умолчанию может использоваться, чтобы сбросить настройки цвета. Изначальный цвет текста в большинстве браузеров - черный, и код CSS ниже сбросит настройки цвета для элементов заголовков:

Body { color : hsl(333 , 50 % , 25 % ) ; } h1, h2, h3 { color : initial; }

Обратите внимание, что черный цвет не обязательно будет цветом по умолчанию, так как это значение зависит от браузеров и, в конечном счете, от самих пользователей. Подобным образом следующая запись:

Aside { font-family : initial; }

даст разные результаты в разных браузерах, и шрифт на выходе не обязательно будет Times New Roman, так как у разных браузеров могут быть разные шрифты по умолчанию.

Есть несколько других вариантов применения для значения по умолчанию:

Сброс значения z-index у элемента на значение по умолчанию.

Сброс значений внешних отступов и трансформаций на их значения по умолчанию.

Ограничения использования

Одна из основных причин довольно редкого использования значения по умолчанию CSS – полное отсутствие его поддержки в браузере Internet Explorer, хотя в других браузерах оно поддерживается уже много лет. Однако браузер Edge поддерживает это значение, так что, вероятно, значение по умолчанию будет чаще появляться в файлах стилей в будущем.

Перевод — Дежурка



CSS CSS по умолчанию для HTML-элементов (2)

Для каждого браузера разные, поэтому:

  • Firefox (Gecko): . Или перейдите на resource://gre-resources/ и посмотрите на html.css .
  • Chrome / Safari (WebKit):
    • Chrome (Blink):
  • Internet Explorer (Trident) , более ранние версии: http://web.archive.org/web/20170122223926/http://www.iecss.com/

Где я могу найти CSS для CSS по умолчанию для браузера?

Многие элементы HTML имеют некоторые свойства CSS по умолчанию, которые иногда могут приводить к неизвестному / нежелательному поведению. Например, поля ввода отображаются по-разному в разных браузерах. Я ищу место, которое покрывает новые свойства CSS3 и новые элементы HTML5.

Я видел в других (гораздо более старых) вопросах (таких как таблицы стилей CSS по умолчанию в браузерах), которые предлагают решение сброса CSS. Это решение иногда не нужно, часто мне хотелось бы сохранить некоторые основные свойства (например, выделение полей ввода в Chrome). Другими словами: я не хочу избавляться от вещей только потому, что не знаю, что они делают .

Итак, есть ли сайт, который может дать мне всю эту информацию (или, возможно, большинство)?

Репозиторий GitHub для всех спецификаций HTML W3C и таблиц стилей CSS по умолчанию для разработчиков можно найти

1.

2. Стандартные стили для Internet Explorer

3.

4. Стандартные стили для Opera

5. Стандартные стили для HTML4 (спецификация W3C)

6. Стандартные стили для HTML5 (спецификация W3C)

Пример, по спецификации W3C HTML4 по умолчанию:

Html, address, blockquote, body, dd, div, dl, dt, fieldset, form, frame, frameset, h1, h2, h3, h4, h5, h6, noframes, ol, p, ul, center, dir, hr, menu, pre { display: block; unicode-bidi: embed } li { display: list-item } head { display: none } table { display: table } tr { display: table-row } thead { display: table-header-group } tbody { display: table-row-group } tfoot { display: table-footer-group } col { display: table-column } colgroup { display: table-column-group } td, th { display: table-cell } caption { display: table-caption } th { font-weight: bolder; text-align: center } caption { text-align: center } body { margin: 8px } h1 { font-size: 2em; margin: .67em 0 } h2 { font-size: 1.5em; margin: .75em 0 } h3 { font-size: 1.17em; margin: .83em 0 } h4, p, blockquote, ul, fieldset, form, ol, dl, dir, menu { margin: 1.12em 0 } h5 { font-size: .83em; margin: 1.5em 0 } h6 { font-size: .75em; margin: 1.67em 0 } h1, h2, h3, h4, h5, h6, b, strong { font-weight: bolder } blockquote { margin-left: 40px; margin-right: 40px } i, cite, em, var, address { font-style: italic } pre, tt, code, kbd, samp { font-family: monospace } pre { white-space: pre } button, textarea, input, select { display: inline-block } big { font-size: 1.17em } small, sub, sup { font-size: .83em } sub { vertical-align: sub } sup { vertical-align: super } table { border-spacing: 2px; } thead, tbody, tfoot { vertical-align: middle } td, th, tr { vertical-align: inherit } s, strike, del { text-decoration: line-through } hr { border: 1px inset } ol, ul, dir, menu, dd { margin-left: 40px } ol { list-style-type: decimal } ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 } u, ins { text-decoration: underline } br:before { content: "\A"; white-space: pre-line } center { text-align: center } :link, :visited { text-decoration: underline } :focus { outline: thin dotted invert } /* Begin bidirectionality settings (do not change) */ BDO { direction: ltr; unicode-bidi: bidi-override } BDO { direction: rtl; unicode-bidi: bidi-override } * { direction: ltr; unicode-bidi: embed } * { direction: rtl; unicode-bidi: embed } @media print { h1 { page-break-before: always } h1, h2, h3, h4, h5, h6 { page-break-after: avoid } ul, ol, dl { page-break-before: avoid } }

По умолчанию браузер устанавливает свои настройки для некоторых свойств в css. Но беда тут в том, что веб-обозревателей много и каждый может устанавливать свои правила. Какое решение? Узнать, как сбросить настройки css по умолчанию и перезаписать на свои. А вот о том, как это можно сделать и будет посвящена эта статья.

CSS Reset или сброс настроек по умолчанию

CSS Reset — это набор стилей, которые сбрасывают какие-то параметры, установленные браузером по умолчанию. Этот файл пишет для себя каждый веб-разработчик индивидуально, а кто-то берет готовое решение. Вот с него я и предлагаю начать. Есть много хороших вариантов сброса стилей, но мне больше всего понравился этот, составленный Эриком Мейером:

/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

Я немного прокомментирую код. Во-первых, тут сбрасываются внутренние и внешние отступы для всех нужных элементов. Во-вторых, на лицо поддержка HTML5 элементов. Для них задано правило, которое позволит им правильно отображаться в некоторых версиях браузеров. В-третьих, заданы типичные настройки для удобной работы с таблицами (убраны отступы между ячейками и двойные границы). А еще сброшены стандартные маркеры для списков и кавычки для цитат. Эти части кода стоит удалить, если вы хотите использовать стилизацию по умолчанию.

Как сбросить настройки css самостоятельно

При более менее нормальном владении css можно попробовать самому написать пару правил. Например:

*{
margin: 0;
padding: 0;
}

Это, пожалуй, самая простая команда. Звездочка в данном случае представляет все селекторы, поэтому стили будут применены ко всем элементам на веб-странице, сбросив у них внешние и внутренние отступы. Вы удивитесь, но этих простых строчек кода может хватить для обеспечения кроссбраузерности во многих веб-обозревателях. Все остальные правила можно добавить по собственному желанию. Я советую добавить еще display: block для всех тегов HTML5.

Где разместить правила css reset

Вот выше я вам предложил код, а куда его вставлять? Тут есть два варианта:

  • Вставить его в самом начале главной таблицы стилей на вашем сайте
  • Создать на сервере новый css-файл и сохранить в него код, после чего сохранить и подключить ко всем страницам ПЕРЕД основной таблицей style.css .

Подробнее о подключении таблицы стилей css к html смотрите

На мой взгляд, второй вариант хуже тем, что ухудшает производительность, добавляя в загрузку один лишний файл. С другой стороны, так вам проще будет управлять этими правилами. Но ради производительности я рекомендую использовать первый вариант.

Сброс настроек является одной из мер по обеспечению кроссбраузерности сайта, то есть одинакового отображения в разных веб-обозревателях. Конечно, это не все меры, которые обеспечат одинаковый внешний вид, об остальных я буду писать в дальнейшем на этом блоге. Подписывайтесь, если интересно.

Рекомендуем почитать

Наверх