Css нижнее подчеркивание текста: подчеркивание, зачеркивание текста — учебник CSS

Текст над строкой

Простые задачи в CSS часто имеют не самые очевидные решения. С одним таким случаем мне пришлось недавно столкнуться. Задача была очень простой — добавить на сайт знак ®.

Задача

В отличие от знака торговой марки ™, знак ® не поднят над строкой. Тем не менее, общепринятая практика — располагать его таким же образом, чуть уменьшив в размере.

В HTML есть подходящий элемент — <sup>. По умолчанию, у него есть нужные CSS-свойства: vertical-align:super и font-size:smaller.

<sup>&reg;</sup>

Супер!

В идеальном мире история на этом должна закончиться. В реальности все только начинается.

По условиям задачи знак может находиться практически в любом месте сайта: в основном тексте, заголовках, в элементах интерфейса, и важный момент — внутри ссылок. Это означает, что верстка должна быть гибкой. HTML-код должен быть универсальным, а CSS-стили не должны зависеть от контекста.

Проблема

То, что тег <sup> со стилями по умолчанию не является решением стало понятно сразу.

Наличие выравнивания vertical-align:super приводит к увеличению высоты строки, и к скачущему интерлиньяжу. А font-size:smaller — не самый надежный способ уменьшить размер текста относительно контекста. Реальное значение будет зависеть от контекста не напрямую, а будет вычислено с оглядкой на таблицу абсолютных значений согласно спецификации. В целом браузеры справляются, хотя и по-разному, но есть и исключения. Где-то кегль будет уменьшен недостаточно, а где-то слишком сильно. Привет, IE.

Кроме того, Webkit-браузеры разрывают стандартное подчеркивание (text-decoration: underline), встретив vertical-align:super внутри строки (на самом деле не поэтому, но как один из случаев). Не знаю логичное это поведение или нет, но ссылка с разорванным подчеркиванием выглядит уродливо.

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

Нагуглить готовое решение не получилось. Неплохая попытка — https://gist.github.com/unruthless/413930, но не решена проблема с подчеркиванием. Обращу внимание на хороший комментарий со ссылкой на тест-кейсы для разных знаков.

Решение

Если подстроке задать вертикальное выравнивание не по базовой линии, изменить размер шрифта, или задать позиционирование со смещением, то подчеркивание внутри строки сломается. И это не исправить.

Имитировать text-decoration:underline другими CSS-свойствами в общем случае невозможно. Толщина и положение линии подчеркивания зависят от шрифтовой гарнитуры, кегля, браузера, ОС и режима масштабирования.

Стандартное подчеркивание необходимо сохранить, а значит сокращается набор средств для уменьшения и позиционирования текста над строкой.

Суть решения

  1. Стилизовать не элемент <sup>, а псевдо-элемент с таким же содержимым.

  2. Содержимое псевдо-элемента (свойство content) задать через data-атрибут. Так дублирование контента будет независимым от CSS и приемлимым с точки зрения HTML-семантики.

  3. Добавить обертку и назначить псевдо-элемент на нее. Это нужно, чтобы спрятать оригинальное содержимое с помощью color:transparent, тем самым, оставив его в потоке и резервируя место под стилизованный псевдо-элемент.

  4. Заменить sup на span. (опционально) Объяснение ниже.

  5. Добавить слезы единорога пробел нулевой длины (опционально). Объяснение ниже.

DEMO

Чистое решение.

Сравнение с эталонами — показывает ход решения.

Тестирование решения на разных кеглях.

Детали

Span vs. sup

В IE нельзя задать для sup размер шрифта. Серьезно. IE лучше знает как нужно — тест. Плохо это тем, что ширина площадки, которая резервируется оригинальным содержимым, в IE будет меньше, чем в других браузерах. Для знака ® можно заменить <sup> на <span>, но это недопустимо в других случаях, когда важно сохранить семантику: цифры сносок, степень числа и т.д.

Магические числа vs. font-size:smaller

