提问人:fil maj 提问时间:11/15/2023 最后编辑:fil maj 更新时间:11/15/2023 访问量:69
在不知道容器中内容大小的情况下仅使用 HTML 和 CSS 限制容器的宽度 [重复]
Limiting width of a container without knowing size of content within it with only HTML and CSS [duplicate]
问:
main {
display: inline-block;
}
img {
display: block;
max-width: 100%;
max-height: 100vh;
}
.flex {
display: flex;
justify-content: space-between;
}
#details {
flex-wrap: wrap;
}
#details span {
margin: 5px;
}
<main>
<h1>My Sweet Photo</h1>
<img src="https://picsum.photos/400/500" />
<div id="setting" class="flex">
<p class="comment">Ramin Beach, had a great time.</p>
<p class="date">January 3, 2022</p>
</div>
<div id="details" class="flex">
<span>f/11</span>
<span>1/1000 s</span>
<span>55 mm</span>
<span>Nikon D5200</span>
<span>AF-S DX VR Nikkor 18-55mm f/3.5-5.6G II</span>
<span>ISO 200</span>
</div>
</main>
我正在建立一个个人的、类似 Instagram 的相册网站。我想展示不同类型的图片,但至关重要的是,它们有各种尺寸:风景、肖像或介于两者之间。理想情况下,我希望内容围绕图片流动,并在图像下方添加描述和信息的小“标签”(例如用于拍摄照片的相机、日期、焦距、曝光时间等)。
此外,我正在尝试尽可能少地使用JavaScript。理想情况下,纯 HTML 和 CSS 解决方案。我有一个相当不错的工作布局 - 除了在非常大的屏幕上。在非常大的屏幕上,容器会“推动”容器的宽度,这是我不想做的。我想将整个布局的最大宽度保持为图像的自然宽度。同时,我希望图像保持其纵横比并始终渲染,以便它占据 100% 的视口(因此下图的特定 CSS 规则)。#details
<main>
在较小宽度的屏幕上,我下面的代码效果很好,因为图像的宽度会自然缩小。在较大的屏幕上,或者当图像处于纵向(高度大于宽度)时,详细信息容器开始占用越来越多的屏幕宽度,并且图像与图像下方的文本之间的布局变得未对齐。
我之前用 JavaScript 解决了这个问题:当页面完成加载时,我将元素的最大宽度设置为图像加载后的计算宽度。<main>
问题是:有没有办法只用 HTML 和 CSS 来做到这一点?
答:
main {
display: inline-block;
}
#container {
width: min-content;
}
#just-image{
min-width:200px;
}
img {
display: block;
max-width: 100%;
max-height: 100vh;
}
.flex {
display: flex;
justify-content: space-between;
}
#details {
flex-wrap: wrap;
width: 100%;
}
#details span {
margin: 5px;
}
<main>
<div id="container">
<h1>My Sweet Photo</h1>
<div id="just-image">
<img src="https://picsum.photos/200/300" />
</div>
<div id="setting" class="flex">
<p class="comment">Ramin Beach, had a great time.</p>
<p class="date">January 3, 2022</p>
</div>
<div id="details">
<span>f/11</span>
<span>1/1000 s</span>
<span>55 mm</span>
<span>Nikon D5200</span>
<span>AF-S DX VR Nikkor 18-55mm f/3.5-5.6G II</span>
<span>ISO 200</span>
</div>
</div>
</main>
我就是这样做的。在调用的 .这个 div 将有一个 .原因是我仍然需要一种方法来了解网站在我允许的最小宽度下的行为方式,以便我可以为此进行计划。之后,在所有内容周围添加一个更大的 div。我为这些 div 添加了 css。因此,这将按如下方式工作:div 具有,因此它将遵循 的宽度。 div 具有 ,因此它将具有最小元素的宽度,在本例中为 div。 因此,对于大于 200px 的图像,它将按照 的宽度进行拉伸。如果您计划使用小于 200px 的图像,则可以更改 的 .<img>
#just-image
min-width
min-width
<div id="container"
#details
width:100%
#container
#container
width:min-content
#just-image
#just-image
min-width:200px
<img>
min-width
#just-image
但为了拥有更可预测的行为,我建议你有一些限制。因此,您会看到,如果图像宽度低于 200px,代码就会中断,但这是设计使然。您可以允许宽度小于 200px,但您会看到 div 中的文本会开始看起来越小。所以最好有限制。details
评论
100vh
100vh
height: 100vh
width: auto
aspect-ratio: auto
max-height
100vh
#container
min-content
100vh
height: 100vh
评论
#details
<main>