如何解决使用flex等于列
我为移动和Web的网格视图创建了纯CSS手风琴。 现在我正面临Web视图的列宽问题。在当前实现中,所有列的列宽都不相同。 我想使用flex创建一个相等的列。
注意:此html对移动设备响应,将为移动设备提供手风琴,而对于Web则为行。
/*
CSS for the main interaction
*/
.accordion > input[name="collapse"] {
display: none;
/*position: absolute;
left: -100vw;*/
}
/* .accordion label,.accordion .content{
max-width: 620px;
margin: 0 auto;
} */
.accordion .content {
background: #fff;
overflow: visible;
height: 0;
padding: 10px 0;
}
.accordion > input[name="collapse"]:checked ~ .content {
height: 200px;
transition: height 0.5s;
}
.accordion label {
display: block;
}
.edit-delete .item {
flex-direction: row;
}
.edit-delete a {
padding: 0 10px;
}
/* For Desktop */
@media only screen and (min-width: 1023px) {
.accordion > input[name="collapse"]:checked ~ .content {
height: auto;
}
.accordion .handle {
width: 300px;
}
.handle label,.content,.col,.item {
display: flex;
width: 100%;
}
}
.accordion {
display: flex;
border-bottom: 1px solid #ddd;
}
.accordion > input[name="collapse"]:checked ~ .content {
border-top: 0;
transition: 0.3s;
}
.accordion .handle {
margin: 0;
font-size: 16px;
}
.accordion label {
cursor: pointer;
font-weight: normal;
padding: 10px 0;
user-select: none;
pointer-events: none;
}
/* .accordion label:hover,.accordion label:focus {
background: #252525;
} */
.accordion .handle label:before {
content: "";
border: solid #008080;
border-width: 0 3px 3px 0;
padding: 4px;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
float: right;
margin-top: 2px;
transition: 0.4s;
width: 6px;
height: 6px;
position: absolute;
right: 20px;
}
.handle label:before {
display: none;
}
.accordion > input[name="collapse"]:checked ~ .handle label:before {
content: "";
border: solid #008080;
border-width: 0 3px 3px 0;
padding: 4px;
-webkit-transform: rotate(220deg);
float: right;
margin-top: 2px;
transition: 0.4s;
width: 6px;
height: 6px;
position: absolute;
right: 20px;
}
.accordion p:last-child {
margin-bottom: 0;
}
/* .container{
max-width: 620px;
margin: 0 auto;
} */
.handle label,.col {
display: flex;
}
.item {
display: flex;
flex-direction: column;
padding: 0 10px;
}
@media (max-width: 1023px) {
.content {
display: block;
}
.content .col {
padding: 10px 0;
}
.accordion {
flex-direction: column;
position: relative;
}
.accordion .content {
overflow: hidden;
transition: 0.5s;
padding: 0;
}
.accordion label {
pointer-events: all;
}
.handle label:before {
display: block;
}
.edit-delete {
position: absolute;
bottom: 0;
}
.accordion .handle {
height: 100px;
}
.handle .item {
padding: 0 10px;
width: auto;
}
.accordion > input[name="collapse"]:checked ~ .handle {
height: auto;
}
.item {
width: auto;
}
.item span:first-child {
width: 150px;
}
.edit-delete a {
padding-left: 0;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>HTML Expand Collapse Text Example</title>
<meta name="author" content="Codeconvey" />
<!-- Font Awesome -->
<!-- Accordion CSS -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<section class="accordion">
<input type="radio" name="collapse" id="handle1" />
<div class="handle">
<label for="handle1">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</label>
</div>
<div class="content">
<div class="col">
<div class="item">
<span>Gender</span>
<span>Male</span>
</div>
<div class="item">
<span>Dealership</span>
<span>fsdfsd</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Branch</span>
<span>sdfsd</span>
</div>
<div class="item">
<span>User Type</span>
<span>Sales Executive</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Status</span>
<span>Active</span>
</div>
</div>
<div class="col edit-delete">
<div class="item">
<a href="#">Edit</a>
<a href="#">Delete</a>
</div>
</div>
</div>
</section>
<section class="accordion">
<input type="radio" name="collapse" id="handle2" />
<div class="handle">
<label for="handle2">
<div class="item">
<span>Name</span>
<span>Zyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</label>
</div>
<div class="content">
<div class="col">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</div>
<div class="col edit-delete">
<div class="item">
<a href="#">Edit</a>
<a href="#">Delete</a>
</div>
</div>
</div>
</section>
<section class="accordion">
<input type="radio" name="collapse" id="handle3" />
<div class="handle">
<label for="handle3">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</label>
</div>
<div class="content">
<div class="col">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>1234567890</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Name</span>
<span>xyz</span>
</div>
<div class="item">
<span>Mobile Number</span>
<span>12345625320</span>
</div>
</div>
<div class="col">
<div class="item">
<span>Mobile Number</span>
<span>1212121212</span>
</div>
</div>
<div class="col edit-delete">
<div class="item">
<a href="#">Edit</a>
<a href="#">Delete</a>
</div>
</div>
</div>
</section>
</body>
</html>
请检查全屏视图
解决方法
这可以通过3个步骤实现:
- 在
display: contents
个元素上设置.handle,.handle > label,.content,.col
。这将使.item
的所有section.accordion
元素成为子元素 - 对于
.item
和width: 0
的所有flex-grow: 1
元素集,这将使所有列具有相同的宽度。 - 调整
section.accordion
上的填充以匹配您的第一个设计。
当然,这些操作仅需要在网络视图中完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。