Font-size:smaller по-разному вычисляется в браузерах, поэтому трудно подобрать компенсирующее смещение для резервирующей площадки.

Магические числа зависят только от ширины гарнитуры. Для распространенных системных шрифтов эти числа колеблются около 0.75em для кегля и 0.25em для смещения.

Для меня вариант с магическими числами был проще, так как их требовалось подобрать только для одной гарнитуры.

Zero-width space. WTF?

В Webkit-браузерах найден странный баг.

Если подчеркнутому тексту задать смену цвета по наведению, и тексту, используя внутреннюю обертку, поменять цвет, то по наведению цвет подчеркивания не меняется.

Проще это увидеть. Тест.

Устранить баг получается, только добавлением текста непосредственно внутрь DOM-узла с подчеркиванием. Пробел нулевой длины подходит для этого лучше остальных символов.

Хаки для старых IE

В IE8 не работает color:transparent, вместо него можно безопасно использовать visibility:hidden

— подчеркивание сохранится;

Для IE7 можно написать экспрешны для before и для color:inherit или упростить стили.

Кроссбраузерность

Решение кроссбраузерное. Тестировалось в:

  • Internet Explorer 8-11
  • Opera 12.16
  • Mozilla Firefox 33 и 3.6.*
  • Google Chrome 39
  • Yandex Browser 14
  • Safari 8

Использовались Windows, Linux и OS X (лень расписывать соответствие версиям браузеров).

Недостатки решения

  • Некрасивое выделение текста — при выделении оригинальный текст перестает быть прозрачным. Этого не видно в OS X, но заметно в Linux и Windows. Эффект можно ослабить, добавив ::selection {background:transparent} на оригинальный контент. Он исчезнет, но при этом прервется выделение.

  • В IE псевдо-элемент копируется вместе с остальным текстом. Во всех браузерах кроме IE контент псевдо-элементов не выделяется и не копируется. В IE иначе, псевдо-элемент выделяется и визуально все хорошо, но при вставке скопированного текста, в нем будут и оригинальный контент и контент псевдо-элемента.

  • Нулевой пробел копируется вместе с остальным текстом. Мне трудно оценить негативные последствия, но ясно, что если они есть, то пользователю будет сложно определить их причину.

  • В старых IE подчеркивание дублируется и поднимается вместе с текстом.

  • Для некрофилов замечу, что в IE6 пробел нулевой длины заменяется на нераспознанный символ.

Итог

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

BTW

Во время работы над задачей родился пример использования несуществующего селектора ::last-letter.

С помощью него было бы удобно убирать нижнее подчеркивание для последнего знака над строкой. Но ребята из W3C уже давно решили, что этому не бывать.

P.S.

@lerarunge:

— Если ты встаешь на путь извращений, ты должен быть готов идти до конца — говорит один фронтендер другому, глядя в код

Как через CSS убрать подчеркивание ссылок? Пособие для новичка :: SYL.ru

Как вписать в свой гардероб наряды с контрастной строчкой — хит нового сезона

Лоферы больше не в моде, а им на смену пришли балетки: идеи стильных образов

Носим тренд девяностых. Зачем модницы выпускают пряди из пучка

Цветной френч — хит конца весны: самые модные оттенки трендового маникюра

Использовать самую обычную тушь: хитрости возрастного макияжа

На пользу. Как правильно принимать душ, чтобы не сушить кожу

Выкапывать, делить или не трогать? Как ухаживать за нарциссами,когда они отцвели

Всего две гантели, чтоб повернуть время вспять: 7 упражнений для женщин после 40

Что такое базальная скорость метаболизма? Научитесь считать- и забудете о весе

Асимметричный хвост или высокий пучок: прически на работу, свидание или в театр

Автор

Язык оформления веб-страницы CSS кажется обманчиво легким для понимания и использования, из-за чего каждый начинающий веб-разработчик торопится вперед на амбразуру, зачастую не выучив досконально структуру и фундамент этого языка разметки.

Это и неудивительно, ведь каскадные таблицы стилей позволяют оформить веб-страницу, просто перечислив необходимые ее свойства, которые можно на раз-два скопировать с учебника.

