Jump to content
  • 0

Не пойму поведение стилевого атрибута text-transform


9190
 Share

Question

Просьба к модераторам переименовать тему в "Не пойму поведение стилевого атрибута text-decoration". Я ошибся и перепутал в названии стилевой атрибут.

Вот такой пример кода (внутри которого и сам вопрос):

<html>

<head><title>Черновик</title></head>

<body>

<p style="text-decoration: line-through;">Здесь идёт перечёркнутый текст. <span style="text-decoration: none;">А здесь должен быть неперечёркнутый. Но почему отображается перечёркнутый?</span></p>

Почему не действует внутренний элемент, где я отменяю перечёркивание? Здесь же написано, что значение none отменяет все эффекты, в том числе и подчёркивания у ссылок, которое задано по умолчанию. В параграфе ниже всё работает. Я там проделал по тому же принципу: для всего параграфа переназначил стиль, а в конкретной фразе отменил стиль, и всё сработало.

<p style="text-transform: uppercase;">Для всего этого параграфа задан стилевой атрибут text-transform со значением uppercase (все буквы заглавные). <span style="text-transform: none;">А эту фразу я заключил в тег span style со значением none для text-transform. Буквы стали строчные.</span></p>

</body>

</html>

И ещё на этой странице написано, что "Линия полученная с помощью значения line-through в IE7 располагается выше, чем в других браузерах; в IE8 эта ошибка исправлена."

Что-то не похоже, что ошибка исправлена. У меня в IE8 линия выше середины строчных букв, почти наверху. В Firefox линия явно ниже. На сайте неточная информация?

Edited by 9190
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
А здесь должен быть неперечёркнутый. Но почему отображается перечёркнутый?

Спан не перечёркнут. Перечёркнут абзац, в котором находится спан.

гляньте вот это

<style>
p { text-decoration: line-through; }
span { text-decoration: underline; }
i { text-decoration: overline; }
</style>
</head>
<body>
<p>раз <span>два <i>три</i> два</span> раз</p>
</body>

Я там проделал по тому же принципу: для всего параграфа переназначил стиль, а в конкретной фразе отменил стиль, и всё сработало.

Не по тому же. text-transform наследуется, в отличие от text-decoration, поэтому ваш спан тоже обладает свойством text-transform: uppercase и поэтому это свойство можно отменить. В случае с text-decoration, спан не обладает свойством text-decoration: line-through, поэтому отменить это свойство нельзя.

Edited by Gaspode
Link to comment
Share on other sites

  • 0

Gaspode, Спасибо за ответ!

Значит всё дело в наследовании. Я раньше сравнивал описание и text-decoration, и text-transform, чтобы посмотреть, есть ли разница между ними, почему один ведёт себя так, а другой иначе. И обратил тогда внимание на строку в описательной таблице, где для text-decoration указано не наследуется, а для text-transform наследуется, и подумал, что может в этом дело... Только я пока не слишком понимаю этот принцип наследования, надо где-то почитать.

Но почему одни элементы наследуются, а другие нет? Сделали бы так, чтобы все наследовались, не было бы путаницы и таких нюансов? Как тогда в моей ситуации я должен поступить? Вот так оптимально?

<html>

<head><title>Черновик</title></head>

<body>

<p><span style="text-decoration: line-through;">Здесь идёт перечёркнутый текст.</span> А здесь неперечёркнутый. <span style="text-decoration: line-through;">А дальше весь параграф, допустим опять должен быть перечёркнутый.</span></p>

То есть все фрагменты в параграфе, которые должны быть перечёркнуты, нужно индивидуально заключать в <span style="text-decoration: line-through;">...</span>? И если я назначу для всего параграфа перечёркивание (как в своём первом сообщении), то потом не смогу избавиться от него в отдельных местах этого параграфа? И в каких случаях тогда нужен text-decoration: none? В каких случаях он сможет отменить декорирование текста?

</body>

</html>

Edited by 9190
Link to comment
Share on other sites

  • 0
Сделали бы так, чтобы все наследовались, не было бы путаницы и таких нюансов?

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

Вот так оптимально?

Да. Больше скажу, это логично.

Link to comment
Share on other sites

  • 0

И в каких случаях тогда нужен text-decoration: none? В каких случаях он сможет отменить декорирование текста?

Я отменяю декорирование текста, когда требуется отменить это правило у тех элементов, которые по умолчанию имеют это свойство. Здесь можно посмотреть какие правила у элементов по умолчанию. Например, бывает так, что не хотелось бы чтоб под элементом <a> было подчеркивание, тогда я применяю для этого элемента text-decoration: none.

Link to comment
Share on other sites

  • 0

chikadesign, спасибо. Вроде бы понял.

гляньте вот это

<style>
p { text-decoration: line-through; }
span { text-decoration: underline; }
i { text-decoration: overline; }
</style>
</head>
<body>
<p>раз <span>два <i>три</i> два</span> раз</p>
</body>

Если прокомментировать этот пример, какие выводы нужно сделать? То есть если бы этот text-decoration наследовался, то "два" имели бы только нижнее подчёркивание, а "три" только надстрочное? Или я неправ? Очень хочу понять логику этого правила наследования, но сейчас уже еле соображаю.

Вот, на основе вашего примера применил наследующий стилевой атрибут text-transform:

<html>
<head>
<style>
p { text-transform: uppercase; }
span { text-transform: capitalize; }
i { text-transform: lowercase; }
</style>
</head>
<body>
<p>раз <span>два <i>ТРИ</i> два</span> раз</p>

</body>
</html>

Edited by 9190
Link to comment
Share on other sites

  • 0

Что-то путаница какая-то. Здесь написано про наследование следующее:

Наследование — это перенос правил форматирования для элементов, находящихся внутри других. Например, если для тега <p> задан красный цвет текста, а для курсива <i>, который находится внутри абзаца, нет, то в этом случае вложенный элемент наследует свойства своего родителя и курсивный текст также будет красным.

И взять вышеприведённый пример:

<html>
<head>
<style>
p { text-decoration: line-through; }
span { text-decoration: underline; }
i { text-decoration: overline; }
</style>
</head>
<body>
<p>раз <span>два <i>три</i> два</span> раз</p>

</body>
</html>

Получается тоже самое. Зачёркивание для параграфа наследуется (или переносится) и на span (помимо заданного нижнего подчёркивания наследуется перечёркивание от тега <p>. А слово "три" так и вообще унаследовало от родительских элементов и перечёркивание, и нижнее подчёркивание. Так в чём разница-то?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy