2014-11-11 3 views
1

Я смотрел на SVG-трюки Криса Койера на CSS-tricks.com, а также недавно видел его на конференции, где он говорил о полномочиях SVG и о том, как вы можете сохранить все активы в одном внешнем svg-файле.SVG - Доступ к отдельным узлам по xlink: внешний источник href

<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> 

    <symbol id="beaker" viewBox="214.7 0 182.6 792"> 
    <!-- <path>s and whatever other shapes in here --> 
    </symbol> 

    <symbol id="shape-icon-2" viewBox="0 26 100 48"> 
    <!-- <path>s and whatever other shapes in here --> 
    </symbol> 

</svg> 

Тогда вы могли бы просто использовать его как это:

<svg class="icon"> 
    <use xlink:href="#shape-icon-1" /> 
</svg> 

<svg class="icon"> 
    <use xlink:href="#shape-icon-2" /> 
</svg> 

Звучит здорово! НО, я хочу иметь доступ к отдельным узлам в каждом символе и изменять их с помощью CSS, как обычно, если SVG был встроен в HTMl.

Взгляните на этот CodePen: http://codepen.io/chriscoyier/pen/Hwcxp

Я думал, что я мог бы сделать это, но я не могу заставить его работать:

.icon path{ 
    fill: green; 
} 

Это делает, но это изменяет фактический источник svg

#beaker path { 
fill: green; 
} 

Что я хочу сделать, это повторно использовать графический элемент в сетке. И при зависании, измените узел в svg. Но только на узле этого конкретного родителя. Не все из них.

+0

Вы не можете получить доступ часть повторно используется графический с CSS селекторов; селекторы могут применяться только к исходному изображению (затрагивая все копии значка) или самому элементу использования (затрагивая стили * унаследованные * экземпляром значка). Чтобы иметь эффект зависания, который работает кросс-браузер, вам необходимо переопределить часть значка, который вы хотите изменить, чтобы он использовал унаследованные стили. Затем вы можете определить эффект наведения на элемент use или его родительский SVG. [Подробнее об этом вопросе] (http://stackoverflow.com/q/13673441/3128209); обозначая это как дубликат. – AmeliaBR

+0

Обратите внимание, что, хотя связанный вопрос конкретно связан с эффектами зависания, он также работает для любых других изменений стиля, которые вы хотите создать в одном экземпляре значка. – AmeliaBR

+0

Я вижу, поэтому он все еще возвращается к добавлению SVG к документу inline. По крайней мере, для таких вещей. Спасибо за разработанный ответ! :) – user216357

ответ

-2

Firefox делает какую-то неизвестную вещь, где вы можете ее стилизовать таким образом.
Редактировать:

Точнее:
Возможно, Firefox превратил этот символ в DOM. http://codepen.io/Type-Style/pen/EaGbam

.hoverME:hover path, .hoverME:hover circle { 
    fill: red; 
} 

Это также работает с внешним файлом. (К сожалению, это не с файлами CrossDomain)

«Но вы можете вставить только имя класса пути. Это будет работать». Я имею в виду, что пока вы остаетесь в SVG с помощью ваших селекторов, он будет работать.

circle:hover, path:hover { 
    fill: red; 
} 
+1

Этот ответ непонятен и, похоже, не относится к вопросу выше. Добавьте код для его поддержки и объясните, почему. (Кроме того, почему Firefox? Вопрос не указывает какого-либо браузера, в частности, будет ли это работать на других браузерах?) –

+0

У Firefox есть известная ошибка, когда мы ее исправляем, она больше не будет работать так, что не так много что каждый может использовать его. –

+0

Спасибо @RobertLongson. Соглашусь. –

Смежные вопросы