【发布时间】:2023-11-26 10:25:01
【问题描述】:
有很多答案非常相似,但都没有帮助我解决我的问题。
我想要的是一个水平项目列表(对于菜单),其中所有项目的宽度都是父级的 100%(对于我使用的 flex)。
项目内的文本应该自动中断(没有<br />,我事先不知道文本)左对齐,然后中断的框应该在项目的中间。悬停时(如示例所示),整个项目(包括填充)应更改背景颜色。
元素内的左右内边距应通过此方法自动确定,以便菜单具有响应性(在移动设备上,内边距将为 0 或大屏幕相应地更大)。
我还附上了一个简化的 sn-p,它是我得到的最接近我想要的结果的东西。无论我如何更改 html 结构或 css,当项目居中时,我都无法左对齐文本(这会覆盖左对齐)。
但我不在乎结果是否完全不同,只要它无需对每个项目进行任何手动操作即可工作:)。
非常感谢任何帮助!谢谢!
* {
margin: 0;
padding: 0;
}
ul {
/* simulate small screen */
width: 500px;
display: flex;
list-style: none;
background: aqua;
}
ul li {
padding: 10px 0;
border-left: 1px solid red;
flex-grow: 1;
flex-shrink: 1;
text-align: center;
}
ul li div {
text-align: left;
margin: 0 auto;
}
ul li:hover {
background: yellow;
}
<ul>
<li>
<div>Menu Item</div>
</li>
<li>
<div>Menu Item Name</div>
</li>
<li>
<div>Menu Item</div>
</li>
<li>
<div>Menu</div>
</li>
<li>
<div>Menu Item</div>
</li>
<li>
<div>Menu Item Name</div>
</li>
<li>
<div>Menu Item</div>
</li>
</ul>
想要的结果(第四个元素是错误的,图像是手工修复的以显示正确的结果):
【问题讨论】:
-
您只想在
li元素上添加水平填充还是我误解了? -
水平填充是的,但我希望它根据屏幕尺寸进行调整。所以在移动设备上填充将为 0 并且菜单将被完全压扁,但在更大的屏幕上填充会相应地更大。添加到描述中。
-
试过我的答案吗?
标签: css alignment centering text-alignment