Подтвердить что ты не робот

"text-decoration" и псевдоэлемент ": after", пересмотренный

Я перепрошу этот вопрос, потому что его ответы не работали в моем случае.

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

a:after {
    content: " <" attr(href) ">";
    text-decoration: none;
    color: #000000;
}

В Firefox (и, возможно, Chrome, но не в IE8), text-decoration: none игнорируется, а подчеркивание незаметно растягивается в нижней части URL-адреса. Тем не менее color правильно настроен на черный для URL. Есть ли способ сделать работу text-decoration?

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

4b9b3361

Ответ 1

Выполнение IE8: перед и после псевдоэлементов неверно. Firefox, Chrome и Safari реализуют его в соответствии со спецификацией CSS 2.1.

5.12.3: перед и: после псевдоэлементов

": before" и ": after" псевдоэлементы могут быть использованы для вставки сгенерированного содержимого до или после содержимого элемента. Они объясняются в разделе сгенерированного текста.

...

Каскадные таблицы стилей Уровень 2 Версия 1 (CSS 2.1) Спецификация

Спецификация указывает, что содержимое должно быть вставлено до или после содержимого элемента, не элемент (т.е. содержимое элемента: до содержимого контента: после </element> ). Таким образом, в Firefox и Chrome текстовое оформление, с которым вы сталкиваетесь, находится не на вставленном контенте, а на родительском элементе привязки, который содержит вставленный контент.

Я думаю, что ваши варианты будут использовать метод background-image/padding, предложенный в вашем предыдущем вопросе, или, возможно, обернуть ваши элементы привязки в элементах span и вместо этого применить псевдоэлементы к элементам span.

Ответ 2

Если вы используете display: inline-block в псевдониме :after, объявление text-decoration будет работать.

Протестировано в Chrome 25, Firefox 19

Ответ 3

В качестве альтернативы вы можете использовать нижнюю границу, а не текстовое украшение. Это предполагает, что вы знаете цвет фона

a {
  text-decoration: none;
  border-bottom: 1px solid blue;
}
a:after {
  content: "foo";
  border-bottom: 1px solid white; /* same color as the background */
}

Ответ 4

У меня была та же проблема, и моим решением было установить высоту и переполнение: hidden

http://jsfiddle.net/r45L7/

a {
    text-decoration: underline;
}

a:after {
    content: "»";
    display: inline-block;
    text-decoration: none;
    height:16px;
    overflow: hidden;
    padding-left: 10px;
}

Он работает на IE, FF, Chrome.

Ответ 5

Я понимаю, что это не отвечает на вопрос, который вы задаете, но есть ли причина, по которой вы не можете использовать следующий (background -образный подход):

a.file_pdf {
background-image: url(images/pdf.png);
background-position: center right;
background-repeat: no-repeat;
padding-right: 15px; /* or whatever size your .png image is plus a small margin */
}

Насколько я знаю, в реализации Firefox :after наблюдается свойство класса selector, а не psuedo-class. Может быть, стоит поэкспериментировать с разными доктринами? Переходный, а не строгий, иногда допускает разные результаты (хотя и не всегда лучшие результаты...).

Edit:

Похоже, что используя

a:after {
    content: " <" attr(href) ">";
    text-decoration: none;
    color: #000000;
    background-color: #fff; /* or whatever colour you prefer */
}

переопределяет или, по крайней мере, скрывает text-decoration. Это на самом деле не дает никакого ответа, но, по крайней мере, предлагает способы решения.

Ответ 6

Единственное, что сработало для меня, - это объявление отдельного повторного селектора с тем же свойством text-decoration, которое оно наследует от его родителя, а затем в главном селекторе, установив для text-decoration значение none.

IE, по-видимому, не знает, что делать, когда вы устанавливаете text-decoration: none на псевдоэлемент без того элемента, который объявляет свойство text-decoration (которое по умолчанию не имеет ничего объявленного по умолчанию). Это мало смысла, потому что это, очевидно, унаследовано от родителя, но, увы, теперь у нас есть современные браузеры.

span.my-text {
  color: black;
  font-size: 12px;
  text-decoration: underline;
}

span.my-text:after {
  text-decoration: underline; // Have to set text-decoration here so IE knows it can be overwritten below
}

span.my-text:after {
  color: red;
  text-decoration: none; // In the same repeated selector, we can now overwrite text-decoration in our pseudo element.
}

Ответ 7

Вы можете автосогласовать ссылки на pdf файлы:

a[href$=".pdf"]:after { content: ... }

IE менее 8 может быть включен для правильной работы, реализуя эту ссылку в заголовке html файла:

<!--[if lt IE 8]><script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE8.js" type="text/javascript"></script><![endif]-->

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

Ответ 8

Поместите содержимое абсолютно следующим образом:

a {
    position: relative;
    margin: 0 .5em;
    font-weight: bold;
    color: #c00;
}
a:before,
a:after {
    position: absolute;
    color: #000;
}
a:before {
    content: '<';
    left: -.5em;
}
a:after {
    content: '>';
    right: -.5em;
}

Это работает для меня в Firefox 3.6, но не протестировано ни в каких других браузерах, но удачи!

Ответ 9

Привет, у меня также были проблемы с этим, и мне довелось споткнуться об обходном пути.

Чтобы обойти это, я завернул URL-адрес в div и использовал что-то вроде этого.

.next_page:before {
    content: '(';
}

.next_page:after {
    content: ')';
}

Ответ 10

Что я делаю, так я добавляю span внутри элемента a, например:

<a href="#" onclick="location.href='http://foo.bar'; return false;"><span>link text</span></a>

Затем в вашем файле CSS:

a::after{
  content:" <" attr(href) "> ";
  color: #000000;
}

a {
  text-decoration:none;
}

a span {
  text-decoration: underline;
}