ใช้ CSS: ก่อนและ: หลังจากองค์ประกอบหลอกด้วย CSS แบบอินไลน์?


141

ฉันสร้างลายเซ็นอีเมล HTML ด้วย CSS แบบอินไลน์ (เช่น CSS ในstyleคุณลักษณะ) และฉันอยากรู้ว่ามันเป็นไปได้ที่จะใช้:beforeและ:afterองค์ประกอบหลอก

ถ้าเป็นเช่นนั้นฉันจะใช้สิ่งนี้กับอินไลน์ CSS ได้อย่างไร

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

8
คุณไม่สามารถใช้สไตล์อินไลน์เพื่อกำหนดเป้าหมายคลาสหลอกหรือองค์ประกอบหลอก
เดวิดบอกว่าคืนสถานะโมนิก้า

2
ซ้ำกันน่าจะเป็นของคลาส Pseudo CSS ที่มีสไตล์แบบอินไลน์
Champ

2
@Champ: ไม่ใช่คำถามเดียวกันเนื่องจากองค์ประกอบหลอกและคลาสหลอกไม่เหมือนกัน ฉันเขียนคำตอบของตัวเองที่นี่เพื่ออธิบายอย่างละเอียด
BoltClock

คำตอบ:


123

คุณไม่สามารถระบุรูปแบบอินไลน์สำหรับองค์ประกอบหลอก

นี่เป็นเพราะองค์ประกอบหลอกเช่นชั้นเรียนหลอก (ดูคำตอบของฉันกับคำถามอื่น ๆ นี้ ) กำหนดไว้ใน CSS โดยใช้ตัวเลือกเป็นตัวย่อของแผนผังเอกสารที่ไม่สามารถแสดงใน HTML ได้ styleในทางกลับกันแอตทริบิวต์inline ถูกระบุไว้ใน HTML สำหรับองค์ประกอบเฉพาะ

เนื่องจากรูปแบบอินไลน์สามารถเกิดขึ้นได้ใน HTML เท่านั้นจึงจะใช้กับองค์ประกอบ HTML ที่กำหนดไว้เท่านั้นและไม่รวมถึงองค์ประกอบแบบหลอกที่สร้างขึ้น

ความแตกต่างที่สำคัญระหว่างองค์ประกอบหลอกและคลาสหลอกในแง่มุมนี้คือคุณสมบัติที่สืบทอดมาโดยค่าเริ่มต้นจะได้รับการสืบทอดโดย:beforeและ:afterจากองค์ประกอบที่สร้างขึ้นในขณะที่สไตล์คลาสหลอกไม่ได้ใช้งานเลย ในกรณีของคุณตัวอย่างเช่นถ้าคุณวางtext-align: justifyในแอตทริบิวต์สไตล์แบบอินไลน์สำหรับองค์ประกอบก็จะได้รับการสืบทอดโดยtd td:afterข้อแม้คือคุณไม่สามารถประกาศtd:afterด้วยแอตทริบิวต์สไตล์อินไลน์ คุณต้องทำในสไตล์ชีท


37

ตามที่กล่าวไว้ข้างต้น: เป็นไปไม่ได้ที่จะเรียกใช้ css pseudo-class / -element inline สิ่งที่ฉันทำตอนนี้คือ: ให้องค์ประกอบของคุณเป็นตัวระบุที่ไม่ซ้ำกัน f.ex ID หรือคลาสที่ไม่ซ้ำกัน และเขียน<style>องค์ประกอบที่เหมาะสม

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

fugly แต่ css แบบอินไลน์ไม่ใช่ ..


6
นั่นไม่ใช่ CSS แบบอินไลน์ CSS แบบอินไลน์ต้องการแอตทริบิวต์ style = "" เพื่อส่งผ่านไปยังองค์ประกอบ HTML แต่ละรายการ โดยทั่วไปจำเป็นสำหรับการส่งรูปแบบ CSS ไปยัง Gmail ซึ่งจะตัดสิ่งใด ๆ ในแท็ก <style> ดูที่นี่ ( zurb.com/ink/inliner.php ) สำหรับรถยนต์
kez

ฉันคิดว่านี่เป็นสิ่งที่ใกล้เคียงที่สุดที่คุณสามารถเข้าถึงองค์ประกอบแบบอินไลน์ได้ ยังดีกว่าใช้ใหม่scopedรูปแบบและ:rootหลอกชั้น <article><style scoped>:root:before { content: "*";}</style><!-- something --></article>(นี่คือเพื่อให้เย็น):
เบ็นเจ

3
การแก้ไข: ใช้:scopeคลาสหลอก:<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
เบ็นเจ

