Редагуйте товщину рядка атрибута CSS "підкреслення"


118

Оскільки ви можете підкреслити будь-який текст у CSS так:

H4 {text-decoration: underline;}

Як ви можете потім редагувати намальовану "лінію", колір, який ви отримуєте на лінії, легко вказати як "color: red", але як можна редагувати висоту лінії, тобто товщину?


10
h4 {border-bottom: 10px solid #000;}
— Пранів 웃

@PranavKapoor - приємно! Це геніально, дуже дякую. Як я можу встановити ширину цієї межі на "auto" зараз, хоча вона обмежує лише тег H4, а не всю ширину, що містить div?

Ви можете додати, display:inline-blockщоб переконатися, що встановлена ​​ширина. Однак <h4>краще використовувати елемент всередині та стилізувати внутрішній. Перевірте мою відповідь нижче.
— Пранів 웃

1
@PranavKapoor - знову правильно! Ти як CSS ніндзя. Спасибі людина. Я використав цю відповідь, яку ви дали у коментарі, а не вашу відповідь, розміщену нижче. Таким чином, я вважаю, що краще, оскільки вам не потрібно загортати текст в інший тег <u>. Ви повністю контролюєте це з боку CSS.

Відповіді:


92

Ось один із способів досягнення цього:

HTML:

<h4>This is a heading</h4>

<h4><u>This is another heading</u></h4>

CSS:

 u {
    text-decoration: none;
    border-bottom: 10px solid black;
  }​

Ось приклад: http://jsfiddle.net/AQ9rL/


91
... або декілька рядків тексту
— cfx

У такому випадку вам потрібно обернути текст з кожного рядка, до та після переривання рядка <span>та застосувати там межу з нижньою межею. Це рішення, яке може бути болісним у не жорстких кодованих сценаріях.
— Фабіан

@cfx, якщо зможете, ви все одно можете це зробити display: inline;(але це більше не буде блоком будь-якого типу, могло б комусь допомогти)
— jave.web

Ти зробив мій день. ЗАВДЯКИ
— Tessaracter

Це призведе до зміни макета. Кордон змусить інші елементи рухатися, на відміну від підкреслення, яке не буде.
— Джоел Карунунган

51

Нещодавно мені довелося розібратися з FF, який підкреслює, що був занадто товстим і занадто далеким від тексту у FF, і я знайшов кращий спосіб впоратися з ним за допомогою пари поля-тіней:

.custom-underline{
    box-shadow: inset 0 0px 0 white, inset 0 -1px 0 black
}

Перша тінь кладеться поверх другої, і саме так ви можете керувати другою, змінюючи значення 'px' обох.

Плюс: різні кольори, товщина та положення підкреслення

Мінус: не можна використовувати на неміцному тлі

Тут я зробив пару прикладів: http://jsfiddle.net/xsL6rktx/


4
Як акуратно. Професіонал (як на мене, щонайменше) для цього по відношенню до нижньої межі полягає в тому, що товщина "лінії" зростає у напрямку до тексту, що робить розрив між текстом і рядком менш величезним.
— Віктор Хяггвіст

При цьому я отримую вертикальні лінії в пів пікселя на додаток до підкреслення під час цього.
— yeahdixon

Здається, це було в один момент ідеальною відповіддю, але я отримую дуже тонкі вертикальні лінії з кожного боку елемента в Chrome 66
— маленький крихітний чоловік

Замість білого , використання прозорого спрацювало б у випадку будь-якого фону.
— Джей Даданія

Це найкраща відповідь. Не потрібно змінювати HTML і чисте CSS рішення, яке не змінює позиції, як, наприклад, те, що роблять кордони.
— Joel Karunungan

15

Дуже просто ... зовні "прольотовий" елемент з невеликим шрифтом та підкресленням, а всередині "шрифтовим" елементом з більшим розміром шрифту.

<span style="font-size:1em;text-decoration:underline;">
 <span style="font-size:1.5em;">
   Text with big font size and thin underline
 </span>
</span>


8
Якщо ви заміните застарілий <font>тег spanтегом, це буде єдиною відповіддю, яка насправді вирішує питання.
— Маттео

11

Ще один спосіб зробити це - використовувати ": after" (псевдоелемент) на елементі, який потрібно підкреслити.

h2{
  position:relative;
  display:inline-block;
  font-weight:700;
  font-family:arial,sans-serif;
  text-transform:uppercase;
  font-size:3em;
}
h2:after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  right:0;
  margin:auto;
  background:#000;
  height:1px;

}

