← Назад к вопросам

Для чего нужны префиксы свойств?

1.7 Middle🔥 122 комментариев
#Soft Skills и рабочие процессы

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Префиксы свойств в CSS

Префиксы (вроде -webkit-, -moz-, -ms-) — это способ браузеров добавлять поддержку экспериментальных и новых CSS свойств. Это важно понимать для совместимости браузеров.

Что такое префиксы

Префиксы свойств — это приставки к CSS свойствам, которые добавляют браузеры для поддержки новых/экспериментальных функций:

/* Стандартное свойство (работает везде) */
background: linear-gradient(to right, red, blue);

/* Нестандартные версии для старых браузеров */
background: -webkit-linear-gradient(left, red, blue); /* Chrome, Safari */
background: -moz-linear-gradient(to right, red, blue);   /* Firefox */
background: -o-linear-gradient(to right, red, blue);     /* Opera */
background: -ms-linear-gradient(to right, red, blue);    /* IE */

Основные префиксы

ПрефиксБраузерПримеры
-webkit-Chrome, Safari, Edge-webkit-transform, -webkit-box-shadow
-moz-Firefox-moz-appearance, -moz-border-radius
-ms-Internet Explorer, Edge-ms-transform, -ms-filter
-o-Opera (старые версии)-o-transition, -o-transform

Исторический контекст

Почему это нужно?

Когда разработчик CSS рабочей группы хочет добавить новое свойство, он:

  1. Предлагает спецификацию (W3C)
  2. Браузеры начинают экспериментировать с разными реализациями
  3. Добавляют префиксы, чтобы не конфликтовать со стандартом
  4. Со временем стандарт финализируется
  5. Браузеры добавляют версию БЕЗ префикса
/* 2010-2012: Браузеры экспериментируют */
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);

/* 2015+: Стандарт утверждён, браузеры добавляют версию без префикса */
transform: rotate(45deg); /* Работает везде, браузеры поддерживают */

Примеры свойств, которые требовали префиксы

1. Transform

.box {
  -webkit-transform: rotate(45deg) scale(1.2);
  -moz-transform: rotate(45deg) scale(1.2);
  -ms-transform: rotate(45deg) scale(1.2);
  -o-transform: rotate(45deg) scale(1.2);
  transform: rotate(45deg) scale(1.2); /* Современные браузеры */
}

2. Transition

.button {
  -webkit-transition: all 0.3s ease;
  -moz-transition: all 0.3s ease;
  -o-transition: all 0.3s ease;
  transition: all 0.3s ease; /* Стандарт */
}

3. Gradient

.background {
  background: -webkit-linear-gradient(to right, #ff0000, #0000ff);
  background: -moz-linear-gradient(to right, #ff0000, #0000ff);
  background: linear-gradient(to right, #ff0000, #0000ff); /* Стандарт */
}

4. Box Shadow

.card {
  -webkit-box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  -moz-box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Стандарт */
}

5. Appearance (для форм)

input[type="search"] {
  -webkit-appearance: none; /* Убирает стандартный стиль Chrome */
  -moz-appearance: none;    /* Убирает стандартный стиль Firefox */
  appearance: none;         /* Стандарт */
}

Современные требования к префиксам

В 2024 году большинство браузеров поддерживают стандарт БЕЗ префиксов:

/* Современный CSS — в префиксах часто нет необходимости */
transform: rotate(45deg);
transition: all 0.3s;
background: linear-gradient(to right, red, blue);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);

/* Исключение: свойства, которые ещё экспериментальные */
-webkit-mask-image: url(#mask); /* Маски в Safari */
-webkit-user-select: none;       /* Safari требует префикс */
user-select: none;               /* Стандарт */

Когда используют автопрефиксеры

Автопрефиксер (Autoprefixer) — это инструмент, который автоматически добавляет префиксы на основе целевых браузеров:

// package.json или browserslist
{
  "browserslist": [
    "> 1%",           // Браузеры с >1% рынка
    "last 2 versions", // Последние 2 версии
    "IE 11"            // Включаем IE 11 поддержку
  ]
}

Тогда при сборке:

/* Вы пишите */
transform: rotate(45deg);

/* Autoprefixer генерирует для IE 11 */
-ms-transform: rotate(45deg);
transform: rotate(45deg);

Практический пример: Flexbox

/* Без префиксов (современный браузер) */
.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

/* С префиксами для старых браузеров */
.container {
  display: -webkit-box;      /* Safari 6-8, Chrome 10-20 */
  display: -webkit-flex;     /* Safari 6.1-8 */
  display: -moz-box;         /* Firefox 3-21 */
  display: flex;             /* Стандарт */
  
  -webkit-justify-content: center;
  -moz-justify-content: center;
  justify-content: center;
  
  -webkit-align-items: center;
  -moz-align-items: center;
  align-items: center;
}

Пример с Tailwind CSS

Tailwind и PostCSS автоматически добавляют нужные префиксы:

<!-- Вы пишете обычные классы -->
<div class="transform rotate-45 transition-all duration-300"></div>

<!-- Tailwind генерирует CSS с префиксами -->
/* Сгенерированный CSS */
.transform {
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate));
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate));
}

