Введение

CSS расшифровывается как Cascading Style Sheets (каскадные таблицы стилей). Это язык таблиц стилей, используемый для описания представления документа, написанного на HTML или XML, включая цвета, макеты, шрифты и другие визуальные аспекты. CSS отделяет представление веб-страницы от ее содержимого, что облегчает поддержку и обновление сайта. Веб-разработчики используют CSS для создания визуально привлекательных и удобных веб-сайтов, совместимых с различными устройствами и браузерами. Он также позволяет создавать отзывчивые дизайны, адаптирующиеся к различным размерам и разрешениям экранов.

1. Неиспользование резервных шрифтов

При использовании пользовательских шрифтов в веб-дизайне важно указать резервные шрифты на случай, если пользовательский шрифт не загрузится или не будет поддерживаться браузером пользователя. Резервные шрифты позволяют сохранить читабельность и доступность содержимого для пользователей. Не все шрифты, которые могут понадобиться, доступны на каждом компьютере. Кроме того, иногда по неизвестным причинам шрифт, импортированный из какого-либо банка, например Google Fonts, может не загрузиться. Поэтому всегда предпочтительнее использовать обычные запасные шрифты, похожие на них. Например: шрифт sans-serif.

Неправильный:

/* Пример неиспользования запасных шрифтов */
body {
  font-family: Roboto;
}

Правильно:

/* Пример использования запасных шрифтов */
body{
font-family: Roboto, Arial, sans-serif;
}

В данном примере основным шрифтом является "Roboto", а в качестве резервных шрифтов, если основной шрифт не загружается или не поддерживается, указаны Arial и sans-serif.

2. Использование пикселей для всего

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

Неправильный:

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

/* Пример использования px для обозначения размера шрифта*/
body{
font-size: 16px;
}

Правильный:

Если вместо единиц "px" использовать относительные единицы измерения, такие как 'rem' или 'em', то элементы будут масштабироваться в зависимости от размера экрана монитора.

/* Пример использования EM для размера шрифта */
body{
font-size: 1em;
}

В данном примере 1em соответствует размеру шрифта по умолчанию в браузере пользователя. Использование em вместо px делает размер шрифта относительным к размеру области просмотра пользователя, обеспечивая адаптацию размера шрифта к различным размерам и разрешениям экрана.

3. Усложнение селекторов

Переусложненные селекторы затрудняют чтение и поддержку CSS. Лучше использовать простые и конкретные селекторы, используя классы и идентификаторы для указания конкретных элементов в HTML.

Неправильный:

/* Пример сложного селектора*/
body > div#content .post:nth-child(odd) .post-title a {
  color: blue;
}

Правильный:

/* Пример упрощенного селектора*/
.post-title a {
  color: blue;
}

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

4. Повторение одного и того же кода

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

Неправильный:

/* Пример повторения одного и того же кода*/
h1 {
  font-size: 24px;
  line-height: 1.5;
  margin-bottom: 20px;
}

h2 {
  font-size: 24px;
  line-height: 1.5;
  margin-bottom: 20px;
}

Правильный:

/* Пример использования "mixin" для сокращения дублирования кода */
@mixin heading-style {
  font-size: 24px;
  line-height: 1.5;
  margin-bottom: 20px;
}

h1 {
  @include heading-style;
}

h2 {
  @include heading-style;
}

В данном примере один и тот же код повторяется для элементов h1 и h2. Это может привести к раздуванию таблиц стилей и затруднению их поддержки. Используя миксин, мы можем определить набор стилей и повторно использовать их для различных элементов, сокращая дублирование кода и упрощая сопровождение таблицы стилей.

5. Использование имени цвета

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

Неправильный:

/* Пример использования названия цвета */
body{
color: red;
}

Правильный:

/* Пример использования цветового кода*/
body{
color: #ff0000;
}

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

6. Ошибки z-index

Свойство z-index управляет порядком расположения элементов на веб-странице. Однако использование z-index без надлежащего планирования и организации может привести к таким проблемам, как перекрытие или исчезновение элементов за другими элементами. Важно использовать z-index стратегически и избегать ненужных контекстов укладки.

Неправильный:

/* Пример ошибок при использовании z-index */
.menu {
  position: relative;
  z-index: 10;
}

.modal {
  position: absolute;
  z-index: 5;
}

