欢迎访问 ajycc20のblog

一个 Navbar Demo

HTML

<div class="main-container">
  <ul>
    <li><a href="#">Link1</a></li>
    <li><a href="#">Link2</a></li>
    <li><a href="#">Link3</a></li>
    <li><a href="#">Link4</a></li>
    <li><a href="#">Link5</a></li>
    <li class="slide"></li>
  </ul>
</div>

CSS

body {
  margin: 0;
  padding: 0;
  background: #34495e;
  font-family: sans-serif;
}
.main-container {
  width: 100%;
  height: 100%;
}
ul {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: flex;
  border: 1px solid #2980b9;
  background: #000;
  overflow: hidden;
  box-shadow: 0 0 0 5px #333;
  border-radius: 30px;
  margin: 0;
  padding: 0;
}
ul li {
  list-style: none;
  width: 150px;
}
ul li a {
  text-decoration: none;
  display: block;
  padding: 20px;
  text-align: center;
  color: #fff;
  transition: .5s;
}
ul li:hover a {
  color: #222222;
}
.slide {
  position: absolute;
  height: 100%;
  top: 0;
  left: calc(50% - 75px);
  z-index: -1;
  transition: .5s;
}
ul li:nth-child(1):hover ~ .slide {
  left: 0;
  background: #fff;
}
ul li:nth-child(2):hover ~ .slide {
  left: 150px;
  background: #fff;
}
ul li:nth-child(3):hover ~ .slide {
  left: 300px;
  background: #fff;
}
ul li:nth-child(4):hover ~ .slide {
  left: 450px;
  background: #fff;
}
ul li:nth-child(5):hover ~ .slide {
  left: 600px;
  background: #fff;
}

Demo

Description

清除浏览器默认样式

margin: 0;
padding: 0;

进行屏幕居中定位

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

display:flex:使li标签水平排列
list-style:none: 清除list样式(去掉前面的 · )
<li class="slide"></li>: 使用一个多余的li来构造滑块,一开始是想直接在标签上写,后来发现没有多余的标签控制就达不到想要的效果
transition: .5s: 添加过渡效果,变化更平滑
left: calc(50% - 75px);: 计算宽度的50%减去半个滑块宽度,设置这个是为了让滑块显示更加合理,从中间最先出现,而不是默认的位于最左边
ul li:nth-child(1):hover ~ .slide: 选择 li:nth-child(1)后指定的.slide滑块,并设置颜色和位置,从而达到最终效果

img

留下你的脚步