CSS и вёрстка

Как с помощью js изменить CSS

Как с помощью js изменить CSS 📅 ⏱ 06:01 ⏳ 2 мин 💬 0

Как с помощью js изменить css: простыми словами, по шагам и с примерами. Разбираем, как это работает на практике, типичные ошибки и лучшие решения. Раскрываем т

Как с помощью js изменить CSS

Коротко: изменить CSS из JavaScript можно тремя способами: через инлайн-стили элемента (element.style), через добавление и удаление классов (classList), и через CSS-переменные (setProperty). Первый — точечно, второй — предпочтительно, третий — для «глобальных» настроек вроде темы.

Кому и зачемJS нужен, когда стиль зависит от действий пользователя: тема, открытое меню, размер окна, состояние формы. Но менять стили лучше классами, а сами правила держать в CSS.

Три способа

Способ Плюсы Минусы
element.style быстро и просто инлайн-стили, сложно поддерживать
classList стили в CSS, логика в JS нужны заранее описанные классы
setProperty управление токенами/темой нужны CSS-переменные

Вкладки: примеры




JAVASCRIPT
const el = document.querySelector('.card');

el.style.background = '#003F8F';
el.style.borderRadius = '12px';   // camelCase!
el.style.setProperty('font-size', '18px');

Свойства CSS пишут в camelCase: background-color → backgroundColor. Для свойств с дефисом удобнее setProperty().

JAVASCRIPT
const menu = document.querySelector('.menu');

menu.classList.toggle('is-open');
menu.classList.add('is-active');
menu.classList.remove('is-hidden');
CSS
/* стили живут в CSS */
.menu.is-open { max-height: 400px; opacity: 1; }

Рекомендуемый способ: JS только «переключает состояние», а как выглядит состояние — решает CSS. Так код проще поддерживать и тестировать.

JAVASCRIPT
// переключить тему
document.documentElement.style.setProperty('--brand', '#992222');

// сбросить к значению из CSS
document.documentElement.style.removeProperty('--brand');
JAVASCRIPT
:root { --brand: #003F8F; }
.btn { background: var(--brand); }

Идеально для тёмной темы и «акцентного» цвета: меняете одну переменную — обновляется весь сайт.

JAVASCRIPT
const sheet = document.styleSheets[0];
sheet.insertRule('.new-class { color: red; }', sheet.cssRules.length);

CSSOM (объектная модель стилей) позволяет добавлять правила целиком. Это нужно редко — например, для генерации стилей «на лету». Для обычных задач хватает классов и переменных.

Инлайн-стили бьют почти всёСтиль, заданный через element.style, перебивает CSS-классы. Если потом «правки не применяются» — проверьте, не остался ли инлайн-стиль. Для сброса используйте el.style.removeProperty('background').

Практика: меню на JavaScript

  1. В CSS опишите состояния: .menu и .menu.is-open.
  2. В JS повесьте обработчик на кнопку.
  3. Переключайте класс: menu.classList.toggle('is-open').
  4. Не задавайте стили напрямую в JS.
  5. Проверьте доступность: aria-expanded для кнопки.
CSS
button.addEventListener('click', () => {
  menu.classList.toggle('is-open');
  button.setAttribute('aria-expanded', menu.classList.contains('is-open'));
});

Частые ошибки: причина → решение

Симптом Причина Решение
Стиль «не тот» camelCase или дефис backgroundColor / setProperty
Класс не работает правила нет в CSS описать состояние
Не применяется правка старый инлайн-стиль removeProperty()
Дёргается при скролле частые изменения стиля переключать класс, а не стили

Проверьте себя

Чек-лист




Какой способ менять CSS из JS предпочтительнее?




Для чего лучше всего подходят CSS-переменные из JS?




Вопросы и ответы

Потому что в JS дефис нельзя использовать в имени свойства — его пишут camelCase. Или применяют setProperty('background-color', ...).

Классовое переключение обычно эффективнее и предсказуемее: браузер сам применяет набор стилей, а код остаётся чистым.

Поменяйте CSS-переменную на :root — все правила с var() обновятся. Либо добавьте класс контейнеру и опишите вариант в CSS.

Да, но плавность задавайте в CSS (transition), а JS только переключайте класс. Ручное изменение стилей в цикле анимации тормозит.

Итоги

  • element.style — точечно; имена в camelCase.
  • classList — предпочтительный способ; правила в CSS.
  • setProperty — для тем и токенов через CSS-переменные.
  • Инлайн-стили перебивают классы — не злоупотребляйте ими.
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

Пока комментариев нет — будьте первым, кто поделится мнением.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получите консультацию нашего маркетолога

Изучит ваш проект, подберет подходящие услуги и тарифы

Получите бесплатный аудит

Наш специалист сделает базовый аудит вашего проекта и предложит персональные предложения.

Закажите услугу Каталог морепродуктов

Наш специалист свяжется с вами в ближайшее время и уточнит детали

Закажите адаптивный сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт лендинг

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт каталог

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите интернет-магазин

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите веб-приложение

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите тариф Аутсорс

Стоимость от 150 000 ₽

Закажите тариф Магазин

Стоимость 90 000 ₽

Закажите тариф Классический

Стоимость 60 000 ₽

Закажите тариф Эконом

Стоимость 40 000 ₽

Закажите SEO продвижение

Наш специалист свяжется с вами, проведет анализ, предложит стоимость