Свойство border в CSS: как сделать рамку и какие бывают стили

Рамку в CSS задаёт свойство border: толщина, стиль и цвет в одной строке, например border: 1px solid #ccc.

Разбираем все десять стилей линии с картинкой, рамку с одной стороны, скругление через border-radius и ошибки, из-за которых рамки не видно или блок становится шире.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3177 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3831 экспертное мнение Подписаться на Телеграм-канал
Обложка: Свойство border в CSS: как сделать рамку и какие бывают стили

Рамку вокруг элемента в CSS задаёт свойство border. Достаточно одной строки: border: 1px solid #ccc;, где 1px отвечает за толщину, solid за стиль линии, а #ccc за цвет. Обязателен только стиль: без него рамки не будет при любой толщине и цвете.

Ниже разобраны все десять значений border-style с картинкой, рамка с одной стороны, цвет, скругление и ошибки, на которых чаще всего ломается вёрстка. Если CSS для вас пока новая тема, начните с обзора что такое CSS и как его использовать или загляните в подборку курсов по CSS.

CheckroiCheckroiПодборка курсов по CSS181 курс • 37 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как сделать рамку в CSS за три шага

Рой-верстальщик обводит карточку рамкой в редакторе кода

Пример ниже работает в любом браузере. Стили можно положить в отдельный файл или в тег <style>, способы разобраны в инструкции как подключить CSS к HTML.

  1. Дайте элементу класс в HTML: <div class="card">Текст</div>.
  2. В CSS напишите правило для этого класса и свойство border.
  3. Перечислите через пробел толщину, стиль и цвет. Порядок не важен, border: red 4px dashed тоже сработает.
.card {
  border: 1px solid #ccc;
  padding: 16px;
}

Свойство border сокращённое: одна строка заполняет сразу двенадцать отдельных свойств, по ширине, стилю и цвету для каждой из четырёх сторон. Что подставится, если какое-то значение пропустить:

Часть Отдельное свойство Если не указать
Толщина border-width medium, то есть 3px
Стиль border-style none, рамки нет
Цвет border-color currentcolor, цвет текста элемента

Значения по умолчанию взяты из справочника MDN о свойстве border. В Chrome 157 строка border: solid без толщины и цвета даёт рамку 3px цвета текста.

Все стили border-style с примерами

У border-style десять значений. Все они показаны на рамке толщиной 6px, чтобы разница была видна.

Десять значений border-style в CSS: solid, dashed, dotted, double, groove, ridge, inset, outset, none, hidden
Все десять стилей border-style на рамке 6px, кадр из Chrome
Значение Как выглядит Где пригодится
solid сплошная линия карточки, поля ввода, таблицы
dashed штрихи зона загрузки файла, черновые блоки
dotted точки подчёркивание подсказок, разделители
double две параллельные линии рамка «под документ» или сертификат
groove вдавленная канавка ретро-интерфейсы
ridge выпуклый гребень ретро-интерфейсы
inset блок будто утоплен в страницу старые поля ввода
outset блок будто приподнят старые кнопки
none рамки нет сброс рамки у кнопок и полей
hidden рамки нет ячейки таблицы со слитыми границами

Объёмные стили groove, ridge, inset и outset браузер рисует двумя оттенками заданного цвета, поэтому на чёрном и очень тёмном цвете эффект почти не заметен.

Стиль double требует толщины от 3px. По спецификации CSS Backgrounds and Borders две линии и зазор между ними вместе равны border-width. На 2px Chrome рисует сплошную полосу без просвета, на 3px уже линию, зазор и линию по одному пикселю.

Разница между none и hidden видна только в таблице с border-collapse: collapse: hidden у ячейки побеждает рамку соседней ячейки, none уступает ей. В остальных случаях оба значения просто убирают рамку.

Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Рамка только с одной стороны

Для отдельной стороны есть свои сокращённые свойства. Синтаксис тот же, что у border.

.title {
  border-bottom: 3px solid #2563eb; /* линия под заголовком */
}
.note {
  border-left: 6px solid #f59e0b; /* цветная полоса у цитаты */
  padding-left: 16px;
}
  • border-top: сверху;
  • border-right: справа;
  • border-bottom: снизу;
  • border-left: слева.

