Использование CSS: до и: после псевдоэлементов со встроенным CSS?

Я делаю подпись электронной почты HTML с помощью встроенного CSS (т.е. CSS в style атрибутах), и мне любопытно, можно ли использовать псевдоэлементы :before и :after.

Если да, то как мне реализовать что-то подобное с помощью встроенного CSS?

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

person Bah-Bee    schedule 03.01.2013    source источник
comment
Вы не можете использовать встроенные стили для нацеливания на псевдоклассы или псевдоэлементы.   -  person David says reinstate Monica    schedule 03.01.2013
comment
вероятный дубликат псевдоклассов CSS со встроенными стилями   -  person Champ    schedule 03.01.2013
comment
@Champ: Это не тот же вопрос, поскольку псевдоэлементы и псевдоклассы - это не одно и то же. Я написал здесь свой ответ, чтобы уточнить.   -  person BoltClock    schedule 03.01.2013


Ответы (10)


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

Это потому, что псевдоэлементы, такие как псевдоклассы (см. Мой ответ на этот другой вопрос), определены в CSS с использованием селекторов как абстракций дерева документа, которые не могут быть выражены в HTML. С другой стороны, встроенный атрибут style указывается в HTML для конкретного элемента.

Поскольку встроенные стили могут встречаться только в HTML, они будут применяться только к HTML-элементу, для которого они определены, а не к каким-либо псевдоэлементам, которые он генерирует.

В стороне, основное различие между псевдоэлементами и псевдоклассами в этом аспекте заключается в том, что свойства, которые наследуются по умолчанию будет унаследован :before и :after от генерирующего элемента, тогда как стили псевдокласса вообще не применяются. В вашем случае, например, если вы поместите text-align: justify во встроенный атрибут стиля для элемента td, он будет унаследован td:after. Предостережение: вы не можете объявить td:after с помощью встроенного атрибута стиля; вы должны сделать это в таблице стилей.

person BoltClock    schedule 03.01.2013

как упоминалось выше: невозможно вызвать встроенный псевдокласс / -элемент css. Теперь я сделал следующее: присвоил вашему элементу уникальный идентификатор, например, ex. идентификатор или уникальный класс. и напишите подходящий <style> элемент

<style>#id29:before { content: "*";}</style>
<article id="id29">
  <!-- something -->
</article>

fugly, но какой встроенный css не ..?

person honk31    schedule 29.11.2013
comment
это не встроенный CSS. Встроенный CSS требует, чтобы атрибут style = передавался отдельным HTML-элементам. Обычно требуется для отправки CSS в формате Gmail, который удаляет все, что есть в тегах ‹style›. См. Здесь (zurb.com/ink/inliner.php) для автоматора - person kez; 12.03.2014
comment
Я думаю, что это самое близкое к встроенным псевдоэлементам. А еще лучше использовать новые scoped стили и :root псевдо-класс (это так круто): <article><style scoped>:root:before { content: "*";}</style><!-- something --></article>. - person Ben J; 27.10.2015
comment
Исправление: используйте псевдокласс :scope: <article><style scoped>:scope:before { content: "*";}</style><!-- something --></article> - person Ben J; 27.10.2015
comment
Этот материал очень новый, вероятно, не реализован и, возможно, изменится. Это в текущей спецификации HTML (стили scoped) и Спецификация CSS (:scope). Я должен был быть более ясным. - person Ben J; 08.01.2016
comment
Использование тегов ‹style› ... ‹/style› называется внутренним или встроенным CSS, а НЕ встроенным CSS. - person James Anderson Jr.; 22.04.2020

Вы можете использовать данные во встроенном

 <style>   
 td { text-align: justify; }
 td:after { content: attr(data-content); display: inline-block; width: 100%; }
</style>

<table><tr><td data-content="post"></td></tr></table>
person Cevher    schedule 29.04.2014
comment
Это печатает атрибут data-content как content для псевдоэлемента. Это не имеет ничего общего с созданием псевдоэлементов с помощью встроенного CSS. - person Nils Kaspersson; 29.04.2014
comment
Я пришел сюда, чтобы узнать, как применять псевдоселекторы во встроенном CSS, и этот ответ показал мне еще один способ добиться того же. Контент должен был быть основан на большом количестве возможных параметров, создаваемых динамически, поэтому было непрактично писать кучи отдельных селекторов CSS для каждого возможного результата. - person wunth; 24.08.2016
comment
На самом деле это очень хороший ответ для тех, кто хочет добавить динамический контент к пост-контенту. Возможно, это не связано с этой проблемой, но этот вопрос отображается при поиске этого решения через Google. - person Aleks; 18.04.2017
comment
См. документацию. - person Sebastian Simon; 05.07.2020
comment
Выглядит отлично. К сожалению, установка URL-адреса не работает. - person tcurdt; 28.10.2020
comment
Это также не встроенный CSS. - person TylerH; 04.05.2021

