- Edit line thickness of CSS ‘underline’ attribute
- and styling the inner one would be better. Check my answer below.
- 11 Answers 11
- text-decoration
- Try it
- Constituent properties
- Syntax
- Values
- Formal definition
- Formal syntax
- Examples
- Demonstration of text-decoration values
- Result
- Specifications
- Browser compatibility
- See also
- Found a content problem with this page?
- MDN
- Support
- Our communities
- Developers
- Нестандартное подчёркивание текста на чистом CSS. Свойство text-decoration
- Свойство text-decoration
- text-decoration-line
- text-decoration-color
- text-decoration-style
- text-decoration-thickness
- text-underline-offset
- Как узнать параметры нестандартного подчёркивания
- Расстояние от текста до линии
- Толщина линии подчеркивания
Edit line thickness of CSS ‘underline’ attribute
How can you also then edit the ‘line’ that is drawn, the color you get on the line is easily specified as color: red but how does one edit the height of the line, i.e. the thickness?
@PranavKapoor — Nice! That’s brilliant, thank you very much. How do I set the width to this border to ‘auto’ now though so that it only borders the H4 tag and not the entire width of the containing div?
You can add display:inline-block to make sure that the width is set, However, using an element inside
and styling the inner one would be better. Check my answer below.
@PranavKapoor — right again! You’re like a CSS ninja. Thanks man. I used this answer you gave in the comment rather than your answer posted below. This way I think is better since you don’t need to wrap your text in another tag. You completely control this from the CSS side.
11 Answers 11
Here is one way of achieving this :
This is a heading
This is another heading
In that case you have to wrap the text from each line, before and after the line-break with and apply the border-bottom in there. It’s a workaround that could be painful in non-hardcoded scenarios though.
@cfx if you can, you can still do this with display: inline; (but it would no longer be block of any kind then, could help somebody though)
This will cause the layout to change. A border will force other elements to move, unlike an underscore which will not.
Recently I had to deal with FF which underlines were too thick and too far from the text in FF, and found a better way to deal with it using a pair of box-shadows:
First shadow is put on top of the second one and that’s how you can control the second one by varying the ‘px’ value of both.
Plus: various colors, thickness and underline position
Minus: can not use on non-solid backgrounds
How neat. A pro (to me atleast) for this one in respect to border-bottom is that the «line» thickness grows towards the text, which makes the gap between text and line less huge.
Seems like it was at one point a perfect answer, but I get very very thin vertical lines on each side of the element in Chrome 66
This is best answer. There’s no need to alter the HTML and pure CSS solution which won’t alter positions like what borders do.
There is text-decoration-thickness , currently part of CSS Text Decoration Module Level 4. It’s at «Editor’s Draft» stage — so it’s a work in progress and subject to change. As of October 2022, it has about 93% coverage so it’s pretty safe to use.
The text-decoration-thickness CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.
There’s also text-decoration-color , which is part of CSS Text Decoration Module Level 3. This is more mature (Candidate Recommendation) and is supported in most major browsers (exceptions are Edge and IE). Of course it can’t be used to alter the thickness of the line, but can be used to achieve a more «muted» underline (also shown in the codepen).
text-decoration
The text-decoration shorthand CSS property sets the appearance of decorative lines on text. It is a shorthand for text-decoration-line , text-decoration-color , text-decoration-style , and the newer text-decoration-thickness property.
Try it
Text decorations are drawn across descendant text elements. This means that if an element specifies a text decoration, then a child element can’t remove the decoration. For example, in the markup
This text has some emphasized words in it.
, the style rule p < text-decoration: underline; >would cause the entire paragraph to be underlined. The style rule em < text-decoration: none; >would not cause any change; the entire paragraph would still be underlined. However, the rule em < text-decoration: overline; >would cause a second decoration to appear on «some emphasized words».
Constituent properties
This property is a shorthand for the following CSS properties:
Syntax
text-decoration: underline; text-decoration: overline red; text-decoration: none; /* Global values */ text-decoration: inherit; text-decoration: initial; text-decoration: revert; text-decoration: revert-layer; text-decoration: unset;
The text-decoration property is specified as one or more space-separated values representing the various longhand text-decoration properties.
Values
Sets the kind of decoration used, such as underline or line-through .
Sets the color of the decoration.
Sets the style of the line used for the decoration, such as solid , wavy , or dashed .
Sets the thickness of the line used for the decoration.
Formal definition
- text-decoration-color : currentcolor
- text-decoration-style : solid
- text-decoration-line : none
- text-decoration-line : as specified
- text-decoration-style : as specified
- text-decoration-color : computed color
- text-decoration-thickness : as specified
- text-decoration-color : a color
- text-decoration-style : discrete
- text-decoration-line : discrete
- text-decoration-thickness : by computed value type
Formal syntax
Examples
Demonstration of text-decoration values
.under text-decoration: underline red; > .over text-decoration: wavy overline lime; > .line text-decoration: line-through; > .plain text-decoration: none; > .underover text-decoration: dashed underline overline; > .thick text-decoration: solid underline purple 4px; > .blink text-decoration: blink; >
p class="under">This text has a line underneath it.p> p class="over">This text has a line over it.p> p class="line">This text has a line going through it.p> p> This a class="plain" href="#">link will not be underlineda>, as links generally are by default. Be careful when removing the text decoration on anchors since users often depend on the underline to denote hyperlinks. p> p class="underover">This text has lines above em>andem> below it.p> p class="thick"> This text has a really thick purple underline in supporting browsers. p> p class="blink"> This text might blink for you, depending on the browser you use. p>
Result
Specifications
Browser compatibility
BCD tables only load in the browser
See also
- The individual text-decoration properties are text-decoration-line , text-decoration-color , text-decoration-style , and text-decoration-thickness .
- The text-decoration-skip-ink , text-underline-offset , and text-underline-position properties also affect text-decoration, but are not included in the shorthand.
- The list-style attribute controls the appearance of items in HTML and lists.
Found a content problem with this page?
This page was last modified on Apr 20, 2023 by MDN contributors.
Your blueprint for a better internet.
MDN
Support
Our communities
Developers
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
Нестандартное подчёркивание текста на чистом CSS. Свойство text-decoration
В HTML есть несколько тегов, которые помогают обратить внимание на текст — подчеркнуть, выделить его или акцентировать на чём-то внимание. У таких тегов есть стили по умолчанию, и к некоторым из них мы давно привыкли.
Например, мы знаем, что обычно все ссылки на сайте подчёркнуты, текст внутри тега никому не нужен перечёркнут, а всё, что находится внутри тега , выделено жёлтым цветом.
Но с помощью text-decoration текст можно даже подчеркнуть сверху (что? да!). Давайте разберёмся, как это сделать.
Свойство text-decoration
- line-through — зачёркивание посередине текста;
- overline — надчёркивание, над текстом;
- underline — подчёркивание, под текстом;
- none — не используется декор;
- inherit — наследуется.
Например, свойство для подчёркнутого текста записывается просто как
text-decoration — это сокращённая форма записи для набора CSS-свойств text-decoration-line , text-decoration-color , text-decoration-style и text-decoration-thickness . Перечисленные свойства используются для более тонкой настройки параметров подчёркивания.
text-decoration-line
text-decoration-line — отвечает за тип линии: подчёркнуто, перечёркнуто, без подчёркивания, подчёркивание над текстом, а не под ним.
text-decoration-line: underline; /* обычное подчёркивание */
text-decoration-line: line-through; /* текст перечёркнут */
text-decoration-line: overline; /* подчёркивание над текстом */
text-decoration-line может принимать сразу несколько значений, например, text-decoration-line: underline line-through; . В этом случае у текста будет подчёркивание и зачёркивание.
text-decoration-color
text-decoration-color управляет цветом подчёркивания. По умолчанию он, то есть цвет подчёркивания, совпадает с цветом текста.
.red-line Красная пунктирная линия
text-decoration-style
Стиль линии (сплошная, волнистая, точками, тире и другие) настраивается через CSS-свойство text-decoration-style .
- solid — обычная сплошная линия;
- double — двойная линия;
- dotted — пунктирная линия (пунктир из точек);
- dashed — тоже пунктирная линия, но пунктир из коротких линий;
- wavy — волнистая линия.
text-decoration-thickness
text-decoration-thickness задаёт толщину линии.
text-decoration-thickness: 5px;
text-underline-offset
До недавнего времени внешним видом подчёркивания управляли только эти четыре CSS-свойства ( text-decoration-line , text-decoration-color , text-decoration-style и text-decoration-thickness ). Но были ситуации, когда перечисленных свойств было недостаточно. К примеру, нужно реализовать выделение активного пункта меню на сайте:
Если использовать только text-decoration , нужное подчёркивание не реализовать. Его, конечно, можно добавить за счёт нижней границы, стилизации через псевдоэлементы или другими странными методами.
Но всё упростилось с появлением text-underline-offset . Свойство устанавливает смещение подчёркивания от его исходного положения и используется в связке со свойством text-decoration .
У свойства text-underline-offset хорошая браузерная поддержка, оно работает в большинстве современных браузеров, кроме Firefox под Android.
🔥 Как работать в Фигме Инструкция для начинающих.
Как узнать параметры нестандартного подчёркивания
Все параметры для подчёркивания будем доставать из макета в Figma.
Нам нужны два параметра — расстояние от текста до линии и толщина линии. Цвет подчёркивания обычно совпадает с цветом текста, поэтому специально искать этот параметр обычно не нужно.
Расстояние от текста до линии
Чтобы измерить расстояние между объектами, достаточно выбрать первый объект, нажать Alt/Option и навести на второй. Выделяем текстовый слой и с зажатой клавишей Alt/Option наводим курсор мыши на линию подчёркивания. В тултипе оранжевого цвета выводится количество пикселей между текстом и объектом, на который навели. В нашем случае — это значение 20 .
Запишем это значение в CSS-свойство text-underline-offset :
.active color: #ffffff; text-decoration: underline; /* Смещаем подчёркивание на 20 пикселей вниз */ text-underline-offset: 20px; >
Толщина линии подчеркивания
Выделим объект с подчёркиванием. После этого на панели справа, на вкладке Inspect найдём свойства объекта. Нас интересует свойство Height (высота).
Свойство отображается и в разделе Properties, и в разделе Code. В примере толщина подчёркивания — 4 пикселя. Напомним, в CSS толщиной подчёркивания управляет свойство text-decoration-thickness . Допишем в правило определение толщины подчёркивания:
А теперь давайте сравним с помощью расширения Perfect Pixel макет и полученную вёрстку.
Это произошло из-за того, что по умолчанию отступ отсчитывается от базовой линии текста, а Фигма показывает расстояние от нижней границы текстового блока.
💡 Базовая линия — эта линия на которой буквы «стоят». Она проходит по самому нижнему краю букв c плоской нижней частью.
Способов решить задачу (имеется в виду попасть в макет) несколько.
- Обновить границы слоя, чтобы они соответствовали базовой линии. Этот способ измерения предлагает сама Фигма в документации. В Фигме есть возможность текстовому блоку задать Fixed Size.
Но у этого способа есть минус. Если изменится размер шрифта, либо поменяется содержимое текстового блока, ломается раскладка макета. Это разрушительный для макета способ. Придётся высоту блоку заново устанавливать. Куда удобнее оставить автоматическую высоту для него.
- Использовать новое CSS-свойство text-underline-position со значением under . В этом случае базовая «нулевая» позиция будет установлена не по базовой линии, а по нижней границе блока, и text-underline-offset будет отсчитываться от того же базового положения, что и в редакторе Figma.
На этом всё — пробуйте, экспериментируйте и изучайте вёрстку, а мы вам в этом поможем.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.