Цветную полосу слева часто ставят у цитат и врезок. Как оформить сам абзац, показано в разборе тега p в HTML.

Ещё один приём: задать рамку целиком и убрать лишнюю сторону. Например, border: 1px solid #ddd; border-top: none; оставит три стороны.

Если сайт переводят на арабский или иврит, удобнее логические свойства. border-inline-start рисует рамку в начале строки: при обычном направлении текста она слева, а с dir="rtl" браузер сам переносит её направо. В Chrome при ltr получается левая граница 4px, при rtl правая.

Толщина и цвет рамки отдельно

Свойства border-width и border-color принимают от одного до четырёх значений. Порядок такой же, как у отступов: верх, право, низ, лево, по часовой стрелке. Как устроены сами отступы padding и margin, мы разбирали в статье про тег div и оформление блоков.

Запись Что получится
border-width: 2px 2px со всех сторон
border-width: 2px 6px 2px сверху и снизу, 6px по бокам
border-width: 1px 4px 8px 1px сверху, 4px по бокам, 8px снизу
border-color: red green blue orange каждая сторона своим цветом

Вместо пикселей толщину можно задать словами. Спецификация закрепила за ними точные значения: thin равен 1px, medium 3px, thick 5px. Chrome возвращает ровно эти цифры.

Цвет рамки CSS принимает в любом формате: #2563eb, rgb(37 99 235), hsl() или имя вроде red. Два особых значения:

  • currentcolor берёт цвет текста. Удобно для иконок и кнопок: поменяли color, рамка перекрасилась сама;
  • transparent делает рамку прозрачной. Место она при этом занимает, и это пригодится в разделе об ошибках.

Скругление углов через border-radius

Свойство border-radius скругляет углы рамки, фона и тени сразу. Работает и без рамки, на одном фоне. Чаще всего его ставят кнопкам, а как собрать саму кнопку и её состояния, показано в инструкции как сделать кнопку в HTML.

.button {
  border: 2px solid #2563eb;
  border-radius: 16px;   /* мягкие углы */
}
.avatar {
  width: 96px;
  height: 96px;
  border: 4px solid #10b981;
  border-radius: 50%;    /* круг */
}

Значение 50% у квадратного блока даёт круг, у прямоугольного овал. Так делают круглые аватарки: как вставить саму картинку, мы разобрали в статье как вставить картинку в HTML.

Как выглядят рамка с одной стороны, скругление, разные цвета сторон и замены border, видно на втором наборе примеров:

Варианты рамки в CSS: border-bottom, border-left, border-radius, разные цвета сторон, border-image, outline и box-shadow
Рамка с одной стороны, скругление, цвета сторон, border-image и замены border через outline и box-shadow

Рамка с градиентом через border-image

Обычный border-color градиент не принимает. Для градиентной или картиночной рамки есть border-image:

