簡體   English   中英

將鼠標懸停在其父div上時,如何更改鏈接為對象的SVG的屬性?

[英]How do I change properties of an SVG linked as object when hovering over its parent div?

好的,這是場景:

包裝DIV>圖標DIV>使用對象標簽和文本的SVG

現在,我的要求是我們將鼠標懸停在包裝器DIV上 ,SVG的顏色(類: iconSVG )應該改變,這顯然是行不通的。 我所做的是:

.wrapperDiv:hover .iconDiv .iconSVG .st0 {
   fill:#ffffff;
}

.st0Illustrator創建的類,例如, iconSVG內的特定形狀)

這並沒有達到我的預期目的,但是當我用嵌入式SVG替換對象時,上述懸停效果很好。 現在,我真的很想將SVG文件與主要HTML分開。 有沒有辦法做到這一點,或者我會陷入串聯SVG嗎? 我讀過很多文章,當在HTML中使用對象標記調用SVG時,可以使我們對其CSS屬性進行控制,因此我嘗試了它。

很抱歉,如果我沒有找到明顯的東西-我基本上是一名設計師,並且是此編程知識的新手(在這里我邁出了第一步)。

我應該學習Javascript來完成這項工作嗎? (我聽說RaphaelJS為利用SVG創建令人印象深刻的東西提供了巨大的機會)。 盡管這可能是一個單獨的線程,但是我想知道花時間學習RaphaelJS對於UI / UX開發人員是否值得(我具有JS的基本知識,但足夠嗎?)

您不能更改作為<img>加載的SVG元素的任何樣式,但是如果將SVG加載為<object>確實存在一些有限的可能性。

假設您按以下方式加載SVG:

<html>
    <body>
        <object type="image/svg+xml" data="your-svg.svg" class="wrapper"></object>
    </body>
</html>

並且您的SVG包含以下代碼:

<svg id="my-svg" xmlns="http://www.w3.org/2000/svg" width="300px" height="300px">
    <g class="svg-icon" alignment-baseline="baseline">
        <circle r="50" cx="100" cy="100" stroke="blue" fill="green" opacity=".5"/>
        <rect class="st0" x="100" y="100" height="100" width="100" stroke="red" opacity=".5"/>
    </g>
</svg>

您可以使用CSS在其中添加<style>塊:

<svg id="my-svg" xmlns="http://www.w3.org/2000/svg" width="300px" height="300px">
    <style type="text/css">
        .svg-icon:hover .st0 {
           fill:#ffffff;
        }
    </style>
    <g class="svg-icon" alignment-baseline="baseline">...</g>
</svg>

當您將其懸停時,它將更改正方形的填充顏色(並且不會更改圓形的顏色)。 這不適用於瀏覽器加載的CSS文件(使用HTML <link> ),但是如果您以標准XML方式加載樣式表,並在<svg>...</svg>之前使用xml-stylesheet處理指令 ,則該樣式應該可以使用<svg>...</svg>根元素:

<?xml-stylesheet type="text/css" href="svgstyle.css" ?>

<svg id="my-svg" xmlns="http://www.w3.org/2000/svg" width="300px" height="300px">
    <g class="svg-icon" alignment-baseline="baseline">
        <circle r="50" cx="100" cy="100" stroke="blue" fill="green" opacity=".5"/>
        <rect class="st0" x="100" y="100" height="100" width="100" stroke="red" opacity=".5"/>
    </g>
</svg>

這樣一來,您就可以在SVG和HTML之間共享CSS文檔,但是您應該注意,上下文選擇器的范圍僅限於每個文件(例如,您不能讓CSS表達式混合HTML和SVG的選擇器,例如div:hover .svg-icon {...}

展示<div>當懸停在另一個 div 及其子項上時</div><div id="text_translate"><p>我有一個 HTML div,里面有孩子。 我有一個附加到 div 的 jQuery 鼠標懸停事件。 鼠標懸停時,我顯示另一個 div,鼠標懸停時,我隱藏它。</p><p> 但是,當我將鼠標懸停在“premiumlink”div 上時,一切正常,但是當我將鼠標移到 div 的一個子項上時,有條件顯示的 div 會隱藏,但隨后 jQuery 發現父 div 仍在懸停,所以它再次顯示它。 然后,如果我將 cursor 移回父 div,則該 div 被隱藏然后再次顯示。</p><p> 我怎樣才能讓鼠標懸停和鼠標懸停適用於所有孩子,而不是這個跳躍的 state?</p><p> 這是我的 HTML</p><pre> &lt;div class="platinumlevel" id="premiumlink"&gt; &lt;h1&gt; &lt;img src="~/Content/Images/colorworld.png" alt="Logo" class="eventimage" /&gt; &lt;a href="@Url.Action("Exhibitor1Attendee", "Home")" class="landing"&gt;Company Name&lt;/a&gt; &lt;/h1&gt; &lt;div id="demopreview" style="display: none;"&gt; I should be displayed when "premiumlink" and all it's children are mouseovered &lt;/div&gt; &lt;/div&gt;</pre><p> JS</p><pre> $("#premiumlink").mouseover(function () { $('#demopreview').show(1000); }).mouseout(function () { $('#demopreview').hide(1000); });</pre></div>

[英]Display <div> when hovering over another div and its children

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Javascript問題:將鼠標懸停在div上時如何從顏色數組更改標題的隨機顏色? 當鼠標懸停在父div上時,同時更改圖像和標題 將鼠標懸停在SVG路徑上時如何顯示div? 如何將鼠標懸停在SVG圈上時獲得工具提示 將鼠標懸停在圖像上時如何更改div的backgroundImage和innerHTML? 將鼠標懸停在鏈接上時更改div的顏色 將鼠標懸停在li上時更改div的顏色 當您停止將鼠標懸停在鏈接上時,如何重置 div 的滾動條? 懸停父級時如何向子級 div 添加樣式? 展示<div>當懸停在另一個 div 及其子項上時</div><div id="text_translate"><p>我有一個 HTML div,里面有孩子。 我有一個附加到 div 的 jQuery 鼠標懸停事件。 鼠標懸停時,我顯示另一個 div,鼠標懸停時,我隱藏它。</p><p> 但是,當我將鼠標懸停在“premiumlink”div 上時,一切正常,但是當我將鼠標移到 div 的一個子項上時,有條件顯示的 div 會隱藏,但隨后 jQuery 發現父 div 仍在懸停,所以它再次顯示它。 然后,如果我將 cursor 移回父 div,則該 div 被隱藏然后再次顯示。</p><p> 我怎樣才能讓鼠標懸停和鼠標懸停適用於所有孩子,而不是這個跳躍的 state?</p><p> 這是我的 HTML</p><pre> &lt;div class="platinumlevel" id="premiumlink"&gt; &lt;h1&gt; &lt;img src="~/Content/Images/colorworld.png" alt="Logo" class="eventimage" /&gt; &lt;a href="@Url.Action("Exhibitor1Attendee", "Home")" class="landing"&gt;Company Name&lt;/a&gt; &lt;/h1&gt; &lt;div id="demopreview" style="display: none;"&gt; I should be displayed when "premiumlink" and all it's children are mouseovered &lt;/div&gt; &lt;/div&gt;</pre><p> JS</p><pre> $("#premiumlink").mouseover(function () { $('#demopreview').show(1000); }).mouseout(function () { $('#demopreview').hide(1000); });</pre></div>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM