Редагуйте товщину рядка атрибута 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.