body {
margin: 0vh 0vw;
}
.header {
position: relative;
width: 100%;
height: 12vh;
background-color: #004d40;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
top: 0;
}
.line {
position: absolute;
left: 0;
top: calc(50%);
width: 100%;
height: 0.25vh;
background-color: white;
z-index: 1;
}
svg {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, 0%);
z-index: 2;
}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SVG Header with Half Circle</title>
</head>
<body>
<div class="header">
<div class="line"></div>
<svg width="10vw" height="5vh" viewBox="0 0 100 50" xmlns="http://www.w3.org/2000/svg">
<path d="M0,0 A50,50 0 0,0 100,0" fill="#004d40" stroke="white" stroke-width="3"/>
</svg>
</div>
</body>
</html>
Hello, when the svg object goes to mobile view, the svg gets distorted and a gap occurs between the semicircle and the line. Why is this caused and how can we solve it.
on dekstop:
on mobie emulation:
Expected Result:
I was expecting it to look the same on mobile as on desktop.
3
Answers
Avoid using
vh
in mobile.100vh
in mobile contains the height of browser’s navigation bar, elements usingvh
to define height may have a different appearance from the desktop.By default the SVG is trying to fit and align the lines into the center of the
viewBox
(or viewport) it is given. You can control this behavior with thepreserveAspectRatio
attribute on the<svg>
element.In the example below I’ve used the value
xMidYmin meet
which translates to:background-size: contain
works.SVG that is subtly cut also seems to need to be modified.
You have to be sensitive to the use of the unit.
And please check this. It will be helpful.
How to use the <svg> viewBox attribute?