Правильный:

/* Пример исправления ошибок z-index */
.menu {
  position: relative;
  z-index: 2;
}

.modal {
  position: absolute;
  z-index: 3;
}

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

7. Неиспользование сокращений

Использование сокращенных CSS-свойств позволяет значительно сократить объем кода, что делает таблицы стилей более читабельными и удобными. Например, можно использовать сокращенное свойство margin вместо того, чтобы писать отдельные свойства для margin-top, margin-right, margin-bottom и margin-left.

Неправильный:

/* Пример отказа от использования сокращений */
.container{
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}

Правильный:

/* Пример использования сокращений*/
.container{
margin: 10px 20px 30px 40px;
}

В данном примере отказ от использования сокращений может сделать код длиннее и труднее для чтения. Использование сокращений делает код более лаконичным и удобным для чтения.

8. Чаще использовать !important

Использование декларации !important в CSS может переопределить другие стили и привести к непредвиденным последствиям. Лучше по возможности избегать использования !important и использовать более конкретные селекторы или вообще избегать конфликтов в CSS.

Неправильный:

/* Пример более частого использования !important */
.color {
  color: red !important;
}

.background-color {
  background-color: blue !important;
}

Правильный:

/* Пример использования специфики вместо !important */
body .color {
  color: red;
}

#header .background-color {
  background-color: blue;
}

В данном примере использование !important может усложнить сопровождение и переопределение кода. Использование specificity вместо !important гарантирует, что стили будут применены правильно и при необходимости могут быть переопределены.

9. Использование встроенного CSS

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

Неправильный:

<!-- Пример использования встроенного CSS -->
<p style="color: red;">This text is red.</p>

Правильный:

<!-- Пример использования внешнего CSS -->
<head>
  <link rel="stylesheet" href="style.css">
</head>
<p class="red-text">This text is red.</p>

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

10. Отсутствие организации CSS

Упорядочивание CSS облегчает чтение и сопровождение кода. Используйте комментарии, отступы и разделяйте стили на логические разделы, чтобы облегчить поиск и редактирование конкретных стилей.

Неправильный:

/* Пример отсутствия организации CSS */
.menu {
  /* menu styles */
}

.modal {
  /* modal styles */
}

.footer {
  /* footer styles */
}

.header {
  /* header styles */
}

Правильный:

/* Пример организации CSS */
/* Header styles */
.header {
  /* header styles */
}

/* Menu styles */
.menu {
  /* menu styles */
}

/* Modal styles */
.modal {
  /* modal styles */
}

/* Footer styles */
.footer {
  /* footer styles */
}

В данном примере отсутствие упорядочивания CSS может сделать код более удобным для чтения и сопровождения. Упорядочивание CSS по разделам или элементам может сделать код более удобным для чтения и сопровождения.

11. Непоследовательное именование

Непоследовательные соглашения об именовании в CSS могут затруднить поддержку и обновление таблиц стилей. Чтобы сделать CSS более читаемым и удобным для сопровождения, используйте последовательные соглашения об именовании, например BEM (Block, Element, Modifier) или SMACSS (Scalable and Modular Architecture for CSS).

Неправильный:

/* Пример непоследовательного именования */
.menu {
  /* menu styles */
}

.main-menu {
  /* main menu styles */
}

.secondary-menu {
  /* secondary menu styles */
}

Правильный:

/* Пример последовательного именования */
.primary-menu {
  /* primary menu styles */
}

.secondary-menu {
  /* secondary menu styles */
}

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

12. Использование правила в CSS

Использование правила @important может отменить все остальные стили и привести к нежелательным последствиям. Лучше использовать конкретизацию и каскад для указания конкретных элементов в HTML.

Неправильный:

/* Пример использования @important в CSS */
.header {
  color: red !important;
}

Правильный:

/*Пример использования специфики вместо @important */
body .header {
  color: red;
}

В данном примере использование @important в CSS может усложнить сопровождение и переопределение кода. Использование специфики вместо @important гарантирует, что стили будут применены правильно и могут быть переопределены при необходимости.

13. Использование идентификаторов вместо классов

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

Неправильный:

/* Пример использования id вместо class */
#header {
  /* header styles */
}

#menu {
  /* menu styles */
}

Правильный:

/* Пример использования класса вместо id */
.header {
  /* header styles */
}

