我创建了一个垂直导航手风琴菜单,您可以在其中悬停并单击任何标题(标签(以打开子菜单。
由于某种原因,我的下拉箭头不可单击,但标签的其余部分是可单击的并且功能正常。
如何使我的"箭头"可点击并像标签的其余部分一样发挥作用?
这是jsfiddle
.CSS:
/*Global*/
html,
body {
width: 100%;
margin: 0;
padding: 0;
font-family: helvetica;
}
/*Functionalty*/
.multi-level,
.item ul,
.nav input[type="checkbox"] {
display: none;
}
#menu:checked~.multi-level,
.item input:checked~ul {
display: block;
}
/*Arrow*/
.arrow {
width: 10px;
height: 10px;
vertical-align: middle;
float: left;
margin: 9px 0.5em 0 2em;
}
.item input+.arrow {
transform: rotate(-90deg);
transition: 0.1s;
}
.item input:checked+.arrow {
transform: rotate(0deg);
transition: 0.1s;
}
img {
z-index: 1;
position: relative;
}
/*Styles*/
label:hover {
cursor: pointer;
background-color: #f2f2f2;
position: relative;
}
li:hover {
background-color: #f2f2f2;
}
label {
width: 100%;
display: block;
}
.nav {
width: 100%;
background-color: white;
overflow-x: hidden;
/*border-bottom: 1px solid #CFD8DC;*/
}
/*#nav-icon {
font-size: 28px;
line-height: 50px;
padding-left: 1em;
color: white;
background-color: #F44336;
}*/
.nav ul,
.nav li,
label {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
width: 100%;
}
.item ul {
padding: 0 0.25em;
}
.nav li a {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
}
.item {
margin: 0 0 0 -1.5em;
}
.sub-item {
padding: 0 0m;
}
.HTML:
<div class="nav">
<input type="checkbox" id="menu" checked />
<label for="menu"></label>
<div class="multi-level">
<div class="item">
<input type="checkbox" id="A" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="A">Category One</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="B" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="B">Category Two</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li>
<div class="sub-item">
<input type="checkbox" id="B-A" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="B-A">Sub-Category Two</label>
<ul>
<li><a href="#">Sub-Sub-Category-1</a></li>
<li><a href="#">Sub-Sub-Category-2</a></li>
<li><a href="#">Sub-Sub-Category-3</a></li>
<li><a href="#">Sub-Sub-Category-4</a></li>
<li><a href="#">Sub-Sub-Category-5</a></li>
<li><a href="#">Sub-Sub-Category-6</a></li>
</ul>
</div>
</li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="C" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="C">Category Three</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="D" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="D">Category Four</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
</div>
</div>
:before
替换img
标记,以确保我们点击label
而不是img
/*Global*/
html,
body {
width: 100%;
margin: 0;
padding: 0;
font-family: helvetica;
}
/*Functionalty*/
.multi-level,
.item ul,
.nav input[type="checkbox"] {
display: none;
}
#menu:checked~.multi-level,
.item input:checked~ul {
display: block;
}
/*Arrow*/
.arrow {
width: 10px;
height: 10px;
vertical-align: middle;
float: left;
margin: 9px 0.5em 0 2em;
}
/*Styles*/
label:hover {
cursor: pointer;
background-color: #f2f2f2;
position: relative;
}
li:hover {
background-color: #f2f2f2;
}
label {
width: 100%;
display: block;
position: relative;
}
.nav {
width: 100%;
background-color: white;
overflow-x: hidden;
/*border-bottom: 1px solid #CFD8DC;*/
}
/*#nav-icon {
font-size: 28px;
line-height: 50px;
padding-left: 1em;
color: white;
background-color: #F44336;
}*/
.nav ul,
.nav li,
label {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
width: 100%;
}
.item ul {
padding: 0 0.25em;
}
.nav li a {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
}
.item {
margin: 0 0 0 -1.5em;
}
.item {
margin-left: 0;
}
.item label:before {
content: '';
background: url(https://png.icons8.com/material/50/000000/expand-arrow.png);
width: 10px;
background-size: 100%;
height: 10px;
position: absolute;
top: 9px;
left: 13px;
transform: rotate(-90deg);
}
.item input:checked +label:before {
transform: rotate(0);
}
.sub-item {
padding: 0 0m;
}
<div class="nav">
<input type="checkbox" id="menu" checked />
<label for="menu"></label>
<div class="multi-level">
<div class="item">
<input type="checkbox" id="A" />
<label for="A">Category One</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="B" />
<label for="B">Category Two</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li>
<div class="sub-item">
<input type="checkbox" id="B-A" />
<label for="B-A">Sub-Category Two</label>
<ul>
<li><a href="#">Sub-Sub-Category-1</a></li>
<li><a href="#">Sub-Sub-Category-2</a></li>
<li><a href="#">Sub-Sub-Category-3</a></li>
<li><a href="#">Sub-Sub-Category-4</a></li>
<li><a href="#">Sub-Sub-Category-5</a></li>
<li><a href="#">Sub-Sub-Category-6</a></li>
</ul>
</div>
</li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="C" />
<label for="C">Category Three</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="D" />
<label for="D">Category Four</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
</div>
</div>
https://jsfiddle.net/4v843n7f/34/
我可能会建议在标签元素上使用:before
选择器(而不是在每个标签之前插入img
(。这将解决箭头不可点击的问题,并使HTML更加干燥
<div class="nav">
<input type="checkbox" id="menu" checked />
<label for="menu"></label>
<div class="multi-level">
<div class="item">
<input type="checkbox" id="A" />
<label for="A">Category One</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="B" />
<label for="B">Category Two</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li>
<div class="sub-item">
<input type="checkbox" id="B-A" />
<label for="B-A">Sub-Category Two</label>
<ul>
<li><a href="#">Sub-Sub-Category-1</a></li>
<li><a href="#">Sub-Sub-Category-2</a></li>
<li><a href="#">Sub-Sub-Category-3</a></li>
<li><a href="#">Sub-Sub-Category-4</a></li>
<li><a href="#">Sub-Sub-Category-5</a></li>
<li><a href="#">Sub-Sub-Category-6</a></li>
</ul>
</div>
</li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="C" />
<label for="C">Category Three</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="D" />
<label for="D">Category Four</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
.item label {
position: relative;
width: 100%;
display: block;
padding-left: 2em;
}
.item label:before {
position: absolute;
content:'';
left: 0;
top: 0;
width: 2em;
height: 2em;
background-image: url(https://png.icons8.com/material/50/000000/expand-arrow.png);
background-position: center;
background-repeat: no-repeat;
background-size: 10px;
transform: rotate(-90deg);
transition: 0.1s;
}
label:hover {
cursor: pointer;
background-color: #f2f2f2;
position: relative;
}
.item input:checked+label:before {
transform: rotate(0deg);
transition: 0.1s;
这是一个小提琴 https://jsfiddle.net/Jimujing/3b95ubsx/
标签内设置图像<label>
。为此,您必须更改一些 css 和 html 代码。请在下面查看。.CSS
html,
body {
width: 100%;
margin: 0;
padding: 0;
font-family: helvetica;
}
/*Functionalty*/
.multi-level,
.item ul,
.nav input[type="checkbox"] {
display: none;
}
#menu:checked~.multi-level,
.item input:checked~ul {
display: block;
}
/*Arrow*/
.arrow {
width: 10px;
height: 10px;
vertical-align: middle;
float: left;
margin: 9px 0.5em 0 2em;
}
.item .arrow {
transform: rotate(-90deg);
transition: 0.1s;
}
.item input:checked+.arrow {
transform: rotate(0deg);
transition: 0.1s;
}
img {
z-index: 1;
position: relative;
}
/*Styles*/
label:hover {
cursor: pointer;
background-color: #f2f2f2;
position: relative;
}
li:hover {
background-color: #f2f2f2;
}
label {
width: 100%;
display: block;
}
.nav {
width: 100%;
background-color: white;
overflow-x: hidden;
/*border-bottom: 1px solid #CFD8DC;*/
}
...
.nav ul,
.nav li,
label {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
width: 100%;
}
label {
padding: 0;
}
.item ul {
padding: 0 0.25em;
}
.nav li a {
line-height: 30px;
margin: 0;
padding: 0 2em;
list-style: none;
text-decoration: none;
color: #000;
font-weight: 100;
}
.item {
margin: 0 0 0 -1.5em;
}
.sub-item {
padding: 0 0m;
}
.HTML
<div class="nav">
<input type="checkbox" id="menu" checked />
<label for="menu"></label>
<div class="multi-level">
<div class="item">
<input type="checkbox" id="A" />
<label for="A"> <img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"> Category One</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="B" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="B">Category Two</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li>
<div class="sub-item">
<input type="checkbox" id="B-A" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="B-A">Sub-Category Two</label>
<ul>
<li><a href="#">Sub-Sub-Category-1</a></li>
<li><a href="#">Sub-Sub-Category-2</a></li>
<li><a href="#">Sub-Sub-Category-3</a></li>
<li><a href="#">Sub-Sub-Category-4</a></li>
<li><a href="#">Sub-Sub-Category-5</a></li>
<li><a href="#">Sub-Sub-Category-6</a></li>
</ul>
</div>
</li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="C" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="C">Category Three</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
<div class="item">
<input type="checkbox" id="D" />
<img src="https://png.icons8.com/material/50/000000/expand-arrow.png" class="arrow"><label for="D">Category Four</label>
<ul>
<li><a href="#">Sub-Category One</a></li>
<li><a href="#">Sub-Category Two</a></li>
<li><a href="#">Sub-Category Three</a></li>
</ul>
</div>
</div>
</div>