【发布时间】:2021-02-16 22:50:31
【问题描述】:
我在页面顶部创建了一个固定导航栏,可以自动滚动到网页的某些部分。但是,它不会停在正确的位置,它总是滚动到离部分开头太远的地方。我需要它来停止精确,以便导航栏与新选定部分的开头连接。
@viewport {
width: device-width;
zoom: 1.0;
}
html {
scroll-behavior: smooth;
}
:root {
--base-color: #383E4C;
--box-color: #F2F2F2;
--border-color: #808080;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
background-color: white;
font-family: 'Cabin', Arial, sans-serif;
}
/* homepage section */
#navbar {
background-color: var(--base-color);
width: 100%;
height: 110px;
overflow: hidden;
position: fixed;
top: 0;
z-index: 1;
}
#navbar ul {
list-style: none;
color: white;
position: relative;
top: 50%;
-ms-transform: translateY(-50%);
transform: translateY(-50%);
text-align: center;
}
#navbar ul li {
display: inline;
font-size: 20px;
border: 1px solid var(--border-color);
padding: 18px 26px;
margin-left: 10px;
}
#navbar ul li:hover {
background-color: #646d7c;
transition: 0.5s;
}
#navbar a {
text-decoration: none;
color: white;
}
#banner {
margin-top: 110px;
}
#banner img {
max-height: 100%;
max-width: 100%;
}
.banner-image {
position: relative;
}
.banner-items {
position: absolute;
text-align: center;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/* about section */
.about-container {
text-align: center;
width: 100%;
height: 800px;
display: flex;
flex-flow: row wrap;
justify-content: center;
}
.infobox {
background-color: var(--box-color);
border: 1px solid var(--border-color);
margin: 1px;
width: 15%;
height: 60%;
margin: 80px 40px;
}
.about-container2 {
margin-top: -200px;
text-align: center;
width: 100%;
height: 800px;
display: flex;
flex-flow: row wrap;
justify-content: center;
}
.infobox2 {
background-color: var(--box-color);
border: 1px solid var(--border-color);
margin: 1px;
width: 30%;
height: 60%;
margin: 80px 40px;
}
.infobox img {
max-height: 100%;
max-width: 100%;
}
.infobox2 img {
width: 100%;
height: 45%;
}
.infobox p {
padding: 10px 20px;
text-align: left;
}
.infobox2 p {
padding: 20px 40px;
}
.infobox button {
height: 40px;
width: 80px;
margin-top: 20px;
border: none;
border-radius: 20px;
color: white;
background-color: var(--base-color);
}
.infobox button:hover {
height: 45px;
width: 85px;
cursor: pointer;
transition: 0.25s;
}
/* service */
#services-banner {
width: 100%;
height: 300px;
margin-top: -150px;
}
#services-banner h1 {
color: white;
font-size: 50px;
text-shadow: 2px 2px black;
}
.services-image {
position: relative;
}
.services-items {
position: absolute;
text-align: center;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
#services-container {
width: 100%;
height: 800px;
}
<!DOCTYPE HTML>
<html lang="en" id="top">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Cabin:wght@600&display=swap" rel="stylesheet">
<title>Website Template</title>
</head>
<body>
<div id="navbar">
<ul>
<li><a href="#top">Homepage</a></li>
<li><a href="#about-us">About Us</a></li>
<li><a href="#services-banner">Services</a></li>
<li>Contact</li>
<li>External</li>
</ul>
</div>
<div id="banner" class="banner-image" style="margin-top: 110px">
<img src="images/banner-mountains.jpg" alt="banner" />
<div class="banner-items">
<h1 style="font-size: 50px">Homepage Title</h1>
<p style="font-size: 20px">Some long space filling text here</p>
</div>
</div>
<div id="about-us" class="about-container">
<div class="infobox">
<img src="images/city.jpg" alt="city">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
</p>
<button>Button</button>
</div>
<div class="infobox">
<img src="images/lake.jpg" alt="lake">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
</p>
<button>Button</button>
</div>
<div class="infobox">
<img src="images/road.jpg" alt="road">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
</p>
<button>Button</button>
</div>
</div>
<div id="about-us2" class="about-container2">
<div class="infobox2">
<img src="images/forest.jpg" alt="forest">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<br><br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Suscipit adipiscing bibendum est ultricies integer quis auctor elit.
</p>
</div>
<div class="infobox2">
<img src="images/bridge.jpg" alt="bridge">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<br><br> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Suscipit adipiscing bibendum est ultricies integer quis auctor elit.
</p>
</div>
</div>
<div id="services-banner" class="services-image">
<img src="images/banner-services.jpg" alt="services-banner">
<div class="services-items">
<h1>Services</h1>
</div>
</div>
<div id="services-container">
</div>
</body>
</html>
【问题讨论】:
-
滚动到某些部分是什么意思?你能提供一个你具体想要实现的例子吗?
-
fixed position表示它将在实际流程之外。结合anchor定位,它将永远关闭。anchor定位将始终将目标元素移动到视口的最顶部,除非您使用 JS 脚本来偏移它。 -
@JoshKatofsky OP 正在使用一种名为
anchor的技术,您使用的链接是:<a href="#id"></a>。使用#id作为hyper reference而不是普通的链接路径会将页面移动到具有ID的特定元素。通常它会立即跳转到该部分,除非您使用此 css 行:html { scroll-behavior: smooth; }然后滚动而不是跳转。您还可以将其与 css 中的:target选择器结合使用。