Menu

Рамка в CSS: border, стиль, цвет и border-radius

Свойство border рисует линию вокруг padding элемента. Разберем сокращенную запись border, все стили рамки, цвет и отдельные стороны, скругленные углы через border-radius и чем рамка отличается от outline.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Сокращенная запись border

border рисует линию вокруг элемента, между его padding и margin. Сокращенная запись принимает три части в любом порядке: толщину, стиль и цвет.

ЧастьПолное свойствоЗначенияПо умолчанию
Толщинаborder-width1px, 0.2em, thin, medium, thickmedium
Стильborder-stylesolid, dashed, dotted, double и другиеnone
Цветborder-colorЛюбой цветcurrentColor (цвет текста)

Без стиля не обойтись. По умолчанию он none, поэтому border: 2px #2563eb; вообще ничего не рисует. Если не указать цвет, рамка возьмет цвет текста элемента.

Стили рамки

double нужно минимум 3px, чтобы показать две линии. groove, ridge, inset и outset затеняют цвет для объемного вида и немного различаются в разных браузерах. hidden выглядит как none; они различаются только в таблицах со схлопнутыми рамками, об этом страница про рамки таблиц в HTML.

По одной стороне

У каждой стороны своя сокращенная запись (border-top, border-right, border-bottom, border-left), а у каждой части есть полные свойства для сторон, например border-top-color. Логические версии, border-inline-start и border-block-end, следуют направлению текста:

border-color, border-width и border-style принимают от одного до четырех значений в том же порядке по часовой стрелке, что и padding: верх, право, низ, лево.

Скругленные углы через border-radius

border-radius скругляет углы рамки и фона, поэтому работает и у элементов совсем без рамки.

ЗначениеРезультат
border-radius: 8pxВсе углы скруглены на 8px
border-radius: 50%Круг на квадратном элементе, эллипс на прямоугольном
border-radius: 999pxТаблетка: короткие стороны становятся полными полукругами
border-radius: 8px 0Левый верхний и правый нижний по 8px, два других прямые
border-top-left-radius: 12pxТолько один угол
border-radius: 50% / 25%Эллиптические углы: горизонтальный радиус / вертикальный радиус

Дочерний элемент с фоном может торчать за скругленными углами родителя. overflow: hidden у родителя обрезает его по кривой.

Border и outline

Outline выглядит как рамка, но рисуется снаружи нее и не занимает места, поэтому его добавление ничего не сдвигает. Поэтому браузеры и рисуют обводку фокуса через outline.

BorderOutline
Занимает местоДа, часть размера блокаНет
По сторонамДа (border-top, ...)Нет, только вокруг целиком
Следует border-radiusДаДа, в актуальных браузерах
Отступ от блокаНетДа, outline-offset
Типичное применениеДизайнИндикаторы фокуса, отладка

Частые ошибки

  • Нет стиля рамки. border: 1px #111827; и border-color: red; ничего не рисуют. Добавьте solid (или другой стиль).
  • Рамка при наведении сдвигает раскладку. Зарезервируйте место прозрачной рамкой или используйте outline или box-shadow.
  • Забыли рамку в расчете ширины. Элемент с width: 100% и рамкой вылезает из контейнера при content-box. Используйте box-sizing: border-box.
  • border-radius, а дочерний элемент торчит из углов. Добавьте скругленному родителю overflow: hidden.
  • Удаление обводки фокуса через outline: none. Пользователям клавиатуры она нужна; измените стиль outline, а не удаляйте его.

Часто задаваемые вопросы

Как добавить рамку в CSS?

Используйте сокращенную запись с толщиной, стилем и цветом: border: 2px solid #2563eb;. Главное здесь стиль: без него border-style равен none, и рамка не рисуется.

Почему не отображается рамка в CSS?

Почти всегда потому, что не задан стиль рамки. border: 2px #2563eb; или только border-color: red; ничего не рисуют, ведь border-style по умолчанию none. Добавьте solid, dashed или другой стиль.

Как сделать скругленные углы в CSS?

Используйте border-radius: border-radius: 8px; скругляет все четыре угла. border-radius: 50%; на квадрате дает круг, а большое значение вроде 999px делает форму таблетки. Фон тоже скругляется, даже без рамки.

Как сделать рамку только с одной стороны?

Используйте свойство стороны: border-bottom: 2px solid #e5e7eb; или border-inline-start для стороны, с которой начинается текст, это работает и для языков справа налево.

Чем border отличается от outline?

Border это часть блока: он занимает место и меняет размер элемента. Outline рисуется снаружи рамки, не занимая места, не задается по сторонам, и именно его браузеры используют для обводки фокуса. В актуальных браузерах оба следуют border-radius.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