【发布时间】:2019-02-09 20:25:08
【问题描述】:
我正在使用media queries 设计一个可在台式机和移动设备上运行的网站。在大多数情况下,这工作正常。但是,我有一个场景,我将在下面尝试描述,它不能正常工作。
在桌面上,我有一系列带有文本覆盖的图像,排列如下:
在移动设备上,我希望它显示在两列中,最后一个图块分布在整个宽度上,如下所示:
但是,我用于桌面上最后一个图块的图像是方形的,当我将它铺满整个宽度时,它太大了,看起来更像这样:
下面是我目前拥有的 HTML 和 CSS:
<div>
<div class="hotel_container">
<div class="options">
<div class="option">
<a href="www.example.com" target="_blank"><img class="opt_img" src="images/example.jpg"></a>
<h3 class="centered" id="hotel_info">TEXT</h3>
</div>
</div>
<!-- repeated "options" div 7 more times -->
<div class="options_last">
<div class="option">
<a href="www.example.com" target="_blank"><img class="opt_img" src="images/example2.jpg"></a>
<h3 class="centered" id="hotel_info">TEXT</h3>
</div>
</div>
</div>
</div>
CSS
.options, .options_last{
width: 33%;
overflow: hidden;
display: inline-block;
}
@media only screen and (max-width: 812px) {
.options{
width: 50%;
}
}
@media only screen and (max-width: 812px) {
.options_last{
width: 100%;
}
}
.option{
position: relative;
text-align: center;
padding: 10px;
}
@media only screen and (max-width: 812px) {
.option{
padding: 1px;
}
}
.opt_img{
width: 100%;
opacity: 0.7;
}
.opt_img:hover{
opacity: 0.9;
}
.centered {
position: absolute;
width: 100%;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
}
#hotel_info{
background-color: rgba(130, 130, 130,0.7);
width: 80%;
font-size: 23px;
padding: 15px;
}
@media only screen and (max-width: 812px) {
#hotel_info{
width: 60%;
font-size: 10px;
padding: 5px;
}
}
我不想将图像强制设置为某个高度,因为这会扭曲它,所以我想我可以有第二张图像,它是矩形的,我可以在移动设备上切换。但是,我终其一生都无法弄清楚如何根据设备选择不同的图片,就像使用传统媒体查询一样。
[编辑:我知道可以在页面上同时显示两张图片并通过媒体查询隐藏其中一张,但有人警告说,如果过度使用,这可能会减慢页面速度,因为所有设备都必须加载所有图片。我正在寻找一种“更好”的方法来做到这一点,以避免在小规模学习时养成坏习惯]
谁能帮帮我,或者在网上给我一个简单的解释,可以帮助我解决这个问题。
附:我对网络开发非常陌生,所以请让你的答案对初学者友好,如果我必须要求澄清,请多多包涵。我也愿意接受有关更好或更简单的做事方式的建议,我正在使用我从 Codecademy 的 Web 开发课程中学到的东西。
【问题讨论】:
-
您的 HTML 标记是如何生成的?这是手工编码还是你有某种 PHP 来创建 HTML?如果您是手动编码,您只需将另一个具有您想要的尺寸的图像添加到最后一个块,然后使用您的媒体查询将其隐藏在桌面上。
-
@disinfor 我正在手动编写所有代码。我听说过这种技术,但被警告说它会导致页面加载速度变慢,因为它必须在所有设备上加载两个图像。在我的规模上,它可能不会被注意到,但我很好奇是否有“更好”的方法,所以我不会在学习的同时养成坏习惯
-
您可以使用 srcset 来选择要显示的图像,如 css-tricks 所述。他们展示了一个像这样的例子
<img sizes="(min-width: 400px) 80vw, 100vw" srcset="examples/images/small.jpg 375w, examples/images/big.jpg 1500w" alt="…">
标签: html css image media-queries