1
สิ่งนี้เป็นสิ่งใหม่มากอาจไม่ได้ใช้งานและอาจมีการเปลี่ยนแปลง มันอยู่ในปัจจุบันHTML ข้อมูลจำเพาะ ( scoped รูปแบบ)และCSS Spec (:scope ) ฉันควรจะชัดเจนมากขึ้น
เบ็นเจ

การใช้แท็ก <style> ... </style> เรียกว่า CSS ภายในหรือฝังตัวไม่ใช่ CSS แบบอินไลน์
James Anderson Jr.

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

4
ฉันมาที่นี่เพื่อค้นหาวิธีการใช้ตัวเลือกหลอกใน Inline CSS และคำตอบนี้แสดงให้ฉันเห็นอีกวิธีหนึ่งในการบรรลุสิ่งเดียวกัน เนื้อหาจำเป็นต้องอิงกับตัวเลือกที่เป็นไปได้จำนวนมากที่สร้างขึ้นแบบไดนามิกดังนั้นจึงไม่เหมาะที่จะเขียน heap ของตัวเลือก CSS ที่แยกต่างหากสำหรับผลลัพธ์ที่เป็นไปได้ทั้งหมด
59

4
นี่เป็นคำตอบที่ดีมากสำหรับผู้ที่ต้องการเพิ่มเนื้อหาแบบไดนามิกในเนื้อหาหลัง อาจไม่เกี่ยวข้องกับปัญหานี้ แต่คำถามนี้จะปรากฏขึ้นเมื่อค้นหาโซลูชันนี้ผ่าน Google
Aleks

ดูเอกสาร
user4642212

8

ไม่มีคุณไม่สามารถกำหนดเป้าหมายคลาสหลอกหรือองค์ประกอบหลอกในอินไลน์ -ssss ตามที่ David Thomasกล่าว สำหรับรายละเอียดเพิ่มเติมดูคำตอบนี้โดยBoltClockเกี่ยวกับคลาส Pseudo

ไม่คุณสมบัติสไตล์จะกำหนดคุณสมบัติของสไตล์สำหรับองค์ประกอบ HTML ที่ระบุเท่านั้น Pseudo-classes เป็นสมาชิกของตระกูล selector ซึ่งไม่ได้เกิดขึ้นในคุณสมบัติ .....

นอกจากนี้เรายังสามารถเขียนใช้เหมือนกันสำหรับองค์ประกอบหลอก

ไม่คุณสมบัติสไตล์จะกำหนดคุณสมบัติของสไตล์สำหรับองค์ประกอบ HTML ที่ระบุเท่านั้น Pseudo-classes และ pseudo-elements ที่เป็นสมาชิกของตระกูล selector ซึ่งไม่ได้เกิดขึ้นในแอ็ตทริบิวต์ดังนั้นคุณจึงไม่สามารถสไตล์อินไลน์ได้


ดูคำตอบและความคิดเห็นของฉันในคำถาม
BoltClock

ใช่ไม่เหมือนกัน แต่เหตุผลเบื้องหลังที่ไม่สามารถใช้แบบอินไลน์นั้นเหมือนกันใช่ไหม
แชมป์

คำตอบนั้นคล้ายกัน แต่คำถามนั้นแตกต่างกันมาก
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
Esger

4
นอกเหนือจากความจริงที่ว่านี่ไม่สามารถแก้ไขคำถามที่แท้จริงได้รหัสนี้ผิด::afterและ::beforeองค์ประกอบแบบหลอกต้องใช้content: valueค่าเริ่มต้นcontent:noneซึ่งจะไม่มีผลใด ๆ
zer00ne

การใช้แท็ก <style> ... </style> เรียกว่า CSS ภายในหรือฝังตัวไม่ใช่ CSS แบบอินไลน์
James Anderson Jr.

1

ดังกล่าวก่อนที่คุณจะไม่สามารถใช้องค์ประกอบแบบอินไลน์สำหรับการจัดแต่งทรงผมชั้นเรียนหลอก ก่อนและหลังคลาสหลอกเป็นสถานะขององค์ประกอบไม่ใช่องค์ประกอบจริง คุณสามารถใช้ JavaScript สำหรับสิ่งนี้เท่านั้น


พวกเขาเป็นองค์ประกอบปลอมที่ไม่ได้ระบุ
user4642212

0

หากคุณมีอำนาจเหนือ HTML คุณสามารถเพิ่มองค์ประกอบจริงแทนการหลอกได้ : ก่อนและ: หลังจากองค์ประกอบหลอกถูกเรนเดอร์หลังจากแท็กเปิดหรือขวาก่อนแท็กปิด อินไลน์เทียบเท่าสำหรับ 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 และหลอกหลอกทำให้เป็นไปได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.