Нет, вы не можете настроить таргетинг на псевдоклассы или псевдоэлементы в inline-css, как сказал Дэвид Томас. Дополнительные сведения см. В этом ответе BoltClock о Псевдоклассы

Нет. Атрибут style определяет свойства стиля только для данного элемента HTML. Псевдоклассы являются членом семейства селекторов, которых нет в атрибуте .....

Мы также можем написать использование для псевдоэлементов

Нет. Атрибут style определяет свойства стиля только для данного элемента HTML. Псевдоклассы и псевдоэлементы являются членами семейства селекторов, которые не встречаются в атрибуте, поэтому вы не можете стилизовать их встроенными.

person Champ    schedule 03.01.2013
comment
Смотрите мой ответ и мой комментарий к вопросу. - person BoltClock; 03.01.2013
comment
да не то же самое. но причина того, что они не могут использоваться встроенными, такая же, верно? - person Champ; 03.01.2013
comment
Ответы похожи, но вопросы очень разные. - person BoltClock; 03.01.2013

Вы не можете создавать псевдоэлементы во встроенном CSS.

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

<parent style="background-image:url(path/to/file); background-size:0px;"></p>

<style> 
   parent:before{
      content:'';
      background-image:inherit;
      (other)
   }
</style>

иногда это может быть удобно.

person Artem Mamaev    schedule 18.09.2019

Да, это возможно, просто добавьте встроенные стили для элемента, который вы добавляете после или до, Пример

 <style>
     .horizontalProgress:after { width: 45%; }
 </style><!-- Change Value from Here -->

 <div class="horizontalProgress"></div>
person Manik Biradar    schedule 20.09.2016
comment
Это встроенная таблица стилей. Не встроенный css. - person Esger; 15.03.2017
comment
Помимо того факта, что это не решает фактический вопрос, этот код неверен, ::after и ::before псевдоэлементы нуждаются в content: value, в противном случае по умолчанию используется content:none, что практически ничего не дает. - person zer00ne; 16.07.2017
comment
Использование тегов ‹style› ... ‹/style› называется внутренним или встроенным CSS, а НЕ встроенным CSS. - person James Anderson Jr.; 22.04.2020

Как упоминалось ранее, вы не можете использовать встроенные элементы для стилизации псевдоклассов. Псевдоклассы до и после - это состояния элементов, а не фактические элементы. Вы могли использовать для этого только JavaScript.

person Nesha Zoric    schedule 21.05.2018
comment
Это псевдо элементы, которые не являются состояниями. - person Sebastian Simon; 05.07.2020

Если у вас есть контроль над HTML, вы можете добавить реальный элемент вместо псевдонима. : before и: after псевдоэлементы отображаются сразу после открытого тега или прямо перед закрывающим тегом. Встроенный эквивалент этого CSS

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

Было бы что-то вроде этого:

<table>
<tr>
<td style="text-align: justify;">
TD Content
<span class="inline_td_after" style="display: inline-block; width: 100%;"></span>
</td>
</tr>
</table>

Иметь ввиду; Ваши «настоящие» элементы до и после и все, что содержит встроенный CSS, значительно увеличит размер ваших страниц и проигнорирует оптимизацию загрузки страницы, которую делают возможными внешние CSS и псевдоэлементы.

person txyoji    schedule 25.03.2019

вы можете использовать

parent.style.setProperty("--padding-top", (height*100/width).toFixed(2)+"%");

в css

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
person surinder singh    schedule 16.06.2020

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

HTML

<div style="color: whitesmoke;">
</div>

CSS

div::before {
  content: '';
  color: inherit;
}

Полезно, например, для фоновых изображений.

person itsgus.dev    schedule 04.05.2021
comment
И где вы собираетесь писать этот div::before стиль? - person TylerH; 04.05.2021
comment
(Подсказка: этот ответ бесполезен, потому что вы не можете применить из него CSS при написании встроенных стилей, о чем и идет речь). - person TylerH; 04.05.2021
comment
Я нашел этот ответ полезным, так как я использую css до и после и хотел динамически установить цвет, что я смог сделать, применив этот подход - person headwinds; 15.05.2021