Satır içi CSS ile sözde elemanlardan önce ve sonra CSS mi kullanıyorsunuz?


141

Satır içi CSS ( styleözniteliklerde CSS ) ile bir HTML e-posta imzası yapıyorum ve :beforeve :aftersözde öğeleri kullanmak mümkün olup olmadığını merak ediyorum .

Öyleyse, satır içi CSS ile böyle bir şeyi nasıl uygulayabilirim?

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

8
Sözde sınıfları veya sözde öğeleri hedeflemek için satır içi stilleri kullanamazsınız.
David, Monica


2
@Champ: Sözde elemanlar ve sözde sınıflar aynı şey olmadığı için aynı soru değil. Buraya detaylandırmak için kendi cevabımı yazdım.
BoltClock

Yanıtlar:


123

Sözde öğeler için satır içi stiller belirtemezsiniz.

Bunun nedeni, sözde sınıflar (sözde diğer soruya verdiğim yanıt) gibi sözde öğelerin, seçiciler kullanılarak HTML'de ifade edilemeyen belge ağacının soyutlamaları olarak CSS'de tanımlanmasıdır. styleÖte yandan, belirli bir öğe için HTML içinde bir satır içi özellik belirtilir.

Satır içi stiller yalnızca HTML'de oluşabileceğinden, oluşturdukları sözde öğelere değil, yalnızca tanımlandıkları HTML öğesine uygulanır.

Bir yana, bu açıdan sözde elemanlar ve sözde sınıflar arasındaki temel fark, varsayılan olarak devralınan özelliklerin oluşturucu eleman tarafından miras alınacağı:before ve :aftersözde sınıf stillerinin hiç uygulanmadığıdır. Örneğin, sizin durumunuzda, text-align: justifybir tdöğe için satır içi stil özniteliğine yerleştirirseniz , öğe tarafından devralınır td:after. Uyarı, td:aftersatır içi stil özniteliğiyle bildiremeyeceğinizdir ; stil sayfasında yapmalısınız.


37

Yukarıda belirtildiği gibi: bir css sözde sınıfı / -element satır içi çağırmak mümkün değildir. şimdi yaptığım şey: öğenize benzersiz bir tanımlayıcı vermek, f.ex. bir kimlik veya benzersiz bir sınıf. ve bir bağlantı <style>elemanı yazın

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

çirkin, ama ne satır içi css değil ..?


6
bu satır içi CSS değildir. Satır içi CSS, ayrı ayrı HTML öğelerine style = "" özelliğinin iletilmesini gerektirir. Gmail'e biçimlendirilmiş, <style> etiketlerindeki her şeyi kaldıran CSS göndermek için genellikle gereklidir. Bir otomobil üreticisi için buraya bakın ( zurb.com/ink/inliner.php )
kez

Bence bu satır içi sözde öğelere en yakın olanıdır. Daha da iyisi, yeni kullanmak scopedstilleri ve :root(bu yüzden serin olduğu) psuedo sınıfı: <article><style scoped>:root:before { content: "*";}</style><!-- something --></article>.
Ben J

3
Düzeltme: :scopeSözde sınıfı kullanın :<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
Ben J

1
Bu şeyler çok yeni, muhtemelen uygulanmadı ve muhtemelen değişecek. Geçerli HTML özellikleri ( scoped stilleri) ve CSS Özellikleri ( :scope) ' ndedir . Daha açık olmalıydım.
Ben J

<style> ... </style> etiketlerinin kullanımına satır içi CSS DEĞİL, dahili veya katıştırılmış CSS denir.
James Anderson Jr.

14

Verileri satır içi olarak kullanabilirsiniz

 <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
Bu, data-contentözniteliği contentsözde öğe için olduğu gibi yazdırır . Satır içi CSS ile sözde öğeler oluşturmakla hiçbir ilgisi yoktur.
Nils Kaspersson