Проблемы начинаются, когда такой веб-мастер сталкивается с чужим кодом, теряется в нем и не понимает принципы взаимодействия элементов на странице. Из-за попыток манипулировать кодом, страница начинает выглядеть хаотично, топорно, будто ее сверстали на заре Интернета в 90-х годах — все ссылки синие или фиолетовые, а также имеют ужасно устаревшее в плане дизайна подчеркивание. Вот эту проблему мы с вами и научимся решать быстро и просто, используя правильные селекторы и объявления значений.

Инструкция: как в CSS убрать подчеркивание ссылок

За подчеркивание текста отвечает свойство text-decoration. Чтобы полностью убрать нижнее подчеркивание ссылки CSS на странице, мы можем использовать один из следующих способов:

  • непосредственно к тегу ссылки в HTML назначить атрибут style, в котором прописать: text-decoration: none;
  • назначить ссылке id и применить к нему аналогичные свойства;
  • чтобы убрать подчеркивание ссылок CSS для нескольких элементов, необходимо присвоить им класс атрибутом class и прописать такое же свойство, как и для одиночной ссылки.

Помимо всего прочего, есть способ в CSS убрать подчеркивание ссылок на всей странице, для этого необходимо использовать следующий синтаксис:

  • a {text-decoration: none;}.

Подводные камни при работе в CSS со ссылками

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

Ссылки очень привередливы в плане управления ими через CSS. Например, интуитивно кажется, что если установить цвет текста для абзаца красным, то и ссылка в нем должна быть красной — но не тут то было. К каждой ссылке нужен «индивидуальный» подход, а если выражаться более технически точно — сначала в CSS мы должны указать либо id, либо class, либо селектор «a» в виде его местоположения в веб-документе, для которого мы хотим задать свойства. Если свойства прописывать просто для тега «a», то это определит базовые стили ссылок на странице, которые можно переназначить для отдельных элементов на странице с помощью CSS.

Убрать подчеркивание ссылок при наведении — просто, но не очевидно

Что мы имеем в виду, говоря о наведении на ссылку? С технической точки зрения, это является псевдоклассом селектора и определяет его состояние на данный момент. Разнообразие псевдоклассов и их функционал обширные настолько, что им можно выделить отдельную статью, а сейчас нас интересует лишь один псевдокласс — hover. Именно он отвечает за поведение ссылки (или любого другого HTML-тега) при наведении. Теперь, понимая структуру процесса обработки браузером вашего кода, можете использовать данный пример:

  • a: hover {text-decoration: none}.

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


Похожие статьи

  • Фолликулостимулирующий гормон: нормы и отклонения
  • Возврат товара надлежащего качества: когда это возможно?
  • Увеличенный лимфоузел под мышкой? Причины и лечение
  • Перец чили маринованный. Перец чили на зиму: рецепты
  • Кал со слизью — один из первых симптомов неспецифического язвенного колита
  • Возврат товара в течение 14 дней по всем правилам закона
  • Как стать красивой в домашних условиях? Секреты женской красоты

Также читайте

underline-offset — CSS: Каскадные таблицы стилей

Свойство CSS text-underline-offset задает расстояние смещения линии оформления подчеркивания текста (применяется с использованием text-decoration ) от исходного положения.

text-underline-offset не является частью сокращения text-decoration . В то время как элемент может иметь несколько строк text-decoration , text-underline-offset влияет только на подчеркивание и вместо другие возможные варианты оформления строки, такие как поверх линии или сквозная линия .

Синтаксис

 /* Одно ключевое слово */
смещение подчеркивания текста: авто;
/* длина */
смещение подчеркивания текста: 0,1 em;
смещение подчеркивания текста: 3 пикселя;
/* процент */
смещение подчеркивания текста: 20%;
/* Глобальные значения */
смещение текста-подчеркивания: наследовать;
смещение подчеркивания текста: начальное;
смещение подчеркивания текста: не установлено;
 

