SVG位置在页面上缩放

时间:2019-03-31 17:25:25

标签: html css web svg resize

我目前正在为一个uni项目编码一个网站,而不仅仅是使用常规形状。我以为我会尝试使用SVG制作自定义形状,但是我目前遇到的唯一问题是,在重新缩放页面时,我无法固定其中一个SVG路径,而另一个是。

我试图通过px和百分比设置SVG路径的位置,但是似乎没有任何作用。我也尝试将路径的位置设置为固定。 Image of the site before scale Image of rescale

SVG代码

<div id="midWrapper">
    <!--Middle container SVG as it is a custom shape-->
    <div id="containerMiddle">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 980 590"><title>Custom shaped rectangle with corner missin</title><path d="M766.29,13.57,967.43,214.71A46.32,46.32,0,0,1,981,247.47V544.68A46.32,46.32,0,0,1,934.68,591H46.32A46.32,46.32,0,0,1,0,544.68V46.32A46.32,46.32,0,0,1,46.32,0H733.53A46.32,46.32,0,0,1,766.29,13.57Z" style="fill:#5f1742; pointer-events: none;"/></svg>
    </div>

    <!--Top right corner of the middle container, used as a link to call pendle burton-->
    <div id="contactTriangle">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 185.99 185.99"><title>Phone Icon in a Triangle used to call the restaurant</title>
            <path d="M186,9.92V176.05a9.92,9.92,0,0,1-16.93,7L2.93,16.93A9.92,9.92,0,0,1,9.94,0H176.07A9.92,9.92,0,0,1,186,9.92Z" style="fill:#fff"/>
            <path d="M129.27,80.74a3,3,0,0,1-.14,2.54c-1.36,2.2-3,4.24-4.44,6.36-1.94,2.79-2.38,5.58-.64,8.76,3,5.56,5.82,11.26,8.71,16.9,1.8,3.49,5.12,5.07,8.43,3A132.31,132.31,0,0,0,155.11,108c2.38-1.94,2-5,1.76-7.79-.58-7.44-3.2-14.31-6.75-20.73-10.86-19.59-24.34-37.06-42.84-50.07-4.06-2.86-9.06-4.42-13.71-6.38a7,7,0,0,0-7.32,1.31,124.44,124.44,0,0,0-11,9.71C72,37.36,72.55,41,76.09,44,81,48.05,85.88,52,90.64,56.23a7.06,7.06,0,0,0,7.93,1.31c2.91-1.14,5.77-2.38,9-3.71A141.83,141.83,0,0,1,129.27,80.74Z" style="fill:#5f1742"/>
            <path d="M107.56,53.83a141.83,141.83,0,0,1,21.71,26.91,3,3,0,0,1-.14,2.54c-1.36,2.2-3,4.24-4.44,6.36-1.94,2.79-2.38,5.58-.64,8.76,3,5.56,5.82,11.26,8.71,16.9,1.8,3.49,5.12,5.07,8.43,3A132.31,132.31,0,0,0,155.11,108c2.38-1.94,2-5,1.76-7.79-.58-7.44-3.2-14.31-6.75-20.73-10.86-19.59-24.34-37.06-42.84-50.07-4.06-2.86-9.06-4.42-13.71-6.38a7,7,0,0,0-7.32,1.31,124.44,124.44,0,0,0-11,9.71C72,37.36,72.55,41,76.09,44,81,48.05,85.88,52,90.64,56.23a7.06,7.06,0,0,0,7.93,1.31C101.48,56.4,104.34,55.16,107.56,53.83Z" style="fill:#5f1742"/>
        </svg>
    </div>
</div><!--Closing tag for SVG-->

元素的所有样式

#containerMiddle{
width: 980px;
height: 590px;
margin-top: 60px;
pointer-events: none;
margin-left: auto;
margin-right: auto;
}

#contactTriangle{
width: 185px;
height: 185px;
pointer-events: none;
margin-left: 66%;
margin-top: -31%;
}

任何有关如何改善此站点以使三角形保持原位并增加站点响应度的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您应该避免将元素定位在边缘。

您始终希望您的角落svg位于容器的右上角,因此请尝试使用position:absoluteright:calc(50% - 490px)top:0-只要您当前的设置有效因为您的父容器具有position:relative

在这里拨弄:https://jsfiddle.net/15scjpvd/1/

#midWrapper {
  position:relative;
}

#containerMiddle{
  width: 980px;
  height: 590px;
  margin-top: 60px;
  pointer-events: none;
  margin-left: auto;
  margin-right: auto;
}

#contactTriangle{
  width: 185px;
  height: 185px;
  pointer-events: none;
  top:0;
  right: calc(50% - 490px);
  position:absolute;
}

我之所以使用50%-490px,是因为您的容器当前居中对齐-50%代表父容器的中心,而490px是其整个宽度的一半。

如果您希望网站具有更高的响应速度,可以使用百分比代替使用widthheight并设置像素值。

那么看看这个小提琴吧:https://jsfiddle.net/3x6187ov/4/ 那么三角形和矩形的宽度分别是父容器宽度的100%和30%。

#midWrapper {
  position:relative;
  width:100%;
}

#containerMiddle{
  width: 100%;
  margin-top: 60px;
  pointer-events: none;
  margin-left: auto;
  margin-right: auto;
}

#contactTriangle{
  width: 20%;
  pointer-events: none;
  top:0;
  right:0;
  position:absolute;
}

如果容器的扩展不能超过某个特定的width,则还可以指定max-width属性。然后,您可以使用以下命令:https://jsfiddle.net/3fva1cqn/2/

#midWrapper {
  position:relative;
  width:100%;
  max-width:960px;
}

#containerMiddle{
  width: 100%;
  margin-top: 60px;
  pointer-events: none;
  margin-left: auto;
  margin-right: auto;
}

#contactTriangle{
  width: 20%;
  pointer-events: none;
  top:0;
  right:0;
  position:absolute;
}

此外,在当前情况下,您不必指定svg的宽度和高度,因为只要您没有将preserveAspectRatio专门设置为none,默认情况下它们将保持宽高比用viewBox声明的比例。