CSS и вёрстка

Как сделать крестик в css

📅 ⏱ 22:06 ⏳ 2 мин 💬 0

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

Коротко: «крестик» делают двумя линиями под ±45°. Есть два надёжных способа — псевдоэлементы CSS или SVG. Первый — без картинок, второй — гибкий и точный по форме.

Кому и зачемКрестик нужен в модальных окнах, меню (закрыть), в аккордеонах. Покажем оба способа, анимацию и типичные ошибки.

Способ 1: CSS-линиями (без картинок)

Рисуем две линии через ::before и ::after, поворачиваем на 45° и −45°.



CSS
.close {
  position: relative;   /* точка отсчёта для линий */
  width: 40px; height: 40px;
  background: transparent; border: 0; cursor: pointer;
}
.close::before,
.close::after {
  content: '';
  position: absolute;
  top: 50%; left: 8px;
  width: 24px; height: 2px;
  background: #1a1a1a;
  border-radius: 2px;
}
.close::before { transform: translateY(-50%) rotate(45deg); }
.close::after  { transform: translateY(-50%) rotate(-45deg); }

CODE
<svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true">
  <path d="M6 6l12 12M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>

Цвет идёт от текста через currentColor; форма точная и одинаково выглядит во всех браузерах.

CSS
.close::before, .close::after { transition: transform .25s ease; }
.close:hover::before { transform: translateY(-50%) rotate(45deg) scale(1.1); }
.close:hover::after  { transform: translateY(-50%) rotate(-45deg) scale(1.1); }

Практика: три задачи

1. Кнопка «закрыть» в модальном окне

  1. Создайте кнопку и задайте ей размеры (не меньше 40×40).
  2. Добавьте position: relative.
  3. Нарисуйте крестик через псевдоэлементы или вставьте SVG.
  4. Добавьте aria-label="Закрыть".

2. «Плюс → крестик» в аккордеоне

CSS
.plus { position: relative; width: 20px; height: 20px; }
.plus::before, .plus::after { content:''; position:absolute; background:#003F8F; border-radius:2px; }
.plus::before { top:9px; left:2px; width:16px; height:2px; }
.plus::after  { left:9px; top:2px; width:2px; height:16px; transition: transform .25s; }
.is-open .plus::after { transform: rotate(90deg); } /* минус */

Для крестика: .is-open .plus { transform: rotate(45deg); }.

3. Крестик на тёмном фоне

CSS
.close--light::before, .close--light::after { background: #fff; }
Центровка — главная больЕсли крестик выглядит смещённым, проверьте top: 50% и transform: translateY(-50%). Тогда линии пересекаются ровно в центре кнопки.

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

Симптом Причина Решение
Крестик смещён линии без центрирования top:50% + translateY(-50%)
Ничего не видно нет content добавить content:''
Кнопка не кликается нулевой размер задать width/height
Недоступно для скринридера нет подписи aria-label

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

Чек-лист





Что обязательно нужно псевдоэлементу, чтобы он появился?




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

Иконки и сложные формы — SVG (точно и адаптивно). Простые крестики можно и на CSS — без лишних файлов.

Кнопке: border-radius: 50%, border: 2px solid, flex-центрирование, внутри — сам крестик.

Из-за поворота без transform-origin или смещения. Центрируйте через translateY(-50%) и одинаковую ширину.

Используйте <button> (не div) и добавьте видимый фокус через :focus-visible.

Итоги

  • Крестик = две линии под ±45° (CSS) или SVG.
  • Обязательно content:'' у псевдоэлементов.
  • Центрируйте линии, задавайте размеры и aria-label.
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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