10

Наразі є text-decoration-thicknessчастиною модуля декорування тексту CSS рівень 4 . Це знаходиться на етапі "Чернетка редактора" - значить, це незавершене виробництво та може змінитися. Станом на січень 2020 року його підтримують лише Firefox та Safari .

Властивість CSS-товщини тексту-прикраси задає товщину чи ширину лінії прикраси, яка використовується в тексті в елементі, такому як проріз, підкреслення чи накладання.

a {
  text-decoration-thickness: 2px;
}

Codepen: https://codepen.io/mrotaru/pen/yLyLOgr (лише для Firefox)


Також text-decoration-colorє частина модуля декорування тексту CSS рівня 3 . Це більш зріло (рекомендація щодо кандидата) і підтримується в більшості основних браузерів (виняток становлять Edge та IE). Звичайно, він не може бути використаний для зміни товщини лінії, але може бути використаний для досягнення більш "приглушеного" підкреслення (також показаного в кодпені).


Якщо користувач перебуває на Firefox, можна отримати доступ до всіх речей із оформленням тексту text-decoration. Я не знаю, чи планується це включити до всіх, але якщо так, то це буде дуже приємно в майбутньому. EDIT: це робочий проект для підтримки цього вtext-decoration .
— Штурмував

9

Я зроблю щось просте на кшталт:

.thickness-underline {
    display: inline-block;
    text-decoration: none;
    border-bottom: 1px solid black;
    margin-bottom: -1px;
}
  • Ви можете використовувати line-heightабо padding-bottomвстановлювати можливість між ними
  • Ви можете використовувати display: inlineв деяких випадках

Демо: http://jsfiddle.net/5580pqe8/

CSS підкреслюють


На жаль, нижня межа не може отримати негативні значення.
— підошва

5
@soleshoe Це неправильно, ви можете мати від'ємний запас у нижній частині елемента.
— Алекс

7

Канал background-imageтакож може бути використаний для створення підкреслення.

Це потрібно змістити вниз background-positionі повторити горизонтально. Ширину рядка можна певною мірою регулювати, використовуючи background-size(фон обмежений полем вмісту елемента).

.underline
{
    --color: green;
    font-size: 40px;
    background-image: linear-gradient(var(--color) 0%, var(--color) 100%);
    background-repeat: repeat-x;
    background-position: 0 1.05em;
    background-size: 2px 5px;
}
<span class="underline">
     Underlined<br/>
     Text
</span>


6

a {
  text-decoration: none;
  position: relative;
}

a.underline {
  text-decoration: underline;
}

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
<h1><a href="#" class="underline">Default: some text alpha gamma<br>the quick brown fox</a></h1>
<p>Working:</p>
<h1><a href="#" class="shadow">Using Shadow: some text alpha gamma<br>the quick brown fox<br>even works with<br>multiple lines</a></h1>
<br>

Остаточне рішення: http://codepen.io/vikrant-icd/pen/gwNqoM

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}

1
Проблема підкреслена, різні веб-переглядачі надаються по-різному.
— Joel Karunungan

3

Завдяки магії нових опцій css, це тепер можливо на самому світі:

a {
  text-decoration: underline;
  text-decoration-thickness: 5px;
  text-decoration-skip-ink: auto;
  text-underline-offset: 3px;
}

На сьогодні підтримка відносно погана . Але він потрапить у інші браузери, ніж ff зрештою.


2

Моє рішення: https://codepen.io/SOLESHOE/pen/QqJXYj

{
    display: inline-block;
    border-bottom: 1px solid;
    padding-bottom: 0;
    line-height: 70%;
}

Ви можете налаштувати положення підкреслення за значенням висоти лінії, товщиною підкреслення та стилем у нижній частині рамки.

Не забудьте відключити поведінку підкреслення за замовчуванням, якщо ви хочете підкреслити href.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.