Сначала это кажется странным, но это поведение встроено в спецификацию CSS:
Это свойство не наследуется, но элементы должны соответствовать своим родителям. Например, если элемент подчеркнут, строка должна охватывать дочерние элементы. Цвет подчеркивания останется прежним, даже если у дочерних элементов будут разные значения «цвета».
См. http://www.w3.org/TR/REC-CSS1/#text-decoration.
Это своего рода специальное наследование, отличающееся от стандартного наследования CSS, поэтому его нельзя переопределить другими правилами, более конкретными селекторами или! Важным.
Полагаю, это потому, что эффекты оформления текста изначально были разработаны для применения к встроенным, а не блочным элементам. Представьте себе ссылку с промежутком внутри нее - для промежутка имеет смысл принять свойства оформления текста родительской ссылки.
На самом деле нет исправления без настройки HTML. Самый простой способ избежать этой проблемы - избегать установки декорирования текста для блоков (особенно для блоков-контейнеров, таких как <div class="line">
). Я бы использовал что-то вроде:
<html>
<head>
<style type="text/css">
.line {color:red; text-transform:uppercase; text-decoration:underline;}
.line2 {color:blue; text-transform:none;}
.others {color:black; text-transform:lowercase; text-decoration:blink; font-weight:bold;}
</style>
</head>
<body>
<div>
<span class="line">line 1</span>
<div class="others"><BR>some OTHER text<BR></DIV>
<div class="line2">
<BR>line 2
</div>
</div>
</body>
</html>
Хорошая находка - всегда приятно узнавать что-то новое!