我正在尝试垂直对齐<details>
元素随附的箭头。正如您在演示中看到的,有两件事困扰着我:
<summary>
的第二行与第一行不在同一水平位置。
summary
的文本内容未与箭头垂直对齐。
details {
font-size: 30px;
}
<details>
<summary>Show more, you can click here on the summary's label to fold down the hidden menu</summary>
Nothing to see here.
</details>
当前状态:
所需结果:
summary {
font-size: 30px;
display: inline-block;
}
<details>
<summary>
<div>
Show more, you can click here on the summary's label to fold down the hidden menu
</div>
</summary>
Nothing to see here.
</details>
我尝试将摘要内容包装在div中,并将其属性设置为inline-block
,但这只能解决点 1 。
答案 0 :(得分:5)
您可以实现自己的可折叠系统。但是最好的方法是通过删除默认箭头并使用details
伪选择器放置一个新箭头来稍微破坏summary
和:before
元素。
首先隐藏默认箭头:
summary::-webkit-details-marker {
display: none;
}
然后使用content
属性添加您自己的箭头
关闭:
summary:before {
content: "►";
}
已打开:
details[open] summary:before {
content: "▼";
}
为我们的div
的文本添加一个环绕式summary
元素:
现在我们的结构如下:
<summary>
::before
<div>
Show more, you can click here on the summary's label to fold down the hidden menu
</div>
</summary>
我们需要将::before
元素与div
元素对齐:
将一些width
和margin
设置为summary:before
将summary > div
的{{1}}设置为display
以对齐两个块
使用CSS函数calc
让inline-block
保留剩余的水平空间:
summary > div
要将两个块水平对齐,只需将summary > div {
width: calc(100% - 50px); /* 50px is the space taken by summary::before */
}
设置为vertical-align
middle
summary::-webkit-details-marker {
display: none
}
summary > div {
width: calc(100% - 50px);
display: inline-block;
vertical-align: middle;
}
details {
font-size: 20px;
}
summary:before {
content: "►";
margin: 0px 10px 0 0;
width: 20px;
}
details[open] summary:before {
content: "▼";
}
答案 1 :(得分:4)
您还可以依赖flexbox并保持默认行为:
summary {
font-size: 30px;
display: flex;
align-items:center;
}
summary > div {
width:100%;
}
<details>
<summary>
<div>
Show more, you can click here on the summary's label to fold down the hidden menu
</div>
</summary>
Nothing to see here.
</details>
答案 2 :(得分:2)
将摘要文本包裹到 <div>
中,将其宽度限制为 ~calc(100% - 50px)
并设置 vertical-align: middle
;
summary {
font-size: 30px;
}
summary > div {
display: inline-block;
width: calc(100% - 50px);
vertical-align: middle;
}
<details>
<summary><div>Show more, you can click here on the summary's label to fold down the hidden menu</div></summary>
Nothing to see here.
</details>
我不知道它为什么有效,但似乎适用于所有浏览器。