Frontend гайдлайн по HTML/CSS
Верстание достаточно сложное занятие. И часто, самые на первый взгляд простые вещи тяжело реализовать!
И поэтому мы перевели для вас замечательную статью - Гайдлайн по HTML и CSS. Тут вы сможете почерпнуть для себя что нибудь новое либо вспомнить былое старое. В этой статье собрано большое кол-во разнообразных техник, которые могут облегчить вашу жизнь.
Убедитесь, что вы понимаете семантику элементов, которые используете.
Пишите ваш код короче. Забудьте о своих старых привычек XHTML.
Доступность информации не должна быть второстепенным делом. Вам не нужно быть экспертом WCAG чтобы улучшить свой сайт, начните уже сейчас, фиксируя разные мелочи, которые делают огромную работу, такие как:
Определение языка и кодировки страницы не является обязательным, но рекомендуется всегда объявлять их, даже если они указаны в заголовках HTTP.
Размещайте все скрипты в самом низу документа, перед закрывающим тегом body, иначе они не блокируют рендеринг вашей страницы. Если ваша таблица стилей слишком большая, то изолируйте часть стилей в другой файл, что бы ускорить отрисовку необходимых элементов страницы и отложить загрузку вторичных стилей, в отдельную таблицу стилей. Два HTTP запроса к базе данных хуже, чем один, но восприятие скорости является наиболее важным фактором.
Всегда старайтесь ставить точку с запятой в конце последнего объявленного свойства в CSS. Это удобно в случае частых изменений кода, так как если забыть об этом, свойства, прописанные после попросту не сработают!
Блочная модель должна быть одинаковой для всего документа.Глобальная * {box-sizing: border-box;} Это удобно, но старайтесь не изменять блочную модель по умолчанию без необходимости.
Не изменяйте поведение элементов по умолчанию, если вы можете этого избежать этого. Держите элементы в естественном потоке документа столько, сколько вы можете. Например, удаление пробелов, у изображения не должны заставить вас изменить его отображение по умолчанию:
Кроме того, не удаляйте элемент из потока, если вы можете избежать этого.
Есть много способов, чтобы позиционировать элементы в CSS, но старайтесь ограничивать себя в свойствах / значениях ниже. В порядке предпочтений:
Старайтесь уменьшать длину селекторов тесно связанных с DOM. Попробуйте добавить к ним класс. Чем длинней селектор, тем дольше браузер будет его обрабатывать!
Если избежать длины не удается, то старайтесь не перегружать селектор ничем лишним.
Не делайте значение селекторов трудно заменяемыми. Старайтесь не использовать свойство !important.
Переопределение стилей делает отладку селекторов труднее. Избегайте его, когда это возможно.
Не дублируйте стили, которые могут быть унаследованы.
Старайтесь объединять несколько свойств в одно общее.
Используйте слова в математических операциях
Убейте устаревшие префиксы. Если вам необходимо их использовать, вставьте их перед стандартным свойством.
Нет нужды использовать анимации, когда вы может те же свойства изменить через :hover. Лучшим способом будем использовать свойства opacity и transform в угоду другим.
Если вам нужна прозрачность, используйте RGBA. В противном случае, всегда используйте шестнадцатеричный формат.
Избегайте HTTP запросы, когда эти ресурсы легко воспроизводимы с помощью CSS.
Не используйте их
На этом все. Если у вас есть чем дополнить эту статью, просим вам написать это в комментариях.
И поэтому мы перевели для вас замечательную статью - Гайдлайн по HTML и CSS. Тут вы сможете почерпнуть для себя что нибудь новое либо вспомнить былое старое. В этой статье собрано большое кол-во разнообразных техник, которые могут облегчить вашу жизнь.
HTML
Семантика
HTML5 предоставляет нам много смысловых элементов, направленных точно описать содержание. Убедитесь, что вы правильно описываете свою структуру.Код
<!-- Плохо -->
<div id="main">
<div class="article">
<div class="header">
<h1>Blog post</h1>
<p>Published: <span>21st Feb, 2015</span></p>
</div>
<p>…</p>
</div>
</div>
<!--Хорошо -->
<main>
<article>
<header>
<h1>Blog post</h1>
<p>Published: <time datetime="2015-02-21">21st Feb, 2015</time></p>
</header>
<p>…</p>
</article>
</main>
<div id="main">
<div class="article">
<div class="header">
<h1>Blog post</h1>
<p>Published: <span>21st Feb, 2015</span></p>
</div>
<p>…</p>
</div>
</div>
<!--Хорошо -->
<main>
<article>
<header>
<h1>Blog post</h1>
<p>Published: <time datetime="2015-02-21">21st Feb, 2015</time></p>
</header>
<p>…</p>
</article>
</main>
Убедитесь, что вы понимаете семантику элементов, которые используете.
Код
<!-- Плохо -->
<h1>
<figure>
<img alt="Company" src="logo.png">
</figure>
</h1>
<!-- Хорошо -->
<h1>
<img alt="Company" src="logo.png">
</h1>
<h1>
<figure>
<img alt="Company" src="logo.png">
</figure>
</h1>
<!-- Хорошо -->
<h1>
<img alt="Company" src="logo.png">
</h1>
Краткость
Пишите ваш код короче. Забудьте о своих старых привычек XHTML.
Код
<!-- плохо -->
<!doctype html>
<html lang=en>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8" />
<title>Contact</title>
<link rel="styleshee" href="style.css" type="text/css" />
</head>
<body>
<h1>Contact me</h1>
<label>
Email address:
<input type="email" placeholder="you@email.com" required="required" />
</label>
<script src="main.js" type="text/javascript"></script>
</body>
</html>
<!-- Хорошо -->
<!doctype html>
<html lang=en>
<meta charset=utf-8>
<title>Contact</title>
<link rel="stylesheet" href="style.css">
<h1>Contact me</h1>
<label>
Email address:
<input type="emai"l placeholder="you@email.com" required>
</label>
<script src="main.js"></script>
</html>
<!doctype html>
<html lang=en>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8" />
<title>Contact</title>
<link rel="styleshee" href="style.css" type="text/css" />
</head>
<body>
<h1>Contact me</h1>
<label>
Email address:
<input type="email" placeholder="you@email.com" required="required" />
</label>
<script src="main.js" type="text/javascript"></script>
</body>
</html>
<!-- Хорошо -->
<!doctype html>
<html lang=en>
<meta charset=utf-8>
<title>Contact</title>
<link rel="stylesheet" href="style.css">
<h1>Contact me</h1>
<label>
Email address:
<input type="emai"l placeholder="you@email.com" required>
</label>
<script src="main.js"></script>
</html>
Доступность
Доступность информации не должна быть второстепенным делом. Вам не нужно быть экспертом WCAG чтобы улучшить свой сайт, начните уже сейчас, фиксируя разные мелочи, которые делают огромную работу, такие как:
- научиться использовать атрибут alt правильно
- убедившись, что ваши ссылки и кнопки прописаны как таковые (без <div class="button"> - это просто зверство)
- не полагайтесь исключительно на цвет, чтобы передавать информацию
- используйте тег label для управления элементами формы
Код
<!-- Плохо -->
<h1><img alt="Logo" src="logo.png"></h1>
<!-- Хорошо -->
<h1><img alt="My Company, Inc." src="logo.png"></h1>
<h1><img alt="Logo" src="logo.png"></h1>
<!-- Хорошо -->
<h1><img alt="My Company, Inc." src="logo.png"></h1>
Язык и кадировка
Определение языка и кодировки страницы не является обязательным, но рекомендуется всегда объявлять их, даже если они указаны в заголовках HTTP.
Код
<!-- Плохо -->
<!doctype html>
<title>Hello, world.</title>
<!-- Хорошо -->
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Hello, world.</title>
</html>
<!doctype html>
<title>Hello, world.</title>
<!-- Хорошо -->
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Hello, world.</title>
</html>
Производительность
Размещайте все скрипты в самом низу документа, перед закрывающим тегом body, иначе они не блокируют рендеринг вашей страницы. Если ваша таблица стилей слишком большая, то изолируйте часть стилей в другой файл, что бы ускорить отрисовку необходимых элементов страницы и отложить загрузку вторичных стилей, в отдельную таблицу стилей. Два HTTP запроса к базе данных хуже, чем один, но восприятие скорости является наиболее важным фактором.
Код
<!-- Плохо -->
<!doctype html>
<meta charset="utf-8">
<script src="analytics.js"></script>
<title>Hello, world.</title>
<p>...</p>
<!-- Хорошо -->
<!doctype html>
<meta charset="utf-8">
<title>Hello, world.</title>
<p>...</p>
<script src="analytics.js"></script>
<!doctype html>
<meta charset="utf-8">
<script src="analytics.js"></script>
<title>Hello, world.</title>
<p>...</p>
<!-- Хорошо -->
<!doctype html>
<meta charset="utf-8">
<title>Hello, world.</title>
<p>...</p>
<script src="analytics.js"></script>
CSS
Точка с запятой
Всегда старайтесь ставить точку с запятой в конце последнего объявленного свойства в CSS. Это удобно в случае частых изменений кода, так как если забыть об этом, свойства, прописанные после попросту не сработают!
Код
/* Плохо */
div {
color: red
}
/* Хорошо */
div {
color: red;
}
div {
color: red
}
/* Хорошо */
div {
color: red;
}
Блочная модель
Блочная модель должна быть одинаковой для всего документа.Глобальная * {box-sizing: border-box;} Это удобно, но старайтесь не изменять блочную модель по умолчанию без необходимости.
Код
/* Плохо */
div {
width: 100%;
padding: 10px;
box-sizing: border-box;
}
/* Хорошо */
div {
padding: 10px;
}
div {
width: 100%;
padding: 10px;
box-sizing: border-box;
}
/* Хорошо */
div {
padding: 10px;
}
Поток
Не изменяйте поведение элементов по умолчанию, если вы можете этого избежать этого. Держите элементы в естественном потоке документа столько, сколько вы можете. Например, удаление пробелов, у изображения не должны заставить вас изменить его отображение по умолчанию:
Код
/* Плохо */
img {
display: block;
}
/* Хорошо */
img {
vertical-align: middle;
}
img {
display: block;
}
/* Хорошо */
img {
vertical-align: middle;
}
Кроме того, не удаляйте элемент из потока, если вы можете избежать этого.
Код
/* Плохо */
div {
width: 100px;
position: absolute;
right: 0;
}
/* Хорошо */
div {
width: 100px;
margin-left: auto;
}
div {
width: 100px;
position: absolute;
right: 0;
}
/* Хорошо */
div {
width: 100px;
margin-left: auto;
}
Позиционирование
Есть много способов, чтобы позиционировать элементы в CSS, но старайтесь ограничивать себя в свойствах / значениях ниже. В порядке предпочтений:
Код
display: block;
display: flex;
position: relative;
position: sticky;
position: absolute;
position: fixed;
display: flex;
position: relative;
position: sticky;
position: absolute;
position: fixed;
Селекторы
Старайтесь уменьшать длину селекторов тесно связанных с DOM. Попробуйте добавить к ним класс. Чем длинней селектор, тем дольше браузер будет его обрабатывать!
Код
/* Плохо */
div:first-of-type :last-child > p ~ *
/* Хорошо */
div:first-of-type .info
div:first-of-type :last-child > p ~ *
/* Хорошо */
div:first-of-type .info
Если избежать длины не удается, то старайтесь не перегружать селектор ничем лишним.
Код
/* Плохо */
img[src$=svg], ul > li:first-child {
opacity: 0;
}
/* Хорошо */
[src$=svg], ul > :first-child {
opacity: 0;
}
img[src$=svg], ul > li:first-child {
opacity: 0;
}
/* Хорошо */
[src$=svg], ul > :first-child {
opacity: 0;
}
Специфичность
Не делайте значение селекторов трудно заменяемыми. Старайтесь не использовать свойство !important.
Код
/* Плохо */
.bar {
color: green !important;
}
.foo {
color: red;
}
/* Хорошо */
.foo.bar {
color: green;
}
.foo {
color: red;
}
.bar {
color: green !important;
}
.foo {
color: red;
}
/* Хорошо */
.foo.bar {
color: green;
}
.foo {
color: red;
}
Переопределение
Переопределение стилей делает отладку селекторов труднее. Избегайте его, когда это возможно.
Код
/* Плохо */
li {
visibility: hidden;
}
li:first-child {
visibility: visible;
}
/* Хорошо */
li + li {
visibility: hidden;
}
li {
visibility: hidden;
}
li:first-child {
visibility: visible;
}
/* Хорошо */
li + li {
visibility: hidden;
}
Наследование
Не дублируйте стили, которые могут быть унаследованы.
Код
/* Плохо */
div h1, div p {
text-shadow: 0 1px 0 #fff;
}
/* Хорошо */
div {
text-shadow: 0 1px 0 #fff;
}
div h1, div p {
text-shadow: 0 1px 0 #fff;
}
/* Хорошо */
div {
text-shadow: 0 1px 0 #fff;
}
Краткость
Старайтесь объединять несколько свойств в одно общее.
Код
/* Плохо */
div {
transition: all 1s;
top: 50%;
margin-top: -10px;
padding-top: 5px;
padding-right: 10px;
padding-bottom: 20px;
padding-left: 10px;
}
/* Хорошо */
div {
transition: 1s;
top: calc(50% - 10px);
padding: 5px 10px 20px;
}
div {
transition: all 1s;
top: 50%;
margin-top: -10px;
padding-top: 5px;
padding-right: 10px;
padding-bottom: 20px;
padding-left: 10px;
}
/* Хорошо */
div {
transition: 1s;
top: calc(50% - 10px);
padding: 5px 10px 20px;
}
Язык
Используйте слова в математических операциях
Код
/* Плохо */
:nth-child(2n + 1) {
transform: rotate(360deg);
}
/* Хорошо */
:nth-child(odd) {
transform: rotate(1turn);
}
:nth-child(2n + 1) {
transform: rotate(360deg);
}
/* Хорошо */
:nth-child(odd) {
transform: rotate(1turn);
}
Вендорные префиксы
Убейте устаревшие префиксы. Если вам необходимо их использовать, вставьте их перед стандартным свойством.
Код
/* Плохо */
div {
transform: scale(2);
-webkit-transform: scale(2);
-moz-transform: scale(2);
-ms-transform: scale(2);
transition: 1s;
-webkit-transition: 1s;
-moz-transition: 1s;
-ms-transition: 1s;
}
/* Хорошо */
div {
-webkit-transform: scale(2);
transform: scale(2);
transition: 1s;
}
div {
transform: scale(2);
-webkit-transform: scale(2);
-moz-transform: scale(2);
-ms-transform: scale(2);
transition: 1s;
-webkit-transition: 1s;
-moz-transition: 1s;
-ms-transition: 1s;
}
/* Хорошо */
div {
-webkit-transform: scale(2);
transform: scale(2);
transition: 1s;
}
Анимации
Нет нужды использовать анимации, когда вы может те же свойства изменить через :hover. Лучшим способом будем использовать свойства opacity и transform в угоду другим.
Код
/* Плохо */
div:hover {
animation: move 1s forwards;
}
@keyframes move {
100% {
margin-left: 100px;
}
}
/* Хорошо */
div:hover {
transition: 1s;
transform: translateX(100px);
}
div:hover {
animation: move 1s forwards;
}
@keyframes move {
100% {
margin-left: 100px;
}
}
/* Хорошо */
div:hover {
transition: 1s;
transform: translateX(100px);
}
Цвета
Если вам нужна прозрачность, используйте RGBA. В противном случае, всегда используйте шестнадцатеричный формат.
Код
/* Плохо */
div {
color: hsl(103, 54%, 43%);
}
/* Хорошо */
div {
color: #5a3;
}
div {
color: hsl(103, 54%, 43%);
}
/* Хорошо */
div {
color: #5a3;
}
Графика
Избегайте HTTP запросы, когда эти ресурсы легко воспроизводимы с помощью CSS.
Код
/* Плохо */
div::before {
content: url(white-circle.svg);
}
/* Хорошо */
div::before {
content: "";
display: block;
width: 20px;
height: 20px;
border-radius: 50%;
background: #fff;
}
div::before {
content: url(white-circle.svg);
}
/* Хорошо */
div::before {
content: "";
display: block;
width: 20px;
height: 20px;
border-radius: 50%;
background: #fff;
}
Хаки
Не используйте их
Код
/* Плохо */
div {
// position: relative;
transform: translateZ(0);
}
/* Хорошо */
div {
/* position: relative; */
will-change: transform;
}
div {
// position: relative;
transform: translateZ(0);
}
/* Хорошо */
div {
/* position: relative; */
will-change: transform;
}
На этом все. Если у вас есть чем дополнить эту статью, просим вам написать это в комментариях.
-
FalleN -
3197 -
1 -
0
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...