Свойство text-decoration CSS не может быть переопределено дочерним элементом
Возможный дубликат:
Как мне заставить переопределить текст для оформления CSS?
Взгляните на этот простой пример:
<a href="#"> A <span>red</span> anchor </a>
a {
color:blue;
font-family:Times New Roman;
text-decoration:underline;
}
span {
color:red;
font-family:Arial;
text-decoration:none;
}
Live demo: http://jsfiddle.net/5t9sV/
Как вы можете видеть в демо на JSfiddle, элемент SPAN переопределяет значения свойств color
и font-family
его элемента ANCHOR предка. Однако свойство text-decoration
по какой-то причине не переопределяется.
Я предполагаю, что некоторые свойства CSS могут быть переопределены элементами предка, а некоторые другие свойства CSS не могут.
Это так?
И если да, то как я могу узнать, какие из них можно и нельзя переопределить?
Ответы
Ответ 1
Из text-decoration
spec:
Свойство "text-decoration" для элементов-потомков не может влиять на декорирование предка.
Ответ в связанном вопросе далее цитирует (я больше не могу найти этот текст в спецификации):
Текстовые декорации на встроенных блоках рисуются по всему элементу, пересекая любые элементы-потомки, не обращая внимания на их присутствие.
И еще одна цитата, CSS3, похоже, представляет text-decoration-skip
, предназначенный для решения этой проблемы, применяя свойство к потомку (в вашем случае, <span>
):
Это свойство указывает, в каких частях содержимого элемента должно быть пропущено любое текстовое украшение, влияющее на элемент. Он управляет всеми линиями оформления текста, нарисованными элементом, а также любыми линиями украшения текста, нарисованными его предками.
Ответ 2
Как было предложено Пеккой, вот мой ответ:
Декорация текста Устанавливается, когда вы устанавливаете значение text-decoration. Проблема в том, что, поскольку родительский элемент (якорь) окружает пролет, кажется, что интервал становится подчеркнутым.
Это становится очевидным, если вы установите для текста-декорирование span значение true, потому что оно делает синим подчеркиванием для JUST span.