Границы

Подкаст CSS – 016: Границы

В модуле блочной модели мы рассмотрели аналогию фрейма для описания каждого раздела блочной модели.

Три рамки для фотографий рядом друг с другом. Поверх средней рамы расположены секции коробчатой ​​модели.

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

Свойства границы

Отдельные свойства border позволяют стилизовать различные части границы.

Поддержка браузера

  • Хром: 1.
  • Край: 12.
  • Фаерфокс: 1.
  • Сафари: 1.

Источник

Стиль

Чтобы граница появилась, вам необходимо определить border-style . Есть несколько вариантов на выбор:

При использовании стилей ridge , inset , outset и groove браузер затемнит цвет границы для второго отображаемого цвета, чтобы обеспечить контраст и глубину. Такое поведение может различаться в разных браузерах, особенно для темных цветов, таких как black . В Chrome эти стили границ будут выглядеть сплошными, а в Firefox они будут осветлены, а второй цвет станет более темным.

Поведение браузера может различаться и для других стилей границ, поэтому важно протестировать свой сайт в разных браузерах. Типичным примером этой разницы является то, как каждый браузер отображает dotted и dashed стили.

Демо-версия границ в Chrome, Firefox и Safari, демонстрирующая тонкие различия в отображении границ.
Границы отображаются в Chrome, Firefox и Safari.

Чтобы установить стиль границы на каждой стороне вашего блока, вы можете использовать border-top-style , border-right-style , border-left-style и border-bottom-style .

стенография

Как и в случае с margin и padding , вы можете использовать сокращенное свойство border , чтобы определить все части вашей границы в одном объявлении.

.my-element {
    border: 1px solid red;
}

Порядок значений в сокращении border следующий: border-width , border-style , а затем border-color .

Цвет

Вы можете установить цвет на всех сторонах вашего блока или на каждой отдельной стороне с помощью border-color . По умолчанию используется текущий цвет текста поля: currentColor . Это означает, что если вы объявляете только свойства границы, такие как ширина, цвет будет соответствовать этому вычисленному значению, если вы не зададите его явно.

.my-element {
    color: blue;
    border: solid; /* Will be a blue border */
}

.my-element {
    color: blue;
    border: solid yellow;
}

Чтобы установить цвет границы на каждой стороне вашего блока, используйте border-top-color , border-right-color , border-left-color и border-bottom-color .

Ширина

Ширина границы определяет толщину линии и контролируется border-width . Ширина границы по умолчанию — medium . Однако это не будет видно, если вы не определите стиль. Вы можете использовать другие именованные ширины, например, thin и thick .

Свойства border-width также принимают единицы длины, такие как px , em , rem или % . Чтобы установить ширину границы на каждой стороне вашего блока, используйте border-top-width , border-right-width , border-left-width и border-bottom-width .

Логические свойства

В модуле «Логические свойства» вы узнали, как ссылаться на поток блоков и встроенный поток, а не на явные верхние, правые, нижние или левые стороны.

У вас есть такая возможность и с границами:

.my-element {
    border: 2px dotted;
    border-inline-end: 2px solid red;
}

В этом примере .my-element имеет все стороны, определенные как имеющие пунктирную границу шириной 2px , которая соответствует текущему цвету текста. inline-end граница строки затем определяется как 2px , сплошная и красная. Это означает, что в языках с письмом слева направо, например в английском, красная рамка будет находиться с правой стороны поля. В языках с письмом справа налево, например арабском, красная рамка будет находиться с левой стороны поля.

Поддержка браузерами логических свойств в границах различается, поэтому обязательно проверьте поддержку перед использованием.

Радиус границы

Чтобы придать окну закругленные углы, используйте свойство border-radius .

.my-element {
    border-radius: 1em;
}

Это сокращение добавляет единую границу в каждый угол вашего блока. Как и в случае с другими свойствами границы, вы можете определить радиус границы для каждой стороны с помощью border-top-left-radius , border-top-right-radius , border-bottom-right-radius и border-bottom-left-radius .

Вы также можете указать радиус каждого угла в сокращении, которое следует порядку: верхний левый, верхний правый, нижний правый, затем нижний левый.

.my-element {
    border-radius: 1em 2em 3em 4em;
}

