От автора: за 20 лет опыта веб-разработки я создал для себя стандартный подход CSS, которым я хотел бы поделиться в этой статье. В этом примере показан мой структурный подход, а не дизайн. Таким образом, статья не является визуальным шаблоном и не имеет дизайна.
В общем, я использую rem как единицу измерения для всех размеров, кроме границ, для которых я использую px. Моя система CSS состоит из следующих компонентов:
Сброс настроек
Переменные
Глобальные настройки
Специфические настройки
Стили наведения
Медиа-запросы
/* Reset */ ... /* Variables */ ... /* Globals */ ... /* Specifics */ ... /* Hovers */ ... /* Media queries */ ...
Сброс настроек
Каждый браузер предоставляет HTML-код в предварительно отформатированном виде, если вы не определяете стиль самостоятельно. Эта таблица стилей по умолчанию разработана по-разному в зависимости от производителя и версии браузера. Чтобы сбросить стиль по умолчанию для всех браузеров и унифицировать отображение, я использую первоначальный сброс.
/* Reset */ *,*::before,*::after{ box-sizing:border-box; } html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6, pre,form,fieldset,input,textarea,p,blockquote,th,td, header,footer,aside,nav,article,figure,figcaption{ margin:0; padding:0; } fieldset,img{ border:0; } address,caption,cite,code,dfn,em,strong,th,var{ font-style:normal; font-weight:400; } ol,ul{ list-style:none; } caption,th{ text-align:left; } h1,h2,h3,h4,h5,h6{ font-size:100%; font-weight:400; } q:before,q:after{ content:''; } abbr,acronym{ border:0; } a{ text-decoration:none; } a:active,a:focus{ outline:none; }
Переменные
Современные браузеры поддерживают переменные, которые я определяю в root элементе. Для всех спецификаций абсолютного размера для ширины и размеров шрифта веб-сайта я работаю с rem. Чтобы упростить расчет, в root я устанавливаю значение font-size равно 10px, которое соответствует 1rem в последующем определении. Таким образом, основной текст с размером шрифта 20px равен 2rem.
Я определяю базовые цвета, черный и белый, в отдельном блоке. Сразу под ним все другие цвета проекта .
В переменных макета раздела I определяю все важные переменные макета, такие как content-width, content-padding, header-height и т.д.
/* Variables */ :root{ /* Reset 1rem = 10px */ font-size:10px; /* Basic colors */ --white:#ffffff; --black:#000000; ... /* Project colors */ --yellow:hsl(57,88%,58%); --blue:hsl(220,88%,58%); ... /* Layout variables */ --content-width:90rem; --content-padding:5rem; ... --header-height:10rem; --keyvisual-height:60rem; ... }
Глобальные настройки проекта
В глобальных настройках проекта я устанавливаю базовые правила типографики и унифицирую интервалы. Пример: отступы вниз от элементов p, ul и figure должны быть равномерными.
В большинстве случаев моим сайтам не требуется более четырех размеров заголовков для осмысленной иерархической организации контента. h4 также является промежуточным заголовком, который не имеет отступа вниз но выделен жирным.
/* Globals */ body{ font-family:sans-serif; font-size:2rem; font-weight:400; line-height:1.4; } section{ padding:var(--content-padding); } p,ul,figure{ margin-bottom:3rem; } h1,h2,h3,h4,h5,h6{ line-height:1.1; } h1{ font-size:4rem; margin-bottom:3rem; } h2{ font-size:3rem; margin-bottom:2rem; } h3{ font-size:2.5rem; margin-bottom:1.5rem; } h4{ font-size:2.2rem; font-weight:700; }
Специфические настройки
Специфический раздел моего CSS всегда самый подробный. Здесь я определяю конкретный дизайн контента, напрямую обращаясь к разделам. В этом разделе я придерживаюсь иерархического порядка определений.
/* Specifics */ /* Intro */ section.intro{ background-color:var(--blue); color:var(--white); } section.intro h3{ margin-bottom:0; } section.intro figure{ border:1px solid var(--yellow); } /* Contact */ section.contact{ background-color:var(--black); color:var(--white); } section.contact h2{ margin-bottom:2rem; } section.contact figure{ border:1px solid var(--white); } ...
Hovers
Я собираю все определения hover в одном месте и связываю их медиа-запросом @media(hover:hover), потому что hover необходимо только для устройств с поддержкой hover. Таким образом я отслеживаю все hover и могу быстро их находить и настраивать.
/* Hovers */ @media(hover:hover){ header nav ul li a:hover{ background-color:var(--yellow); } section p a.button:hover{ background-color:var(--yellow); color:var(--black); } ... }
Медиа-запросы
В 90% случаев, я разрабатываю для настольных компьютеров и определяю все определения адаптивного дизайна в порядке убывания: рабочий стол — планшет — смартфон. Путем привязки к корневому значению font-size я могу грамотно масштабировать весь макет пропорционально.
/* Media Queries */ /* Standard desktop */ @media(max-width:1920px){ :root{ --content-padding:4rem; } ... } /* Old desktop or large scaled UI */ @media(max-width:1280px){ :root{ font-size:8px; } ... } /* Tablet landscape */ @media(max-width:1024px){ :root{ font-size:10px; --content-width:100%; --content-padding:2rem; } ... } /* Tablet portrait */ @media(max-width:800px){ :root{ font-size:9px; } ... } /* Smartphones */ @media(max-width:550px){ :root{ font-size:7px; --content-padding:1rem; } ... }
Спасибо за чтение!
Автор: Stephan Romhart
Источник: medium.com
Редакция: Команда webformyself.
Читайте нас в Telegram, VK, Яндекс.Дзен