SVG 在 div 上响应
SVG responsive on div
正如标题所说,我想给一个div添加一个SVG边框动画。我尝试使用静态 div 但现在我想让它工作,即使 div 宽度和高度动态变化(如缩略图 class 和 Bootstrap)
这是我的 SVG:
<svg>
<line class="top" x1="0" y1="0" x2="3000" y2="0"/>
<line class="left" x1="0" y1="3000" x2="0" y2="0"/>
<line class="bottom" x1="3000" y1="300" x2="0" y2="300"/>
<line class="right" x1="300" y1="0" x2="300" y2="300"/>
</svg>
感谢您的帮助,这是一个jsbin:http://jsbin.com/suvinakaqa/1/edit
例如,您在 HTML
中有以下内容
<div class="myClass">
<svg>
<line class="top" x1="0" y1="0" x2="3000" y2="0"/>
<line class="left" x1="0" y1="3000" x2="0" y2="0"/>
<line class="bottom" x1="3000" y1="300" x2="0" y2="300"/>
<line class="right" x1="300" y1="0" x2="300" y2="300"/>
</svg>
</div>
请使用以下CSS
.myClass svg{
width:100% !important;
height:auto;
}
如果您希望 SVG 响应式填充 <div>
,您需要给它一个 viewBox
并设置 preserveAspectRatio="none"
以便它伸展以填充 <div>
水平和垂直。否则它只会保持它的纵横比,只是放大或缩小以适应 <div>
.
请注意,由于您已禁用纵横比,因此发生的拉伸会导致水平线看起来与垂直线的宽度不同。要解决此问题,您可以将 vector-effect="non-scaling-stroke"
添加到行中。
.myDiv
{
width: 100%;
height: 300px;
}
<div class="myDiv">
<svg width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none"
stroke="black" stroke-width="4">
<line class="top" x1="0" y1="0" x2="100" y2="0" vector-effect="non-scaling-stroke"/>
<line class="left" x1="0" y1="100" x2="0" y2="0" vector-effect="non-scaling-stroke"/>
<line class="bottom" x1="100" y1="100" x2="0" y2="100" vector-effect="non-scaling-stroke"/>
<line class="right" x1="100" y1="0" x2="100" y2="100" vector-effect="non-scaling-stroke"/>
</svg>
</div>
正如标题所说,我想给一个div添加一个SVG边框动画。我尝试使用静态 div 但现在我想让它工作,即使 div 宽度和高度动态变化(如缩略图 class 和 Bootstrap)
这是我的 SVG:
<svg>
<line class="top" x1="0" y1="0" x2="3000" y2="0"/>
<line class="left" x1="0" y1="3000" x2="0" y2="0"/>
<line class="bottom" x1="3000" y1="300" x2="0" y2="300"/>
<line class="right" x1="300" y1="0" x2="300" y2="300"/>
</svg>
感谢您的帮助,这是一个jsbin:http://jsbin.com/suvinakaqa/1/edit
例如,您在 HTML
中有以下内容<div class="myClass">
<svg>
<line class="top" x1="0" y1="0" x2="3000" y2="0"/>
<line class="left" x1="0" y1="3000" x2="0" y2="0"/>
<line class="bottom" x1="3000" y1="300" x2="0" y2="300"/>
<line class="right" x1="300" y1="0" x2="300" y2="300"/>
</svg>
</div>
请使用以下CSS
.myClass svg{
width:100% !important;
height:auto;
}
如果您希望 SVG 响应式填充 <div>
,您需要给它一个 viewBox
并设置 preserveAspectRatio="none"
以便它伸展以填充 <div>
水平和垂直。否则它只会保持它的纵横比,只是放大或缩小以适应 <div>
.
请注意,由于您已禁用纵横比,因此发生的拉伸会导致水平线看起来与垂直线的宽度不同。要解决此问题,您可以将 vector-effect="non-scaling-stroke"
添加到行中。
.myDiv
{
width: 100%;
height: 300px;
}
<div class="myDiv">
<svg width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none"
stroke="black" stroke-width="4">
<line class="top" x1="0" y1="0" x2="100" y2="0" vector-effect="non-scaling-stroke"/>
<line class="left" x1="0" y1="100" x2="0" y2="0" vector-effect="non-scaling-stroke"/>
<line class="bottom" x1="100" y1="100" x2="0" y2="100" vector-effect="non-scaling-stroke"/>
<line class="right" x1="100" y1="0" x2="100" y2="100" vector-effect="non-scaling-stroke"/>
</svg>
</div>