#html #css #svg
Вопрос:
У меня есть простой элемент SVG с изображением и текстом внутри, но я хочу нанести штрихи на границу элемента SVG, когда элемент наведен. Но вместо этого штрихи применяются ко всему остальному, что содержит изображение, а также текстовый элемент в SVG.
<style>
svg{
outline: none;
border: 1px solid red;
position: absolute;
background: transparent;
cursor: pointer;
left: 0;
top: 0;
fill: none;
stroke: #fff;
stroke-dasharray: 150 480;
stroke-dashoffset: 150;
transition: 1s ease-in-out;
}
svg:hover {
transition: 1s ease-in-out;
background: #4F95DA;
stroke-dashoffset: -480;
}
</style>
<svg width="287" height="131" viewBox="0 0 287 131" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Menu2">
<rect id="briefcase 1" x="118" y="22" width="51" height="51" fill="url(#pattern0)"/>
<text id="label1" fill="black" xml:space="preserve" style="white-space: pre" font-family="Roboto" font-size="18" font-weight="bold" letter-spacing="0em"><tspan x="84" y="107.652">Create Account</tspan></text>
</g>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0" transform="scale(0.002)"/>
</pattern>
<image id="image0" data-name="briefcase.png" width="500" height="500" xlink:href="briefcase.png"/>
</defs>
</svg>
Комментарии:
1. Вопрос не ясен … Вам просто нужно заменить красный цвет границы при наведении курсора?
2. @s.кузнецов на самом деле нет, я хочу, чтобы белые штрихи анимировались над границей, когда кнопка зависла. в настоящее время белые штрихи анимируются вокруг изображения и текста вместо этого
3. Вместо того, чтобы применять его к элементу svg, попробуйте
svg:hover #briefcase1 { transition: 1s ease-in-out; stroke-dashoffset: -480; }
4. @enxaneta спасибо, но это не сработает. он будет применять переходы только к границам изображения. Мне нужно, чтобы они были на красной границе
Ответ №1:
Я решил эту проблему, просто нарисовав линии на границах SVG, а затем нанеся штрихи на линии.
<style>
svg{
outline: none;
/* border: 1px solid red; */
position: absolute;
background: transparent;
cursor: pointer;
left: 10;
top: 0;
fill: none;
stroke-dasharray: 150 480;
stroke-dashoffset: 150;
transition: 0.7s ease-in-out;
}
.lines{
stroke: black;
}
svg:hover {
transition: 0.7s ease-in-out;
background: #ddd;;
stroke-dashoffset: -480;
}
</style>
<svg width="287" height="131" viewBox="0 0 287 131" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Menu2" clip-path="url(#clip0)">
<rect id="briefcase 1" x="118" y="22" width="51" height="51" fill="url(#pattern0)"/>
<text id="label1" fill="black" xml:space="preserve" style="white-space: pre" font-family="Roboto" font-size="18" font-weight="bold" letter-spacing="0em"><tspan x="84" y="107.652">Create Account</tspan></text>
<line id="Line1" class="lines" x1="0.5" x2="0.5" y1="0.5" y2="131"/>
<line id="Line2" class="lines" x1="0.5" x2="286" y1="0.5" y2="0.5"/>
<line id="Line3" class="lines" y1="130" x1="0.5" x2="286" y2="130"/>
<line id="Line4" class="lines" x1="286" x2="286" y1="0.5" y2="130" />
</g>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0" transform="scale(0.002)"/>
</pattern>
<clipPath id="clip0">
<rect width="286.55" height="131" fill="white"/>
</clipPath>
<image id="image0" data-name="briefcase.png" width="500" height="500" xlink:href="briefcase.png"/>
</defs>
</svg>