html - 如何使用 css 和 flexbox 在所选侧导航项的末尾显示箭头?
问题描述
我正在构建一个侧面导航组件,其中一个要求是在所选项目的末尾显示一个白色箭头。我不太确定如何实现它。这是预期的行为,如果您注意到映射选择的菜单项在其末尾有一个白色箭头。
这是到目前为止我拥有的带有 html 和 css 位的代码片段。我做了一些研究,看起来可能可以通过使用位于下一个锚标记的额外元素的 css 边框操作来实现,但我无法深入了解它。
.person-container {
display: flex;
}
.main-section {
margin: 0px;
padding: 10px;
flex-grow: 2;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
width: 200px;
background-color: #f1f1f1;
}
li a {
display: block;
color: #000;
padding: 16px 16px;
text-decoration: none;
border: 0.2px solid #004563;
border-bottom: 0px;
}
li:last-child {
border-bottom: 0.2px solid #004563;
}
li a.is-active {
background-color: #004563;
color: white;
}
li a:hover:not(.is-active) {
background-color: #70c2e5;
color: white;
}
<div class="person-container">
<nav class="side-nav">
<ul>
<li><a href="#home">Details</a></li>
<li><a href="#news">Addresses</a></li>
<li><a href="#contact">Hobies</a></li>
<li><a href="#about">Affiliates</a></li>
<li><a class="is-active" href="#about">Mappings</a></li>
<li><a href="#about">Notes</a></li>
</ul>
</nav>
<div class="main-section">
<h3>User Profile</h3>
<hr />
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
</div>
解决方案
使用 :after 添加 CSS
li a.is-active {
background-color: #004563;
color: white;
position:relative;
}
li a.is-active::after {
right: 0%;
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: rgba(136, 183, 213, 0);
border-right-color: #fff;
border-width: 10px;
margin-top: -10px;
}
.person-container {
display: flex;
}
.main-section {
margin: 0px;
padding: 10px;
flex-grow: 2;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
width: 200px;
background-color: #f1f1f1;
}
li a {
display: block;
color: #000;
padding: 16px 16px;
text-decoration: none;
border: 0.2px solid #004563;
border-bottom: 0px;
}
li:last-child {
border-bottom: 0.2px solid #004563;
}
li a.is-active {
background-color: #004563;
color: white;
position:relative;
}
li a:hover:not(.is-active) {
background-color: #70c2e5;
color: white;
}
li a.is-active::after {
right: 0%;
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
border-color: rgba(136, 183, 213, 0);
border-right-color: #fff;
border-width: 10px;
margin-top: -10px;
}
<div class="person-container">
<nav class="side-nav">
<ul>
<li><a href="#home">Details</a></li>
<li><a href="#news">Addresses</a></li>
<li><a href="#contact">Hobies</a></li>
<li><a href="#about">Affiliates</a></li>
<li><a class="is-active" href="#about">Mappings</a></li>
<li><a href="#about">Notes</a></li>
</ul>
</nav>
<div class="main-section">
<h3>User Profile</h3>
<hr />
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<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. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
</div>
推荐阅读
- azure - 使用 Azure EventHubs 调用 ADF 管道
- reporting-services - 无法在 Visual Studio 2017 中添加 Crystal Report
- git - Git:如何确保我不会将哈希提交/推送到尚未推送到远程的子模块?
- spring - Ehcache - 用于 removeAll 操作的磁盘持久缓存的 java.io.EOFException
- conv-neural-network - 单个cnn如何预测YOLO中的bounding box坐标、objectness score和概率?
- css - 如何增加输入文件元素的面积?
- python-2.7 - 当文本输入专注于 Kivy Python 时如何显示虚拟键盘
- typescript - 如何将 VueLoaderPlugin 导入 TypeScript 文件?
- mongodb - GCP 上的 MongoDB Atlas:有没有办法限制 MongoDB Atlas 只接受来自我项目中运行的 Compute 实例的连接请求
- node.js - 在 sudo 用户中使用 nvm 安装节点