CSS-仅手风琴间隙
CSS-only Accordion Gaps
我为我们的条款和条件使用了一个简单的 CSS-only 手风琴来隐藏和显示带有 checkboxes 和 transform[=28 的条款=] 属性。但是,在更新此信息时,要点之间突然出现大的、不一致的差距。它发生在下拉内容超过三个段落并且每个间隙的高度不同的情况下。
什么是最好的解决方案,使用最少的代码来解决这个问题 ONLY using CSS?
*绝对不能使用jQuery、Javascript或其他外部库。
完整的代码可以在这里找到:
codepen.io/makecodenotwar/pen/dmXpjJ
示例:HTML 一个要点的结构(代码笔中的完整代码):
<ul>
<li>
<input type="checkbox" checked>
<i></i>
<h5><span>►</span>Payment Clause</h5>
<p>Blah, blah, blah...</p>
</li>
</ul>
示例 CSS
p {
position: relative;
overflow: hidden;
opacity: 1;
transform: translate(0, 0);
z-index: 2;
}
ul li {
position: relative;
overflow: hidden;
}
ul li i {
position: absolute;
transform: translate(-6px, 0);
}
ul li i:before, ul li i:after {
content: "";
position: absolute;
width: 3px;
height: 9px;
}
ul li i:before {
transform: translate(-2px, 0) rotate(45deg);
}
ul li i:after {
transform: translate(2px, 0) rotate(-45deg);
}
ul li input[type=checkbox] {
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
opacity: 0;
}
ul li input[type=checkbox]:checked ~ p {
max-height: 0;
opacity: 0;
transform: translate(0, 50%);
}
ul li input[type=checkbox]:checked ~ i:before {
transform: translate(2px, 0) rotate(45deg);
}
ul li input[type=checkbox]:checked ~ i:after {
transform: translate(-2px, 0) rotate(-45deg);
}
@keyframes flipdown {
0% {
opacity: 0;
transform-origin: top center;
transform: rotateX(-90deg);
}
5% {
opacity: 1;
}
80% {
transform: rotateX(8deg);
}
83% {
transform: rotateX(6deg);
}
92% {
transform: rotateX(-3deg);
}
100% {
transform-origin: top center;
transform: rotateX(0deg);
}
}
隐藏手风琴项目
您的项目不可见,但它们仍然存在。
尝试在您的代码中添加:
ul li input[type=checkbox]:checked ~ p {
display: none;
}
我已经很长时间没在 HTML 或 CSS 上工作了,但是你已经看到这个 example 了吗?有的话请见谅
我为我们的条款和条件使用了一个简单的 CSS-only 手风琴来隐藏和显示带有 checkboxes 和 transform[=28 的条款=] 属性。但是,在更新此信息时,要点之间突然出现大的、不一致的差距。它发生在下拉内容超过三个段落并且每个间隙的高度不同的情况下。
什么是最好的解决方案,使用最少的代码来解决这个问题 ONLY using CSS?
*绝对不能使用jQuery、Javascript或其他外部库。 完整的代码可以在这里找到: codepen.io/makecodenotwar/pen/dmXpjJ
示例:HTML 一个要点的结构(代码笔中的完整代码):
<ul>
<li>
<input type="checkbox" checked>
<i></i>
<h5><span>►</span>Payment Clause</h5>
<p>Blah, blah, blah...</p>
</li>
</ul>
示例 CSS
p {
position: relative;
overflow: hidden;
opacity: 1;
transform: translate(0, 0);
z-index: 2;
}
ul li {
position: relative;
overflow: hidden;
}
ul li i {
position: absolute;
transform: translate(-6px, 0);
}
ul li i:before, ul li i:after {
content: "";
position: absolute;
width: 3px;
height: 9px;
}
ul li i:before {
transform: translate(-2px, 0) rotate(45deg);
}
ul li i:after {
transform: translate(2px, 0) rotate(-45deg);
}
ul li input[type=checkbox] {
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
opacity: 0;
}
ul li input[type=checkbox]:checked ~ p {
max-height: 0;
opacity: 0;
transform: translate(0, 50%);
}
ul li input[type=checkbox]:checked ~ i:before {
transform: translate(2px, 0) rotate(45deg);
}
ul li input[type=checkbox]:checked ~ i:after {
transform: translate(-2px, 0) rotate(-45deg);
}
@keyframes flipdown {
0% {
opacity: 0;
transform-origin: top center;
transform: rotateX(-90deg);
}
5% {
opacity: 1;
}
80% {
transform: rotateX(8deg);
}
83% {
transform: rotateX(6deg);
}
92% {
transform: rotateX(-3deg);
}
100% {
transform-origin: top center;
transform: rotateX(0deg);
}
}
隐藏手风琴项目
您的项目不可见,但它们仍然存在。
尝试在您的代码中添加:
ul li input[type=checkbox]:checked ~ p {
display: none;
}
我已经很长时间没在 HTML 或 CSS 上工作了,但是你已经看到这个 example 了吗?有的话请见谅