Utilisation de CSS: avant et: après des pseudo-éléments avec CSS en ligne?

141

Je fais une signature électronique HTML avec CSS en ligne ( par exemple CSS dans les styleattributs), et je suis curieux de savoir s'il est possible d'utiliser les :beforeet :afterpseudo-éléments.

Si oui, comment pourrais-je implémenter quelque chose comme ça avec le CSS en ligne?

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }
Bah-Bee
la source
8
Vous ne pouvez pas utiliser de styles en ligne pour cibler des pseudo-classes ou des pseudo-éléments.
David dit de réintégrer Monica le
2
probablement duplication de pseudo-classes CSS avec des styles en ligne
Champ
2
@Champ: Pas la même question, car les pseudo-éléments et les pseudo-classes ne sont pas la même chose. J'ai écrit ma propre réponse ici pour élaborer.
BoltClock

Réponses:

123

Vous ne pouvez pas spécifier de styles en ligne pour les pseudo-éléments.

En effet, les pseudo-éléments, comme les pseudo-classes (voir ma réponse à cette autre question ), sont définis en CSS à l'aide de sélecteurs comme abstractions de l'arborescence du document qui ne peuvent pas être exprimées en HTML. Un styleattribut en ligne , en revanche, est spécifié dans HTML pour un élément particulier.

Étant donné que les styles en ligne ne peuvent apparaître qu'en HTML, ils ne s'appliqueront qu'à l'élément HTML sur lequel ils sont définis, et non aux pseudo-éléments qu'il génère.

En passant, la principale différence entre les pseudo-éléments et les pseudo-classes dans cet aspect est que les propriétés héritées par défaut seront héritées par :beforeet :afterde l'élément générateur, alors que les styles de pseudo-classes ne s'appliquent tout simplement pas. Dans votre cas, par exemple, si vous placez text-align: justifyun attribut de style en ligne pour un tdélément, il sera hérité par td:after. La mise en garde est que vous ne pouvez pas déclarer td:afteravec l'attribut de style en ligne; vous devez le faire dans la feuille de style.

BoltClock
la source
37

comme mentionné ci-dessus: il n'est pas possible d'appeler une pseudo-classe / élément css en ligne. ce que j'ai fait maintenant, c'est: donner à votre élément un identifiant unique, par exemple. un identifiant ou une classe unique. et écrivez un <style>élément approprié

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

fugly, mais que css en ligne n'est pas ..?

klaxonner31
la source
6
ce n'est pas du CSS en ligne. Le CSS en ligne nécessite que l'attribut style = "" soit transmis aux éléments HTML individuels. Généralement requis pour l'envoi de CSS formaté à Gmail, qui supprime tout ce qui se trouve dans les balises <style>. Voir ici ( zurb.com/ink/inliner.php ) pour un automate
kez
Je pense que c'est le plus proche que vous puissiez obtenir des pseudo-éléments en ligne. Mieux encore, utilisez les nouveaux scopedstyles et de :rootpseudo-classe (ce qui est tellement cool): <article><style scoped>:root:before { content: "*";}</style><!-- something --></article>.
Ben J
3
Correction: Utilisez la :scopepseudo-classe:<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
Ben J
1
Ce truc est très nouveau, probablement pas implémenté, et changera probablement. C'est dans la spécification HTMLscope actuelle ( styles d) et la spécification CSS ( :scope) . J'aurais dû être plus clair.
Ben J
L'utilisation des balises <style> ... </style> est appelée CSS interne ou intégré, PAS CSS en ligne.
James Anderson Jr.22
14

Vous pouvez utiliser les données en ligne

 <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>
Cevher
la source
2
Ceci imprime l' data-contentattribut comme contentpour un pseudo-élément. Cela n'a rien à voir avec la création de pseudo-éléments avec du CSS en ligne.
Nils Kaspersson
4
Je suis venu ici pour savoir comment appliquer des pseudo sélecteurs dans le CSS en ligne et cette réponse m'a montré une autre façon de réaliser la même chose. Le contenu devait être basé sur un grand nombre d'options possibles créées dynamiquement et il n'était donc pas pratique d'écrire des tas de sélecteurs CSS séparés pour chaque résultat possible.
wunth
4
C'est en fait une très bonne réponse pour quelqu'un qui cherche à ajouter du contenu dynamique à un contenu après. Ce n'est peut-être pas lié à ce problème, mais cette question est affichée lors de la recherche de cette solution via Google.
Aleks
Consultez la documentation .
user4642212
8

Non, vous ne pouvez pas cibler les pseudo-classes ou pseudo-éléments dans inline-css comme l'a dit David Thomas . Pour plus de détails, voir cette réponse de BoltClock sur les pseudo-classes

Non. L'attribut style définit uniquement les propriétés de style pour un élément HTML donné. Les pseudo-classes font partie de la famille des sélecteurs, qui n'apparaissent pas dans l'attribut .....

On peut aussi écrire use same pour les pseudo-éléments

Non. L'attribut style définit uniquement les propriétés de style pour un élément HTML donné. Les pseudo-classes et pseudo-éléments font partie de la famille des sélecteurs, qui n'apparaissent pas dans l'attribut, vous ne pouvez donc pas les styliser en ligne.

Champ
la source
Voir ma réponse et mon commentaire sur la question.
BoltClock
oui ce ne sont pas les mêmes. mais la raison pour laquelle ils ne peuvent pas être utilisés en ligne est la même, non?
Champ
Les réponses sont similaires, mais les questions sont très différentes.
BoltClock
6

Vous ne pouvez pas créer de pseudo éléments en CSS en ligne.

Cependant, si vous pouvez créer un pseudo élément dans une feuille de style, il existe un moyen de le styliser en ligne en définissant un style en ligne sur son élément parent, puis en utilisant le mot-clé inherit pour styliser le pseudo élément, comme ceci:

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

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

parfois cela peut être pratique.

Artem Mamaev
la source
5

Oui, c'est possible , ajoutez simplement des styles en ligne pour l'élément que vous ajoutez après ou avant, Exemple

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

 <div class="horizontalProgress"></div>
Manik Biradar
la source
22
Ceci est une feuille de style en ligne. Pas de css en ligne.
Esger
4
Mis à part le fait que cela ne résout pas la question réelle, ce code est erroné ::afteret les ::beforepseudo-éléments ont besoin de la valeur content: valuepar défaut, content:nonece qui ne donne pratiquement rien.
zer00ne
L'utilisation des balises <style> ... </style> est appelée CSS interne ou intégré, PAS CSS en ligne.
James Anderson Jr.22
1

Comme mentionné précédemment, vous ne pouvez pas utiliser d'éléments en ligne pour styliser les pseudo-classes . Les pseudo-classes avant et après sont des états d'éléments, pas des éléments réels. Vous ne pouvez utiliser JavaScript que pour cela.

Nesha Zoric
la source
Ce sont des pseudo- éléments qui ne sont pas des états.
user4642212
0

Si vous avez le contrôle sur le HTML, vous pouvez ajouter un élément réel au lieu d'un pseudo. : avant et: après que les pseudo éléments sont rendus juste après la balise ouverte ou juste avant la balise de fermeture. L'équivalent en ligne pour ce css

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

Serait quelque chose comme ça:

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

Gardez à l'esprit; Vos "vrais" éléments avant et après et tout ce qui contient du CSS en ligne augmentera considérablement la taille de vos pages et ignoreront les optimisations de chargement de page rendues possibles par le CSS externe et les pseudo éléments.

txyoji
la source
0

vous pouvez utiliser

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

en css

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
surinder singh
la source