css 图片未加载时默认高度,加载后随图片高度

需求:图片宽度显示为100%,在图片未加载前需要预设高度,防止图片加载完后内容蹦极。而图片高度会随着不同分辨率所变化,无法设置固定的预设高度。

一、模拟当前情况:

1.编码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>图片显示</title>
    <style>
        .container {
            width: 100%;
            display: flex;
            justify-content: center;
        }
        .content {
            width: 100%;
        }
        .title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 20px;
        }
        .image {
            display: block;
            width: 100%;
        }

    </style>
</head>

<body>
    <div class="container">
        <div class="content">
            <p class="title">图片1</p>
            <img src="" class="image">
            <p class="title">图片2</p>
            <img src="" class="image">
            <p class="title">图片3</p>
            <img src="" class="image">
            <p class="title">图片4</p>
            <img src="" class="image">
            <p class="title">图片5</p>
            <img src="" class="image">
        </div>
    </div>
    <script>
        // 5秒后执行
        setTimeout(() => {
            let i = 0;
            const imageSrcs = [
                "https://i-blog.csdnimg.cn/direct/436796c8bd264b359b39c769310c9cde.jpeg",
                "https://i-blog.csdnimg.cn/direct/d7147f78e2bb4035bd6b81353baf047f.jpeg",
                "https://i-blog.csdnimg.cn/direct/777d089209f64ece8b96f127b08e443d.jpeg",
                "https://i-blog.csdnimg.cn/direct/1f148d411b5e4d70868e4d72562db076.jpeg",
                "https://i-blog.csdnimg.cn/direct/cf5755e2186a438383e8b2235dc812c0.jpeg"];
            const images = document.querySelectorAll(".image");
            images.forEach(image => {
                // 设置src的值
                image.src = imageSrcs[i];
                i = i + 1;
            });
        }, 5000);
    </script>
</body>
</html>

2.图片加载前

图片未加载时因无预设高度聚集堆叠,加载完成后布局瞬间撑开(类似 "蹦极" 效果)

3.图片加载后

二、优化

1.原理

给图片添加min-height属性,值为不同分辨率下图片实际高度的70%。

2.CSS编码

html 复制代码
<style>
        .container {
            width: 100%;
            display: flex;
            justify-content: center;
        }
        .content {
            width: 100%;
        }
        .title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 20px;
        }
        .image {
            display: block;
            width: 100%;
        }
        /** 笔记本:宽度大于等于1366px时,图片高度设置为70%实际高度 **/
        @media (min-width:1366px) {
            .image1 {
                /** 图片:1:宽1366px下,实际高度为2533px,这里设置70% **/
                min-height: calc(2533px * 0.7);
            }
            .image2 {
                /** 图片:2:宽1366px下,实际高度为1638px,这里设置70% **/
                min-height: calc(1638px * 0.7);
            }
            .image3 {
                /** 图片:3:宽1366px下,实际高度为2533px,这里设置70% **/
                min-height: calc(2533px * 0.7);
            }
            .image4 {
                /** 图片:4:宽1366px下,实际高度为2066px,这里设置70% **/
                min-height: calc(2066px * 0.7);
            }
            .image5 {
                /** 图片:5:宽1366px下,实际高度为2365px,这里设置70% **/
                min-height: calc(2365px * 0.7);
            }
        }
        /** 平板:宽度大于等于800px时,图片高度设置为70%实际高度 **/
        @media (min-width:800px) {
            .image1 {
                /** 图片:1:宽1366px下,实际高度为1459px,这里设置70% **/
                min-height: calc(1459px * 0.7);
            }
            .image2 {
                /** 图片:2:宽1366px下,实际高度为943px,这里设置70% **/
                min-height: calc(943px * 0.7);
            }
            .image3 {
                /** 图片:3:宽1366px下,实际高度为1459px,这里设置70% **/
                min-height: calc(1459px * 0.7);
            }
            .image4 {
                /** 图片:4:宽1366px下,实际高度为1190px,这里设置70% **/
                min-height: calc(1190px * 0.7);
            }
            .image5 {
                /** 图片:5:宽1366px下,实际高度为1362px,这里设置70% **/
                min-height: calc(1362px * 0.7);
            }
        }
        /** 手机:宽度小于等于200px时,图片高度设置为70%实际高度 **/
        @media (min-width:200px) {
            .image1 {
                /** 图片:1:宽1366px下,实际高度为349px,这里设置70% **/
                min-height: calc(349px * 0.7);
            }
            .image2 {
                /** 图片:2:宽1366px下,实际高度为225px,这里设置70% **/
                min-height: calc(225px * 0.7);
            }
            .image3 {
                /** 图片:3:宽1366px下,实际高度为349px,这里设置70% **/
                min-height: calc(349px * 0.7);
            }
            .image4 {
                /** 图片:4:宽1366px下,实际高度为284px,这里设置70% **/
                min-height: calc(284px * 0.7);
            }
            .image5 {
                /** 图片:5:宽1366px下,实际高度为326px,这里设置70% **/
                min-height: calc(326px * 0.7);
            }
        }
    </style>

3.图片加载前

4.图片加载后

相关推荐
IT_陈寒3 分钟前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
Jackson__34 分钟前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby1 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
青禾网络1 小时前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github
仙人球部落1 小时前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
2601_963771372 小时前
Hardening Enterprise WordPress Sites Against REST API Leaks and Bad Headers
前端·windows·word·php
蓝银草同学2 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
2601_957190902 小时前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
爱折腾的小黑牛2 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
sunfdf2 小时前
Next.js 新手从零部署到首跑实战指南
开发语言·javascript·ecmascript