4
Buraya sıralı CSS'de sahte seçicilerin nasıl uygulanacağını araştırmaya geldim ve bu cevap bana aynı şeyi başarmanın başka bir yolunu gösterdi. İçeriğin dinamik olarak oluşturulan çok sayıda olası seçeneğe dayanması gerekiyordu ve bu nedenle olası her sonuç için yığınlar ayrı ayrı CSS seçicileri yazmak pratik değildi.
wunth

4
Bu aslında bir sonraki içeriğe dinamik içerik eklemek isteyen biri için çok iyi bir cevaptır. Bu sorunla ilgili olmayabilir, ancak Google aracılığıyla bu çözümü ararken bu soru gösteriliyor.
Aleks


8

Hayır , David Thomas'ın dediği gibi inline-css'deki sözde sınıfları veya sözde öğeleri hedefleyemezsiniz . Daha fazla ayrıntı için BoltClock'un Pseudo sınıfları hakkındaki bu cevaba bakınız.

Hayır. Style niteliği, yalnızca belirli bir HTML öğesinin stil özelliklerini tanımlar. Sözde sınıflar, öznitelikte yer almayan seçiciler ailesinin bir üyesidir .....

Ayrıca sözde elemanlar için de aynı şekilde yazabiliriz

Hayır. Style niteliği, yalnızca belirli bir HTML öğesinin stil özelliklerini tanımlar. Sözde sınıflar ve sözde öğeler, seçicilerin ailesinin bir üyesidir, bu özellik satır içinde stil oluşturamazsınız.


Cevabımı ve soru hakkındaki yorumumu görün.
BoltClock

evet aynı değil. ama satır içi kullanılamamalarının nedeni aynı değil mi?
Champ

Cevaplar benzer, ancak sorular çok farklı.
BoltClock

6

Satır içi css'de sözde öğeler oluşturamazsınız.

Bununla birlikte, bir stil sayfasında bir sözde öğe oluşturabiliyorsanız, üst öğeye bir satır içi stil ayarlayıp ardından sözde öğeye stil oluşturmak için inherit anahtar sözcüğünü kullanarak satır içi stil vermenin bir yolu vardır:

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

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

bazen bu kullanışlı olabilir.


5

Evet , mümkün , sonra veya önce eklediğiniz öğe için satır içi stiller ekleyin, Örnek

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

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

22
Bu satır içi bir stil sayfasıdır. Satır içi değil css.
Esger

4
Bunun asıl soruyu çözmediği gerçeğinden başka, bu kod yanlıştır ::afterve ::beforesözde elemanlar, content: valueaksi takdirde content:nonetemelde hiçbir şeyle sonuçlanmayan varsayılan değerlere ihtiyaç duyar .
zer00ne

<style> ... </style> etiketlerinin kullanımına satır içi CSS DEĞİL, dahili veya katıştırılmış CSS denir.
James Anderson Jr.

1

Daha önce de belirtildiği gibi, sözde sınıfları şekillendirmek için satır içi öğeleri kullanamazsınız . Yalancı sınıflardan önce ve sonra asıl elemanlar değil, elemanların halleridir. Bunun için yalnızca JavaScript kullanabilirsiniz.


Bunlar devlet olmayan sahte öğelerdir .
user4642212

0

HTML üzerinde kontrolünüz varsa, sözde yerine gerçek bir öğe ekleyebilirsiniz. : before ve: psseudo elemanları open etiketinden hemen sonra veya close etiketinden hemen önce oluşturulur. Bu css için satır içi eşdeğeri

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

Böyle bir şey olurdu:

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

Aklında tut; Öğelerinizden önce ve sonra "gerçek" ve satır içi css olan her şey sayfalarınızın boyutunu büyük ölçüde artıracak ve harici css ve sözde öğelerin mümkün kıldığı sayfa yükleme optimizasyonlarını yoksayacaktır.


0

kullanabilirsiniz

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

css olarak

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.