如果内容大于 50%,请将宽度增加到 100%

问题描述 投票:0回答:1

考虑以下 HTML 和 CSS,如果任何子项(内容)的宽度大于 50%,我想将

.responsive-list
的宽度增加到 100%。只用css可以实现吗?或者在这种情况下 javascript 是不可避免的。

<body>
    <div class="responsive-list">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3 with a lot of content that might exceed 50</li>
        <li>Item 4</li>
    </div>
</body>
.responsive-list {
  list-style-type: none;
  min-width: 50%;
  width: max-content; /* something like: if max-content > 50% then 100% else 50%  */
}

.responsive-list li {
  border: 1px solid #ddd;
  margin: 5px 0;
}
css
1个回答
0
投票

仅使用 CSS 来实现所需的效果相当复杂且不完全可靠,因为 CSS 没有内置机制来根据超出初始渲染的子元素的大小有条件地设置父元素的宽度。但是,您可以使用 CSS 来近似这种行为,尽管如果内容在渲染后发生变化,它不会是动态的。

这是一种使用 CSS Grid 和 Flexbox 的方法,可以帮助您实现所需的结果:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .responsive-container {
            display: flex;
            width: 100%;
        }
        .responsive-list {
            list-style-type: none;
            min-width: 50%;
            width: max-content;
            flex-grow: 1;
        }

        .responsive-list li {
            border: 1px solid #ddd;
            margin: 5px 0;
        }
    </style>
</head>
<body>
    <div class="responsive-container">
        <ul class="responsive-list">
            <li>Item 1</li>
            <li>Item 2</li>
            <li>Item 3 with a lot of content that might exceed 50%</li>
            <li>Item 4</li>
        </ul>
    </div>
</body>
</html>

在此方法中:

  1. responsive-container 使用 flex 来确保父容器始终占据 100% 宽度。
  2. responsive-list 设置为 min-width: 50% 和 width: max-content,以便其扩展以适合其内容,但不小于容器宽度的 50%。
  3. flex-grow: 1 确保如果内容超过 50% 宽度,列表将增长以占用其容器内的可用空间。
© www.soinside.com 2019 - 2024. All rights reserved.