สไตล์อินไลน์เพื่อทำหน้าที่เป็น: วางเมาส์เหนือ CSS


96

ฉันรู้ว่าการฝังสไตล์ CSS ลงในแท็ก HTML โดยตรงจะส่งผลต่อการเอาชนะจุดประสงค์ส่วนใหญ่ของ CSS แต่บางครั้งก็มีประโยชน์สำหรับการดีบักเช่นใน:

<p style="font-size: 24px">asdf</p>

ไวยากรณ์สำหรับการฝังกฎเป็นอย่างไร:

a:hover {text-decoration: underline;}

ลงในแอตทริบิวต์สไตล์ของแท็ก A? ไม่ชัดนี่ ...

<a href="foo" style="text-decoration: underline">bar</a>

... เนื่องจากจะมีผลตลอดเวลาซึ่งต่างจากเพียงแค่ในระหว่างการวางเมาส์


ในทางทฤษฎีหากคุณพยายามทำให้โฮเวอร์เป็นแบบไดนามิกคุณสามารถใช้จาวาสคริปต์เพื่อแทรกกฎโฮเวอร์ลงในสไตล์ชีทโดยใช้รายการ window.document.styleSheets ของชีตที่มีอยู่
GAgnew

คำตอบ:


98

ฉันกลัวว่าจะทำไม่ได้ตัวเลือกคลาสหลอกไม่สามารถตั้งค่าในบรรทัดได้คุณจะต้องทำในเพจหรือในสไตล์ชีท

ฉันควรพูดถึงว่าในทางเทคนิคคุณควรจะทำได้ตามข้อกำหนดของ CSSแต่เบราว์เซอร์ส่วนใหญ่ไม่รองรับ

แก้ไข:ฉันเพิ่งทำการทดสอบอย่างรวดเร็วกับสิ่งนี้:

<a href="test.html" style="{color: blue; background: white} 
            :visited {color: green}
            :hover {background: yellow}
            :visited:hover {color: purple}">Test</a>

และไม่สามารถใช้งานได้ใน IE7, IE8 beta 2, Firefox หรือ Chrome ใครสามารถทดสอบในเบราว์เซอร์อื่น ๆ ได้หรือไม่?


3
นั่นเป็นแบบร่างการทำงาน CSS 3 ที่มีลำดับความสำคัญต่ำมากซึ่งไม่ได้รับการอัปเดตในหกปี จากข้อมูลจำเพาะ: 'ไม่เหมาะสมที่จะใช้ W3C Working Drafts เป็นเอกสารอ้างอิงหรืออ้างเป็นเอกสารอื่นที่ไม่ใช่ "งานระหว่างทำ" '
จิม

1
จริง แต่เบราว์เซอร์ทำใช้กฎ CSS3 บางควรน่าจะเป็นคำผิดในบริบทนี้
เกล็น Slaven

โดยทั่วไปเบราว์เซอร์จะใช้คุณสมบัติ CSS ที่อยู่ในสถานะการพัฒนาเพิ่มเติมเช่นความทึบมาจาก CSS Color (Last Call) และ Media Queries เป็นคำแนะนำสำหรับผู้สมัคร
จิม

style = ": hover {}" จะเทียบเท่ากับ "a {: hover {}}" ในสไตล์ชีตไม่ใช่หรือ เห็นได้ชัดว่าเป็นข้อผิดพลาดทางไวยากรณ์
Kornel

33
คำตอบนี้ถูกโพสต์เมื่อนานมาแล้วสิ่งต่างๆได้เปลี่ยนแปลงไปนับตั้งแต่นั้นเป็นต้นมาและเวอร์ชันปัจจุบันของข้อมูลจำเพาะ W3C ที่เกี่ยวข้อง - CSS Style Attribute Rec ( w3.org/TR/css-style-attr/#syntax ) - ระบุอย่างชัดเจนว่า style attribute สามารถมีได้เฉพาะเนื้อหาของบล็อกการประกาศ CSS ดังนั้นจึงเป็นไปไม่ได้ที่จะแทรกองค์ประกอบหลอกด้วยstyleแอตทริบิวต์
Ilya Streltsyn

24

หากคุณเป็นเพียงการดีบักคุณอาจใช้ javascript เพื่อแก้ไข css:

<a onmouseover="this.style.textDecoration='underline';" 
    onmouseout="this.style.textDecoration='none';">bar</a>

1
ค้นหาโซลูชันด้วย JSF และสิ่งนี้ช่วยฉันแก้ไขได้ onmousemove = "this.style.color = '## {cc.attrs.color}';" onmouseout = "this.style.color = 'ขาว';"
kdoteu

17

วิธีง่ายๆ:

   <a href="#" onmouseover="this.style.color='orange';" onmouseout="this.style.color='';">My Link</a>

หรือ

<script>
 /** Change the style **/
 function overStyle(object){
    object.style.color = 'orange';
    // Change some other properties ...
 }

 /** Restores the style **/
 function outStyle(object){
    object.style.color = 'orange';
    // Restore the rest ...
 }
</script>

<a href="#" onmouseover="overStyle(this)" onmouseout="outStyle(this)">My Link</a>

16

หากมีไว้สำหรับการดีบักเพียงเพิ่มคลาส css สำหรับการวางเมาส์ (เนื่องจากองค์ประกอบสามารถมีได้มากกว่าหนึ่งคลาส):

a.hovertest:hover
{
text-decoration:underline;
}

<a href="http://example.com" class="foo bar hovertest">blah</a>

2
นี่อาจเป็นสิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับเอฟเฟกต์ที่ต้องการ
Glenn Slaven

1

ฉันรวบรวมวิธีแก้ปัญหาอย่างรวดเร็วสำหรับทุกคนที่ต้องการสร้างโฮเวอร์ป๊อปอัปโดยไม่ใช้ CSS โดยใช้พฤติกรรม onmouseover และ onmouseout

http://jsfiddle.net/Lk9w1mkv/

<div style="position:relative;width:100px;background:#ddffdd;overflow:hidden;" onmouseover="this.style.overflow='';" onmouseout="this.style.overflow='hidden';">first hover<div style="width:100px;position:absolute;top:5px;left:110px;background:white;border:1px solid gray;">stuff inside</div></div>

0

หาก<p>แท็กนั้นสร้างขึ้นจาก JavaScript คุณจะมีทางเลือกอื่น: ใช้ JSS เพื่อแทรกสไตล์ชีตโดยใช้โปรแกรมลงในส่วนหัวของเอกสาร '&:hover'มันไม่สนับสนุน https://cssinjs.org/


-2

ฉันไม่คิดว่าjQueryรองรับ pseudo-selectors เช่นกัน แต่มันมีวิธีที่รวดเร็วในการเพิ่มเหตุการณ์ลงในการควบคุมและแท็กที่คล้ายกันหลายรายการหรือทั้งหมดของคุณในหน้าเดียว

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

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