Определяя одно значение для угла, вы используете другое сокращение, поскольку радиус границы делится на две части: вертикальную и горизонтальную стороны. Это означает, что когда вы устанавливаете border-top-left-radius: 1em , вы устанавливаете радиус верхнего левого верхнего угла и радиус верхнего левого верхнего угла.

Вы можете определить оба свойства для каждого угла следующим образом:

.my-element {
    border-top-left-radius: 1em 2em;
}

Это добавляет значение border-top-left-top 1em и значение border-top-left-left 2em . Это преобразует верхний левый радиус границы в эллиптический радиус, а не в круговой радиус по умолчанию.

Вы можете определить эти значения в сокращении border-radius , используя / для определения эллиптических значений после стандартных значений. Это позволит вам проявить творческий подход и создавать сложные формы.

.my-element {
    border: 2px solid;
  border-radius: 95px 155px 148px 103px / 48px 95px 130px 203px;
}

Границы изображений

Вам не обязательно использовать границу на основе штрихов в CSS. Вы также можете использовать любой тип изображения, используя border-image . Это сокращенное свойство позволяет вам установить исходное изображение, способ его разрезания, ширину изображения, расстояние от края границы до края и то, как она должна повторяться.

.my-element {
  border-image-source: url(https://assets.codepen.io/174183/border-image-frame.jpg);
  border-image-slice: 61 58 51 48;
  border-image-width: 20px 20px 20px 20px;
  border-image-outset: 0px 0px 0px 0px;
  border-image-repeat: stretch stretch;
}

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

border-image-source

border-image-source (источник изображения границы) может быть url любого допустимого изображения, которое включает градиенты CSS.

.my-element {
    border-image-source: url('path/to/image.png');
}

.my-element {
    border-image-source: linear-gradient(to bottom, #000, #fff);
}

border-image-slice

Свойство border-image-slice — полезное свойство, позволяющее разрезать изображение на 9 частей, состоящих из 4 разделенных линий. Он работает как сокращение margin , где вы определяете значение смещения сверху, справа, снизу и слева.

.my-element {
    border-image: url('image.jpg');
    border-image-slice: 61 58 51 48;
}

Изображение, использованное в демонстрации, с четырьмя фрагментами, показанными синими линиями.

После определения значений смещения у вас теперь есть 9 частей изображения: 4 угла, 4 края и средняя часть. Углы применяются к углам элемента с изображением границы. Края применяются к краям этого элемента. Свойство border-image-repeat определяет, как эти края заполняют свое пространство, а свойство border-image-width управляет размером фрагментов.

Наконец, ключевое слово fill определяет, будет ли средняя часть, оставшаяся после нарезки, использоваться в качестве фонового изображения элемента или нет.

border-image-repeat

border-image-repeat — это то, как вы указываете CSS, как вы хотите, чтобы изображение границы повторялось. Он работает так же, как и background-repeat .

  • Начальное значение — stretch , которое растягивает исходное изображение, чтобы заполнить доступное пространство, где это возможно.
  • Значение repeat разбивает края исходного изображения на плитку столько раз, сколько возможно, и для достижения этой цели может обрезать краевые области.
  • Значение round такое же, как и повтор, но вместо обрезки краевых областей изображения, чтобы они соответствовали как можно большему количеству, оно растягивает изображение, а также повторяет его для достижения плавного повтора.
  • Значение space снова такое же, как и повторение, но это значение добавляет пространство между каждой краевой областью для создания бесшовного узора.

Проверьте свое понимание

Проверьте свои знания о границах

Какой цвет границы по умолчанию?

black
Попробуйте еще раз!
white
Попробуйте еще раз!
currentColor
Это специальное значение CSS будет представлять вычисленное значение text-color и является цветом границы по умолчанию.
historicColor
Это выдумано. Попробуйте еще раз!
.my-element {
  border: solid hotpink;
}

Какова ширина границы по умолчанию?

1px
Попробуйте еще раз!
medium
🎉
solid
Это значение border-style , а не значение border-width .

border-inline: 1px solid будет...

поставить границы слева и справа (в латинской раскладке).
🎉
поставить границы сверху и снизу (в латинской раскладке).
В латинской раскладке, такой как английская, border-block будет сверху и снизу.
поместите границы внутри.
Попробуйте еще раз!
поместите границы на первую строку.
Попробуйте еще раз!