.rotate-45 {
  --tw-rotate: 45deg;
}

.transition-all {
  -webkit-transition-property: all;
  transition-property: all;
  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  -webkit-transition-duration: 150ms;
  transition-duration: 150ms;
}

Когда всё ещё нужны префиксы (в 2024)

1. Safari (из-за -webkit-):

/* Маски в Safari требуют -webkit- */
.element {
  -webkit-mask-image: url(#mask);
  mask-image: url(#mask);
}

/* backdrop-filter требует -webkit- для старого Safari */
.blur {
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

2. user-select:

/* Нужны разные префиксы */
.no-select {
  -webkit-user-select: none;  /* Chrome, Safari, Edge */
  -moz-user-select: none;     /* Firefox */
  -ms-user-select: none;      /* IE */
  user-select: none;          /* Стандарт */
}

3. Экспериментальные свойства:

/* Scroll snap требует -webkit- в Safari */
.container {
  -webkit-scroll-snap-type: y mandatory;
  scroll-snap-type: y mandatory;
}

/* container query (новое, ещё экспериментальное) */
.element {
  container-type: inline-size; /* Может потребоваться префикс в будущем */
}

Лучшие практики

1. Используй Autoprefixer:

npm install --save-dev autoprefixer postcss
// postcss.config.js
module.exports = {
  plugins: [
    require('autoprefixer')
  ]
};

2. Определи целевые браузеры:

// package.json
{
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}

3. Не пиши префиксы вручную (если используешь Autoprefixer):

/* Плохо — ручное добавление */
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);

/* Хорошо — Autoprefixer сделает это */
transform: rotate(45deg);

4. Проверяй поддержку на caniuse.com:

Открываешь https://caniuse.com
Пишешь свойство (например, "transform")
Видишь какие браузеры поддерживают, нужны ли префиксы

Пример из реального проекта PrepBro

/* globals.css с Tailwind */
:root {
  --color-primary: #007bff;
  --transition-fast: 150ms ease;
}

/* Кнопка с переходом */
.btn {
  background-color: var(--color-primary);
  -webkit-transition: all var(--transition-fast);
  transition: all var(--transition-fast);
}

.btn:hover {
  -webkit-transform: translateY(-2px);
  transform: translateY(-2px);
  -webkit-box-shadow: 0 4px 12px rgba(0, 123, 255, 0.3);
  box-shadow: 0 4px 12px rgba(0, 123, 255, 0.3);
}

Выводы

  1. Префиксы добавляют браузеры для экспериментальных свойств
  2. Стандарты эволюционируют — в современных браузерах большинство работает без префиксов
  3. Используй Autoprefixer чтобы не писать вручную
  4. Определи browserslist для нужных браузеров
  5. Некоторые свойства всё ещё требуют префиксы (особенно в Safari)
  6. Проверяй caniuse.com если сомневаешься
  7. Не пиши префиксы вручную — пусть сборщик сделает это
Для чего нужны префиксы свойств? | PrepBro