是的,这是必需的。
当人们开始在桌面浏览器上浏览时(1990 年代),每个人的屏幕分辨率都很低,比如 640×480 或 800×600。
但随后,在 2007 年,iPhone 发布了。它的屏幕分辨率为 320×480,低于当时大多数桌面屏幕。所以考虑下面的 HTML 代码:
<!DOCTYPE html>
<html>
<img src="/reallylargeimg.jpeg" style="width:640; height:480;" />
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut enim ex, sagittis id erat nec, imperdiet posuere erat. Mauris pharetra neque quis venenatis sagittis.</p>
</html>
然后,因为图像真的很大,网页比 iPhone 还大。此外,它使用静态宽度和高度。
所以他们缩小了页面。没有视口标签看起来真的很糟糕,就像上面一样。
Apple 还发布了 viewport 标签。在这里,您可以设置自定义设备宽度:
<meta name="viewport" content="width=200px" />
这会将屏幕宽度设置为 200 像素。更广泛使用的解决方案是:
<meta name="viewport" content="width=device-width" />
将宽度设置为屏幕宽度。
但我们也想控制规模。方法如下:添加“初始比例”属性。我们有这样的东西:
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
没有这个标签,网站看起来真的很小,迫使用户放大。但是有了这个标签,一切都解决了。
所以是的,meta viewport 标签应该在所有网站上使用,如果您想要良好的用户体验,它是强制性的。您可能还需要使用媒体查询来更改不同屏幕宽度的 CSS,例如将菜单栏折叠成汉堡菜单。元视口标签不会为您执行此操作,但您应该这样做。
@media only screen and (max-width: 600px) {
#hamburgermenu {
display:block;
}
#menubar {
display:none;
}
}
@media only screen and (min-width: 600px) {
#hamburgermenu {
display:none;
}
#menubar {
display:block;
}
}
所以完成的页面应该是这样的。这是一个粗略的网站示例,但它应该可以按预期工作:在 600 像素处显示菜单并在 600 像素以上显示菜单栏。
var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
console.log('closed!');
content.style.display = "none";
} else {
content.style.display = "block";
console.log('opened!');
}
});
}
@media only screen and (max-width: 600px) {
#hamburgermenu {
display: block;
}
#menubar {
display: none;
}
}
#hamburgermenu {
position: fixed;
top: 0;
width: 100%;
background-color: aqua;
border: 1px solid black;
}
@media only screen and (min-width: 600px) {
#hamburgermenu {
display: none;
}
#menubar {
display: block;
}
}
li {
list-style: none;
cursor:pointer;
}
li::before {
content: "→ ";
user-select: text;
-o-user-select: text;
-ms-user-select: text;
-moz-user-select: text;
-webkit-user-select: text;
}
::selection {
background-color: #b3d4fc;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!--over here-->
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>demo</title>
</head>
<body>
<div id="hamburgermenu">
<button class="collapsible">Open Menu</button>
<ul style="display:none;">
<li onclick="console.log('option 1!'); alert('1');">Option 1</li>
<li onclick="console.log('option 2!'); alert('2');">Option 2</li>
<li onclick="console.log('option 3!'); alert('3');">Option 3</li>
</ul>
</div>
<div id="menubar">
<button onclick="console.log('option 1!'); alert('1');">Option 1</button>
<button onclick="console.log('option 2!'); alert('2');">Option 2</button>
<button onclick="console.log('option 3!'); alert('3');">Option 3</button>
</div>
<br>
<p>Resize the window to see the media query effect.
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut enim ex, sagittis id erat nec, imperdiet posuere erat. Mauris pharetra neque quis venenatis sagittis.</p>
</body>
</html>