.promo {
  border: 6px solid;
  border-image: linear-gradient(90deg, #2563eb, #ec4899) 1;
}

Цифра 1 в конце задаёт, как нарезать изображение на углы и стороны. Для градиента её хватает.

Ограничение одно, но заметное: border-image не скругляется. Спецификация прямо говорит, что border-radius на картинку рамки не действует. В Chrome при border-radius: 30px угол такой рамки остаётся прямым. Если нужен скруглённый градиент, делают обёртку с градиентным фоном и внутренний блок с отступом.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 800 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Border, outline или box-shadow

Обвести элемент можно тремя свойствами, и они по-разному влияют на размеры.

Свойство Занимает место Повторяет скругление Когда брать
border да да постоянная рамка блока
outline нет да фокус на кнопке, поле или ссылке
box-shadow: 0 0 0 3px нет да рамка при наведении, вторая обводка

По справке MDN об outline, обводки не занимают места и не влияют на раскладку. Блок шириной 300px с outline: 5px остаётся шириной 300px.

Outline браузер рисует на фокусе с клавиатуры, например у ссылок и полей формы. Если убрать его через outline: none и ничего не дать взамен, человек, который ходит по сайту клавишей Tab, перестанет видеть, где он.

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

Рой уверенно проверяет вёрстку по чек-листу

Рамки не видно

Записали border: 2px red и ничего не появилось. Причина в пропущенном стиле: по умолчанию он none, а при none толщина рамки считается нулевой. Chrome в этом случае возвращает ширину 0px.

Решение: всегда указывать стиль, хотя бы solid.

Блок стал шире заданного

По умолчанию width задаёт только ширину содержимого. Рамка и внутренние отступы прибавляются сверху: блок с width: 300px, padding: 20px и рамкой 5px в Chrome занимает 350px.

Решение: box-sizing: border-box, тогда рамка и отступы входят в 300px. Справка по свойству есть на MDN о box-sizing.

*, *::before, *::after {
  box-sizing: border-box;
}

При наведении всё прыгает

Кнопка без рамки на :hover получает border: 2px solid и подрастает. Высота блока с padding: 10px вырастает с 38 до 42px, на 2px с каждой стороны, и соседние элементы сдвинулись.

Решение: задать прозрачную рамку заранее и на наведении менять только цвет. Высота в обоих состояниях остаётся 42px.

.btn {
  border: 2px solid transparent;
}
.btn:hover {
  border-color: #2563eb;
}

Двойные линии в таблице

Если дать рамку и таблице, и ячейкам, между ячейками появятся две линии с зазором. Это режим border-collapse: separate, он стоит по умолчанию.

Решение: border-collapse: collapse на теге table, и соседние рамки сольются в одну (справка: MDN о border-collapse). Как собрать саму таблицу, показано в статье таблица в HTML.

border: none или border: 0

Обе записи убирают рамку: в Chrome у обеих ширина 0px и стиль none. Выбирайте любую, но одну на весь проект, чтобы код читался одинаково.

Где освоить CSS системно

Рамки, отступы и скругления относятся к первому слою вёрстки. Дальше идут flexbox и grid, адаптивность через медиа-запросы, анимации и работа с макетом из Figma. Чем занимается человек, который верстает сайты за деньги, описано в обзоре профессии HTML-верстальщика.

Если хочется пройти CSS по порядку и с проверкой домашних заданий, посмотрите курсы по CSS в нашем каталоге. Ниже пять программ из этого раздела.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
HTML и CSS с нуля
Перейти на сайт курса
SkillboxSkillbox91 626 ₽7635 ₽/мес.11 месяцевОбзор курса
HTML и CSS. Адаптивная вёрстка и автоматизация
Перейти на сайт курса
HTMLAcademyHTML Academy23 400 ₽3900 ₽/мес.2 месяцаОбзор курса
Основы вёрстки HTML и CSS
Перейти на сайт курса
Академия СинергияАкадемия Синергия32 676 ₽2723 ₽/мес.3 месяцаОбзор курса
HTML и CSS с нуляSkyproSkypro195 160 ₽7972 ₽/мес.12 месяцевОбзор курса
Онлайн-курс Вёрстка на HTML и CSS
Перейти на сайт курса
БруноямБруноям36 900 ₽2491 ₽/мес.3 месяцаОбзор курса

Больше программ — в полном каталоге курсов по CSS

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

Что такое border в CSS?

Это свойство, которое рисует рамку вокруг элемента. В одной строке задаются толщина, стиль линии и цвет, например border: 1px solid #ccc. Без стиля рамка не появится.

Как сделать рамку только снизу?

Используйте border-bottom с тем же синтаксисом, что у border: border-bottom: 3px solid #2563eb. Для остальных сторон есть border-top, border-right и border-left.

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

Чаще всего не указан стиль. По умолчанию border-style равен none, и тогда толщина рамки считается нулевой, даже если вы написали 2px и цвет. Добавьте solid или другой стиль.

Что значит border: 2px solid transparent?

Это прозрачная рамка толщиной 2px. Её не видно, но место она занимает. Так делают кнопки, у которых при наведении меняется только цвет рамки, а размеры остаются прежними.

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

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

Что лучше писать: border: none или border: 0?

Результат одинаковый: рамки нет, ширина 0px, стиль none. Выберите один вариант и используйте его во всём проекте.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

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

Напишите, что думаете. Нам важно ваше мнение!