インラインCSSでCSS:beforeおよび:after疑似要素を使用していますか?


141

インラインCSS(つまり、style属性内のCSS )を使用してHTMLメール署名を作成しています。:beforeおよび:after疑似要素を使用できるかどうかについて知りたいです。

もしそうなら、インラインCSSでこのようなものをどのように実装しますか?

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

8
インラインクラスを使用して、疑似クラスまたは疑似要素をターゲットにすることはできません。
デビッドはモニカ


2
@Champ:疑似要素と疑似クラスは同じものではないため、同じ質問ではありません。詳しく説明するために、ここに自分の答えを書きました。
BoltClock

回答:


123

疑似要素にインラインスタイルを指定することはできません。

これは、擬似クラス(この他の質問への私の回答を参照)のような擬似要素が、HTMLで表現できないドキュメントツリーの抽象化としてセレクターを使用してCSSで定義されているためです。style一方、インライン属性は、HTML内で特定の要素に対して指定されます。

インラインスタイルはHTMLでのみ発生するため、定義されているHTML要素にのみ適用され、生成される疑似要素には適用されません。

余談として、この態様における擬似要素と擬似クラスとの間の主な違いは、デフォルトで継承される特性があります継承することにより、:before及び:after疑似クラススタイルがちょうど全く適用されないのに対し、発電素子から。たとえば、要素のtext-align: justifyインラインスタイル属性に配置した場合td、それはによって継承されtd:afterます。ただしtd:after、インラインスタイル属性を使用して宣言することはできません。スタイルシートで行う必要があります。


37

上記のとおり:css疑似クラス/ -elementをインラインで呼び出すことはできません。私が今やったことは、あなたの要素に一意の識別子、f.exを与えます。IDまたは一意のクラス。そしてフィッティング<style>要素を書く

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

あいまいですが、インラインCSSは何ですか..?


6
それはインラインCSSではありません。インラインCSSでは、style = ""属性を個々のHTML要素に渡す必要があります。一般に、GmailにフォーマットされたCSSを送信するために必要で、<style>タグ内のすべてを取り除きます。オートマトンについては、ここ(zurb.com/ink/inliner.php)を参照してください
kez

これは、インライン疑似要素に到達できる最も近いと思います。さらに良いのは、新しいscopedスタイルと:root疑似クラスを使用することです(これはとてもクールです)<article><style scoped>:root:before { content: "*";}</style><!-- something --></article>
ベンJ

3
訂正:利用:scope擬似クラス:<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
ベンJ

1
このものは非常に新しく、おそらく実装されておらず、変更される可能性があります。現在のHTML仕様(scopedスタイル)CSS仕様(:scope)に含まれています。もっとはっきりしていたはずです。
ベンJ

<style> ... </ style>タグの使用は、インラインCSSではなく、内部または埋め込みCSSと呼ばれます。
ジェームズアンダーソンジュニア

14

インラインでデータを使用できます

 <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>

2
これは、疑似要素の場合とdata-content同様contentに属性を出力します。インラインCSSでの疑似要素の作成とは関係ありません。
Nils Kaspersson、2014

4
インラインCSSで擬似セレクターを適用する方法を探してここに来て、この答えは同じことを達成する別の方法を示しました。コンテンツは、動的に作成される多数の可能なオプションに基づく必要があるため、考えられるすべての結果に対して個別のCSSセレクターのヒープを書き込むことは現実的ではありませんでした。
2016

4
これは実際に、動的コンテンツを後処理コンテンツに追加しようとしている人にとって非常に良い答えです。この問題に関連するものではない可能性がありますが、Google経由でこのソリューションを検索すると、この質問が表示されます。
Aleks

ドキュメントを参照してください。
user4642212

8

David Thomasが言ったように、インラインCSSの疑似クラスまたは疑似要素を ターゲットにすることはできません。より多くの詳細に関しては、このことで答えをBoltClockについて擬似クラス

いいえ。style属性は、特定のHTML要素のスタイルプロパティのみを定義します。疑似クラスはセレクターのファミリーのメンバーであり、属性では発生しません.....

擬似要素についても同じように書くことができます

いいえ。style属性は、特定のHTML要素のスタイルプロパティのみを定義します。疑似クラスと疑似要素は、セレクターファミリーのメンバーであり、属性には含まれないため、インラインでスタイルを設定できません。


質問に対する私の回答とコメントを参照してください。
BoltClock

はい、同じではありません。しかし、インラインで使用できない理由は同じですか?
Champ

答えは似ていますが、質問は大きく異なります。
BoltClock

6

インラインCSSで疑似要素を作成することはできません。

ただし、スタイルシートで疑似要素を作成できる場合は、インラインスタイルを親要素に設定し、継承キーワードを使用して疑似要素のスタイルを設定することで、インラインでスタイルを設定する方法があります。

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

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

時々これは便利です。


5

はい、可能です。後で追加する要素のインラインスタイルを追加するだけです。例

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

 <div class="horizontalProgress"></div>

22
これはインラインスタイルシートです。インラインCSSではありません。
エスガー2017年

4
これで実際の問題が解決されないという事実を除けば、このコードは間違っており::after::before疑似要素はcontent: valueそれ以外の場合はデフォルトcontent:noneで基本的に何も起こらないようにする必要があります。
zer00ne 2017

<style> ... </ style>タグの使用は、インラインCSSではなく、内部または埋め込みCSSと呼ばれます。
James Anderson Jr.

1

前述のように、インライン要素を使用して疑似クラスのスタイルを設定することはできません。擬似クラスの前後は要素の状態であり、実際の要素ではありません。これにはJavaScriptしか使用できません。


それらは、状態ではない疑似要素です。
user4642212

0

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>

覚えておいてください。「実際の」before要素とafter要素、およびインラインCSSを持つものは、ページのサイズを大幅に増やし、外部CSSと疑似要素によって可能になるページ読み込みの最適化を無視します。


0

あなたは使うことができます

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

CSSで

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.