Свойство text-underline-offset указывается как одно значение из списка ниже.

Значения

авто
Браузер выбирает подходящее смещение для подчеркивания.
<длина>
Указывает смещение подчеркивания как , переопределяя предложение файла шрифта и значение по умолчанию браузера. Рекомендуется использовать единицы em , чтобы смещение масштабировалось вместе с размером шрифта.
<процент>
Указывает смещение подчеркивания как <процент> из 1 em в шрифте элемента. Процент наследуется как относительное значение и, следовательно, масштабируется при изменении шрифта. Для данного применения этого свойства смещение является постоянным для всего поля, к которому применяется подчеркивание, даже если есть дочерние элементы с разными размерами шрифта или выравниванием по вертикали.

Формальное определение

Начальное значение авто
Относится ко всем элементам. Это также относится к ::first-letter и ::first-line .
Унаследовано да
Проценты относятся к размеру шрифта самого элемента
Вычисленное значение 9007 0 как указано
Тип анимации по типу вычисляемого значения

Формальный синтаксис

 авто | <длина> | <процент> 

Примеры

 

Вот текст со смещенным волнистым красным подчеркиванием!


В этом тексте есть строки как сверху, так и снизу. Смещен только нижний.

 р {
  оформление текста: подчеркивание волнистым красным цветом;
  смещение подчеркивания текста: 1em;
}
.twolines {
  цвет оформления текста: фиолетовый;
  text-decoration-line: подчеркивание над чертой;
} 

Технические характеристики

Спецификация Статус Комментарий
Модуль оформления текста CSS, уровень 4
Определение ‘text-underline-offset’ в этой спецификации.
Рабочий проект Исходное определение.

Совместимость с браузером

Таблица совместимости на этой странице создана на основе структурированных данных. Если вы хотите внести свой вклад в данные, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос на включение.

Настольный Мобильный
Chrome Edge Firefox Internet Explorer Opera Safari Веб-просмотр Android Chrome для Android Firefox для Android Opera для Android Safari на iOS Samsung Internet
text-underline-offset Chrome Без поддержки Край Без поддержки Firefox Полная поддержка 70
Полная поддержка 70
Полная поддержка 69

Инвалиды

Disabled Начиная с версии 69: эта функция находится за предпочтением layout. css.text-underline-offset.enabled (должно быть установлено значение true ). Чтобы изменить настройки в Firefox, посетите страницу about:config.
ИЭ Без поддержки Опера Без поддержки Сафари Полная поддержка 12.1 Веб-просмотр Android Без поддержки Chrome Android Без поддержки Firefox Android Без поддержки Opera Android Без поддержки Safari iOS Полная поддержка 12,2 Самсунг Интернет Android Без поддержки
Процентное значение Хром Без поддержки Край Без поддержки Firefox Полная поддержка 74 ИЭ Без поддержки Опера Без поддержки Сафари Без поддержки WebView Android Без поддержки Chrome Android Без поддержки Firefox Android Без поддержки Опера Android Без поддержки Safari iOS Без поддержки Samsung Интернет Android Без поддержки

Легенда

Полная поддержка
Полная опора
Без поддержки
Нет поддержки
Пользователь должен явно включить эту функцию.
Пользователь должен явно включить эту функцию.

См. также

  • украшение текста
  • толщина оформления текста

css — Управление положением подчеркивания в оформлении текста: подчеркивание

спросил

Изменено 2 месяца назад

Просмотрено 110 тысяч раз

Есть ли способ управлять положением подчеркивания в text-decoration: underline?

 Пример ссылки
 

В приведенном выше примере по умолчанию используется подчеркивание… есть ли способ сдвинуть это подчеркивание на несколько пикселей вниз, чтобы между текстом и подчеркиванием было больше места?

  • css
  • подчеркивание

2020

Используйте text-underline-offset !

2012

Единственный способ сделать это — использовать границу вместо подчеркивания. Подчеркивания общеизвестно негибки.

 а {
    нижняя граница: 1px сплошной currentColor; /* Или любой другой цвет */
    текстовое оформление: нет;
}
 

