Сокращенная запись border
border рисует линию вокруг элемента, между его padding и margin. Сокращенная запись принимает три части в любом порядке: толщину, стиль и цвет.
| Часть | Полное свойство | Значения | По умолчанию |
|---|---|---|---|
| Толщина | border-width | 1px, 0.2em, thin, medium, thick | medium |
| Стиль | border-style | solid, 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.
| Border | Outline | |
|---|---|---|
| Занимает место | Да, часть размера блока | Нет |
| По сторонам | Да (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.