html - CSS定位嵌套ul和显示flex问题
问题描述
我正在尝试创建一个垂直显示和隐藏按钮菜单。
我试图实现这一点,当单击“城市”方块时,带有类的 ulnested-ul
将按应有的方式显示。但问题是我不能真正将 li 与 ul 中的类一起定位nested-li
,.parent
所以nested-li
会自动换行。我试过flex-wrap:wrap
了,那只会使nested-li
直线下降。max-width
我希望它像正常一样垂直显示,如果它达到父宽度
的,则自动换行到下一行。
$('.radio').on('click', function() {
$('.radio').each(function() {
if ($(this).is(':checked')) {
$('.nested-ul').show();
} else {
$('.nested-ul').hide();
}
});
});
ul {
list-style: none;
}
li {
width: 100%;
}
.parent {
width: 450px;
height: 400px;
background-color: #c8c8c8;
}
.child {
width: 45%;
height: 100%;
margin-right: 15px;
float: left;
}
label {
width: 100%;
min-height: 100px;
background-color: #f8f8f8;
float: left;
transition: 0.5s ease;
text-align: center;
}
label p {
margin-top: 35px;
}
.radio {
display: none;
transition: 0.5s ease;
}
.nested-ul {
transition: 0.5s ease;
position: relative;
left: 0;
top: 15px;
max-height: inherit;
display: flex;
left: calc(-100% - 55px);
}
.nested-li {
min-width: 120px;
margin-right: 15px;
}
.radio:checked+label,
label:hover {
cursor: pointer;
background-color: #ff0088;
}
.radio:checked+label>p,
label:hover>p {
color: #ffffff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="parent">
<li class="child">
<input type="radio" id="colors" class="radio" name="radio">
<label for="colors">
<p>Colors</p>
</label></li>
<li class="child">
<input type="radio" id="cities" class="radio" name="radio">
<label for="cities">
<p>Cities</p>
</label>
<ul class="nested-ul" style="display:none">
<li class="nested-li">
<label for="">
<p>New York</p>
</label></li>
<li class="nested-li">
<label for="">
<p>Calfornia</p>
</label></li>
<li class="nested-li">
<label for="">
<p>Beijing</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Shanghai</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Tokyo</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Copenhagen</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Berlin</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>London</p>
</label>
</li>
</ul>
</li>
</ul>
有人有解决方案吗?
解决方案
$('.radio').on('click', function() {
$('.radio').each(function() {
if ($(this).is(':checked')) {
$('.nested-ul').show();
} else {
$('.nested-ul').hide();
}
});
});
ul {
list-style: none;
}
li {
width: 100%;
}
.parent {
width: 450px;
height: 400px;
background-color: #c8c8c8;
position:relative;
}
.child {
width: 45%;
height: 100%;
margin-right: 15px;
float: left;
}
label {
width: 100%;
min-height: 100px;
background-color: #f8f8f8;
float: left;
transition: 0.5s ease;
text-align: center;
}
label p {
margin-top: 35px;
}
.radio {
display: none;
transition: 0.5s ease;
}
.nested-ul {
transition: 0.5s ease;
position: absolute;
left: 0;
right: 0;
top: 130px;
max-height: inherit;
display: flex;
flex-wrap: wrap;
}
.nested-li {
min-width: 120px;
margin-right: 15px;
width:auto;
}
.radio:checked+label,
label:hover {
cursor: pointer;
background-color: #ff0088;
}
.radio:checked+label>p,
label:hover>p {
color: #ffffff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="parent">
<li class="child">
<input type="radio" id="colors" class="radio" name="radio">
<label for="colors">
<p>Colors</p>
</label></li>
<li class="child">
<input type="radio" id="cities" class="radio" name="radio">
<label for="cities">
<p>Cities</p>
</label>
<ul class="nested-ul" style="display:none">
<li class="nested-li">
<label for="">
<p>New York</p>
</label></li>
<li class="nested-li">
<label for="">
<p>Calfornia</p>
</label></li>
<li class="nested-li">
<label for="">
<p>Beijing</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Shanghai</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Tokyo</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Copenhagen</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>Berlin</p>
</label>
</li>
<li class="nested-li">
<label for="">
<p>London</p>
</label>
</li>
</ul>
</li>
</ul>
推荐阅读
- android - Retrofit2 - GSON - 应为 BEGIN_ARRAY 但为 STRING 或应为 BEGIN_OBJECT 但为 BEGIN_ARRAY
- mysql - 创建和调用存储过程所需的权限
- arrays - 如何使用 RestfulAPI 传输像 byte [] 这样的文件
- ansible - 在 Ansible 查找模块中,如何在包含参数中使用负查找正则表达式
- excel - Excel VBA拒绝激活工作簿
- iframe - iframe 根本没有加载到事件帖子上
- c# - 如何使 DataTemplate 响应 WPF 中的双击?
- c# - Unity Encapsulation,property 强制我改写变量名?
- javascript - 将承诺转换为等待调用时的“等待是保留字”
- c++ - C++ std::stringstream 到 const char* 的转换