Вот демо. Если этого места недостаточно, вы можете легко добавить больше — если слишком много, это немного менее удобно.

6

Вы можете использовать псевдо до и после вот так. Он хорошо работает и полностью настраивается.

УСБ

 р {
  высота строки: 1,6;
}
.подчеркнуть {
   текстовое оформление: нет;
   положение: родственник;
 }
.подчеркивание: после {
    положение: абсолютное;
    высота: 1 пиксель;
    поле: 0 авто;
    содержание: '';
    слева: 0;
    справа: 0;
    ширина: 90%;
    цвет: #000;
    цвет фона: красный;
    слева: 0;
    внизу: -3px; /* настроить это для перемещения вверх и вниз. вам, возможно, придется отрегулировать высоту строки абзаца, если вы сильно сместите его вниз. */
}
 

HTML

 

Это пример текста. На этой странице вы можете прочитать дополнительный текст или посетить книжный магазин, чтобы прочитать пример текста позже.

Вот более продвинутая демонстрация с прикрепленным снимком экрана, который я сделал, анимирует подчеркивание на . зависание, изменение цвета и т.д…

http://codepen.io/bootstrapped/details/yJqbPa/

4

Существует предлагаемое свойство text-underline-position в CSS 3, но, похоже, оно еще не реализовано ни в одном браузере.

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

Обратите внимание, что подчеркивание не добавляется к общей высоте элемента, в отличие от нижней границы. В некоторых ситуациях вы можете использовать layout-bottom , который не добавляется к общей высоте (хотя он не так широко поддерживается, как border-bottom ).

1

Существует свойство text-underline-offset в модуле оформления текста CSS уровня 4, которое позволяет перемещать оформление на указанное расстояние от его исходного положения.

Поддерживается в Safari 12.1+, Firefox 70+ и Chrome 87+ (выпущено 17 ноября 2020 г.).

text-underline-offset свойство принимает следующие значения:

  • auto — по умолчанию, заставляет браузер выбрать соответствующее смещение.
  • from-font — если используемый шрифт указывает предпочтительное смещение, используйте его, в противном случае он возвращается к auto .
  • — указать расстояние в «обычных» единицах длины CSS. Используйте em , чтобы обеспечить пропорциональное масштабирование с размером шрифта .

Пример ниже:

 p {
  оформление текста: подчеркивание;
  цвет оформления текста: красный;
  нижняя граница: 1. 5em;
}
р.тест {
  положение: родственник;
}
p.test::после {
  положение: абсолютное;
  содержание: '';
  дисплей: блок;
  высота: 1 пиксель;
  ширина: 100%;
  фон: синий;
  внизу: 0;
} 
 

Если вы видите наше красное подчеркивание под синей линией, это свойство работает в вашем браузере.

А теперь давайте попробуем это с `text-underline-offset`, установленным на `auto`.

С `text-underline-offset`, установленным в `from-font`, это, вероятно, выглядит так же, как и выше.

2

вы можете использовать text-underline-position: under;

 <тело>
   

<а href="#" > Моя ссылка

для получения более подробной информации посетите https://developer.mozilla.org/en-US/docs/Web/CSS/text-underline-position

Используйте нижнюю границу вместо подчеркивания

 a{
    нижняя граница: 1px сплошная #000;
    отступ снизу: 2px;
}
 

Измените padding-bottom, чтобы настроить пространство

Использование border-bottom-width и border-bottom-style сделает рамку того же цвета, что и текст по умолчанию:

 text-decoration: none;
ширина нижней границы: 1px;
нижняя граница: сплошная;
отступ снизу: 1px;
 

Есть одно свойство text-underline-position: under . Но поддерживается только в Chrome и IE 10+.

Подробнее: https://css-tricks.com/almanac/properties/t/text-underline-position/ https://developer.mozilla.org/en-US/docs/Web/CSS/text-underline-position

Вместо этого я бы использовал границу. Это легче контролировать.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *