คุณสมบัติเนื้อหา CSS: สามารถแทรก HTML แทน Text ได้หรือไม่


246

เพียงแค่สงสัยว่ามันเป็นไปได้ที่จะทำให้ CSS contentใส่รหัส html แทน string บน:beforeหรือ:afterองค์ประกอบเช่น:

.header:before{
  content: '<a href="#top">Back</a>';
}

สิ่งนี้จะมีประโยชน์มาก ... สามารถทำได้ผ่าน Javascript แต่การใช้ css สำหรับสิ่งนี้จะทำให้ชีวิตง่ายขึ้นจริงๆ :)


@Kaiido OMG ... ไม่ใช่, ไม่ได้ตรวจสอบวันที่ของคำถาม, ฉันอ้างถึงคำตอบของคุณ ... ขอโทษจริง ๆ , จะลบความคิดเห็นทั้งสองนี้ :)
Ason

คำตอบ:


210

น่าเสียดายที่มันเป็นไปไม่ได้ ตามข้อมูลจำเพาะ :

เนื้อหาที่สร้างขึ้นไม่ได้เปลี่ยนโครงสร้างของเอกสาร โดยเฉพาะอย่างยิ่งมันจะไม่ถูกป้อนกลับไปยังตัวประมวลผลภาษาเอกสาร (เช่นสำหรับการวิเคราะห์ซ้ำ)

กล่าวอีกนัยหนึ่งสำหรับค่าสตริงนี่หมายความว่าค่าจะได้รับการปฏิบัติอย่างแท้จริง มันไม่เคยถูกตีความว่าเป็นมาร์กอัปโดยไม่คำนึงถึงภาษาเอกสารที่ใช้งานอยู่

ตัวอย่างเช่นการใช้ CSS ที่กำหนดด้วย HTML ต่อไปนี้:

<h1 class="header">Title</h1>

... จะส่งผลให้ผลลัพธ์ต่อไปนี้:

<a href="#top"> ย้อนกลับ </a> ชื่อ


1
เห็นด้วย แต่ถ้าคุณคิดว่ามันได้รับการสนับสนุนแล้วสำหรับรูปภาพที่มีurlคุณสมบัติการเพิ่มลิงค์จะไม่แตกต่างกันในมุมมองนี้
zanona

12
@ludicco: นั่นเป็นเพราะภาพตัวเองไม่ใช่องค์ประกอบ DOM (ไม่นับ<img>) พวกมันเพิ่งถูกวาดลงบนองค์ประกอบที่มีอยู่ดังนั้นโดยการใช้ภาพพื้นหลังหรือรายการภาพที่คุณไม่ได้แก้ไข DOM จริงๆ
BoltClock

1
ได้รับขอบคุณดังนั้นฉันคิดว่าฉันจะต้องผ่านความคิดนี้และตรงไปที่ js, ไชโย
zanona

6
@ludicco: เป็นคำถามที่ดี แม้ฉันกำลังค้นหาผ่านดังนั้นหวังว่ามันเป็นไปได้
Robin Maben

1
@ วัตสัน: เพิ่งเห็นคำตอบของคุณสำหรับคำถามอื่น คุณถูก; ฉันอาจจะอธิบายให้ชัดเจนในคำตอบของฉันว่าคุณไม่สามารถเพิ่มมาร์กอัปโดยพลการได้ - คุณต้องระบุไฟล์ภายนอกผ่านurl()แทนเช่นเดียวกับภาพอื่น ๆ
BoltClock

54

ตามที่บันทึกไว้ในข้อคิดเห็นของ @ BoltClock ในเบราว์เซอร์รุ่นใหม่คุณสามารถเพิ่มมาร์กอัป html ลงในองค์ประกอบหลอกโดยใช้ ( url()) ร่วมกับ<foreignObject>องค์ประกอบsvg

คุณสามารถระบุ URL ที่ชี้ไปยังไฟล์ svg จริงหรือสร้างด้วย datauri รุ่น ( data:image/svg+xml; charset=utf8, + encodeURIComponent(yourSvgMarkup))

แต่ทราบว่ามันเป็นส่วนใหญ่สับและที่มีอยู่เป็นจำนวนมากของข้อ จำกัด :

  • คุณไม่สามารถโหลดทรัพยากรภายนอกจากมาร์กอัปนี้ (ไม่มี CSS, ไม่มีรูปภาพ, ไม่มีสื่อ ฯลฯ )
  • คุณไม่สามารถรันสคริปต์
  • ตั้งแต่นี้จะไม่ได้เป็นส่วนหนึ่งของ DOM, วิธีเดียวที่จะแก้ไขมันคือการผ่านมาร์กอัปเป็น dataURI และแก้ไข dataURI document.styleSheetsนี้ สำหรับส่วนนี้DOMParserและXMLSerializerอาจช่วยได้
  • แม้ว่าการทำงานแบบเดียวกันจะช่วยให้เราโหลดสื่อที่เข้ารหัส url ใน<img>แท็ก แต่สิ่งนี้จะไม่ทำงานในองค์ประกอบหลอก (อย่างน้อยก็ในวันนี้ฉันไม่รู้ว่ามีการระบุไว้ที่ใดก็ตามที่ไม่ควรทำหรือไม่ดังนั้นอาจ เป็นคุณสมบัติที่ยังไม่ได้ใช้งาน)

ตอนนี้มีการสาธิตมาร์กอัป html เล็ก ๆ ในองค์ประกอบปลอม:

/* 
**  original svg code :
*
*<svg width="200" height="60"
*     xmlns="http://www.w3.org/2000/svg">
*
* <foreignObject width="100%" height="100%" x="0" y="0">
*	<div xmlns="http://www.w3.org/1999/xhtml" style="color: blue">
*		I am <pre>HTML</pre>
*	</div>
* </foreignObject>
*</svg>
*
*/
#log::after {
  content: url('data:image/svg+xml;%20charset=utf8,%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2260%22%20width%3D%22200%22%3E%0A%0A%20%20%3CforeignObject%20y%3D%220%22%20x%3D%220%22%20height%3D%22100%25%22%20width%3D%22100%25%22%3E%0A%09%3Cdiv%20style%3D%22color%3A%20blue%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3E%0A%09%09I%20am%20%3Cpre%3EHTML%3C%2Fpre%3E%0A%09%3C%2Fdiv%3E%0A%20%20%3C%2FforeignObject%3E%0A%3C%2Fsvg%3E');
}
<p id="log">hi</p>


ฉันเจอคำตอบของคุณและเป็นวิธีแก้ปัญหาของฉันเอง คุณสามารถอธิบายวิธีจัดรูปแบบ URL ที่ชี้ไปที่ไฟล์ได้หรือไม่ ฉันลองurl('/relativePathToMySvg/mySvg.svg')แล้วก็ใช้ไม่ได้
Frank

@Frank ต่อรายละเอียดการใช้เส้นทางสัมพันธ์จะเทียบกับเส้นทางของไฟล์ CSS ของคุณเช่นถ้าคุณได้มีไฟล์ CSS ของคุณ/root/css/yourFile.cssแล้วญาติ funcIRI เหมือนจะชี้ไปที่yourFile.svg /root/css/yourFile.svg/แต่ฉันคิดว่าฉันจำได้ว่า UA ก่อนหน้านี้บางตัวมีข้อผิดพลาดและทำให้สัมพันธ์กับ baseURI ของเอกสาร ดังนั้นวิธีที่ปลอดภัยที่สุดคือการใช้เส้นทางที่แน่นอน
Kaiido

1
@BoltClock จริงเหรอ? ฉันขอโทษจริงๆเกี่ยวกับเรื่องนี้ ฉันมาที่คำถามอายุ 6 ปีนี้โดยอีกคำถามหนึ่งและรู้สึกว่าฉันต้องโพสต์เป็นอัปเดต แต่บางทีฉันควรจะชัดเจนยิ่งขึ้นว่าคำตอบของคุณดีและถูกต้องเมื่อ 6 ปีที่แล้ว? หรือหากคุณมีคำพูดที่ดีที่สามารถเป็นส่วนหัวได้โปรดแก้ไขคำตอบของฉัน
Kaiido

1
ดี ฉันใช้: content: url('../../images/como-funciona.svg');และใช้งานได้ดี
Eliut Islas

นี่คือโพสต์ก่อนหน้าซึ่งมีคำตอบของฉันที่ดำลึกลงไปเล็กน้อยในเรื่อง: มันเป็นไปได้ที่จะแสดง -a- html- เอกสารหรือ html- ชิ้นส่วนที่ css-content
Ason

7

ใน CSS3 เพจสื่อนี้เป็นไปได้ใช้และposition: running()content: element()

ตัวอย่างจากเนื้อหาที่สร้างโดย CSS สำหรับโมดูลร่างPaged Media :

@top-center {
  content: element(heading); 
}

.runner { 
  position: running(heading);
}

.runner สามารถเป็นองค์ประกอบใดก็ได้และheadingเป็นชื่อที่กำหนดเองสำหรับสล็อต

แก้ไข:เพื่อชี้แจงโดยทั่วไปไม่มีการสนับสนุนเบราว์เซอร์ดังนั้นสิ่งนี้ส่วนใหญ่มีไว้เพื่ออ้างอิงในอนาคต / นอกเหนือจาก 'คำตอบที่เป็นประโยชน์' ที่ให้ไว้แล้ว


เฮ้คุณช่วยอธิบายเรื่องนี้ได้อีกเล็กน้อย ฉันสนใจในทฤษฎีของคุณ แต่ดูเหมือนจะไม่สามารถทำให้สำเร็จได้ ฉันจะรวมพูดแท็กจุดยึดโดยใช้วิธีนี้หรือ div
Neil

ปัญหาคือปัจจุบันไม่มีพื้นรองรับเบราว์เซอร์ แต่ HTML renderers เฉพาะใช้มันตามข้อมูลจำเพาะ ข่าวดีไม่ดีครั้งต่อไปคือดูเหมือนว่าจะไม่มีการใช้งานโอเพ่นซอร์สที่ดี ส่วนใหญ่เป็นผลิตภัณฑ์ SaaS เช่นprincexml.com
โซล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.