.menu {
  /* menu styles */
}

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

14. Использование одной таблицы стилей для всех элементов

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

Неправильный:

/* Пример использования одной таблицы стилей для всего */
/* Style for header */
header {
  /* header styles */
}

/* Style for menu */
nav {
  /* menu styles */
}

/* Style for body */
body {
  /* body styles */
}

/* Style for footer */
footer {
  /* footer styles */
}

Правильный:

/* Пример использования одной таблицы стилей для всего */
/* Style for header */
header {
  /* header styles */
}

/* Style for menu */
nav {
  /* menu styles */
}

/* Style for body */
body {
  /* body styles */
}

/* Style for footer */
footer {
  /* footer styles */
}

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

15. Неиспользование сброса CSS

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

Неправильный:

/* Пример простого CSS без сброса */
* {
  margin: 0;
  padding: 0;
}

Правильный:

/* Пример простого сброса настроек CSS */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

Это CSS-правило устанавливает значение margin и padding для всех HTML-элементов равным 0 и устанавливает свойство box-sizing в border-box. Таким образом, размер элемента вычисляется на основе его содержимого, подложки и границы, а не полей.

16. Неиспользование семантического HTML

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

Неправильный:

<ul>
  <li><a href="#">Home</a></li>
  <li><a href="#">About</a></li>
  <li><a href="#">Contact</a></li>
</ul>

Правильный:

/* Пример использования семантического HTML */
<header>
  <nav>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
</header>

В данном примере элемент header используется для определения заголовка веб-страницы, элемент nav - для определения набора навигационных ссылок, а элементы ul и li - для определения неупорядоченного списка ссылок.

17. Использование слишком большого количества глобальных стилей

Глобальные стили - это стили, применяемые ко всем элементам веб-страницы. Хотя глобальные стили могут быть полезны, их использование в слишком большом количестве может затруднить поддержку и обновление CSS.

Неправильный:

body {
  font-family: Arial, sans-serif;
}

p {
  font-size: 16px;
}

a {
  color: #333;
}

Правильный:

/* Пример использования слишком большого количества глобальных стилей*/
* {
  font-family: Arial, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #333;
  background-color: #fff;
}

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

18. Неиспользование CSS-комментариев

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

Неправильный:

/* Стилизация для моей страницы */
body {
  background-color: #f0f0f0;
  font-family: Arial, sans-serif;
}

.header {
  margin: 10px 0;
}

Правильный:

/* Пример использования CSS-комментариев */
/* Цвет фона и семейство шрифтов для всей страницы */
body {
  background-color: #f0f0f0;
  font-family: Arial, sans-serif;
}

/* Отступ для секции заголовка */
.header {
  margin: 10px 0;
}

В этом примере добавлены комментарии, поясняющие назначение каждого правила CSS.

19. Неиспользование префиксов поставщика

Префиксы поставщиков добавляются к свойствам CSS для обеспечения их корректной работы в различных браузерах. Если не использовать префиксы поставщиков, то стили могут работать некорректно в некоторых браузерах.

Неправильный:

.box {
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}

Правильный:

/* Пример использования префиксов поставщиков */
.box {
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}

В этом примере к свойству border-radius добавлены префиксы поставщиков для обеспечения его корректной работы в различных браузерах.

20. Не используется отзывчивый дизайн

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

Неправильный:

.container {
  width: 960px;
}

.image {
  width: 400px;
}

.text {
  width: 500px;
}

Правильный:

/* Пример использования отзывчивого дизайна */
.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
}

@media only screen and (min-width: 768px) {
  .container {
    width: 80%;
  }
}

В данном примере элементу контейнера задана ширина 100% и максимальная ширина 1200px. Свойство margin используется для центрирования элемента контейнера. Медиазапрос также используется для применения различных стилей, когда ширина экрана больше или равна 768px. В этом случае элементу-контейнеру присваивается ширина 80%.

21. Неиспользование медиазапросов

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

Неправильный:

.box {
  background-color: #ccc;
  width: 300px;
  height: 300px;
}

.box:hover {
  background-color: #999;
}

Правильный:

/* Пример использования медиазапросов*/
.box {
  background-color: #ccc;
  width: 300px;
  height: 300px;
}

.box:hover {
  background-color: #999;
}

@media (max-width: 768px) {
  .box {
    width: 100%;
    height: auto;
  }
}

В данном примере для элемента box задан цвет фона #f00. Медиазапрос также используется для применения другого цвета фона, если ширина экрана больше или равна 768px. В этом случае для элемента box задается цвет фона #0f0.

22. Отсутствие оптимизации производительности CSS

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

Неправильный:

.box {
  background-color: #ccc;
  border: 1px solid #999;
  padding: 10px;
}

Правильный:

/* Пример оптимизации производительности CSS */
.box {
  background-color: #ccc;
  border: 1px solid #999;
  padding: 10px;
  transition: background-color 0.3s ease-in-out;
}

.box:hover {
  background-color: #999;
}

В данном примере CSS-правила написаны эффективно с использованием класса container для задания максимальной ширины и поля и класса box для задания границы и подложки. Селектор-потомок используется для применения свойства margin-bottom ко всем абзацам внутри элемента box.

23. Неправильное использование модели box

Модель box описывает, как рассчитывается ширина и высота элемента на основе его содержимого, подложки, границы и margin. Неправильное использование модели box может привести к тому, что веб-страницы будут отображаться не так, как нужно.

Неправильный:

.box {
  width: 300px;
  height: 300px;
  padding: 20px;
  border: 1px solid #999;
  margin: 10px;
}

Правильный:

/* Пример правильного использования коробочной модели */
.box {
  width: calc(300px - 2 * 20px - 2 * 1px - 2 * 10px);
  height: calc(300px - 2 * 20px - 2 * 1px - 2 * 10px);
  padding: 20px;
  border: 1px solid #999;
  margin: 10px;
}

В этом примере элементу box задана ширина 300px. Для padding, border и margin также установлены значения 10px, 1px solid #ccc и 20px соответственно. Это гарантирует, что общая ширина элемента box будет правильно рассчитана на основе его содержимого, padding, border и margin.

Заключение

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

Комментарии (7)


  1. Redduck119
    13.07.2023 08:10

    body > div#content .post:nth-child(odd) .post-title a - Это не одно и тоже что и .post-title a
    Конечно body > div тут лишнее с моей точки зрения, ведь #content может быть только один на странице (ID должен быть уникальным).


    1. youngmysteriouslight
      13.07.2023 08:10

      Справедливости ради, #content и div#content не одно и то же, потому что на одной странице единственный элемент #content может быть <div>, на другой странице единственный #content может быть <main>, а стилевик общий.

      То же касается body > ...


      1. Redduck119
        13.07.2023 08:10

        Да, спасибо за уточнение, это я пропустил (про разные страницы).


  1. DarkPreacher
    13.07.2023 08:10

    Ого, повеяло 2010… Поностальгировал. К сожалению всю простыню не осилил, несколько первых пунктов хватило, дальше мозг сломался.

    Допустим в заголовке одного из пунктов автор призывает „8. Чаще использовать !important“, а в тексте говорит, что делать этого не надо, в этом же пункте рекомендуется стилизовать с помощью ID. А в 13 пункте автор рассказывает, что ID использовать совершенно не комильфо.

    После этого я промотал до последнего пункта и узнал, что автор незнаком с box-sizing: border-box;, заглянул в предпоследний – вообще ничего не понял.


  1. mobi
    13.07.2023 08:10

    Хотя использование таких названий цветов, как "красный", "синий" и "зеленый", может быть удобным, оно также может привести к несогласованности в цветовой палитре.

    Цвета определены стандартом (текущая версия: https://www.w3.org/TR/css-color-3/) и red будет #ff0000 во всех браузерах. Теоретически, браузер может не поддерживать цвета из таблицы "extended" (но это, скорее всего, будет какой-нибудь доисторический консольный браузер), но все перечисленные в "basic" просто обязан поддерживать.


  1. Riman
    13.07.2023 08:10
    +2

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


  1. Metotron0
    13.07.2023 08:10

    Накидал в личку кучу ошибок в "правильно" и "неправильно". Ощущение, что статья не перечитывалась после написания — почти всё сбилось.

    19) Автопрефиксер сам поставит. Выше же пример с миксином, значит используется что-нибудь типа scss, он чем-то собирается, там наверняка есть автопрефиксер.

    23) Не проще сделать box-sizing: border-box, как сделано в 15-м примере?

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

    Hidden text