百分比padding---------实现图片固定比例并自适应布局 以及aspect-ratio属性、cqw单位

一、百分百padding

在文档流中css的margin和padding这两个属性垂直方向的百分百值都是基于宽度计算的,这个也是本次布局方式的核心。

这个方案优势:图片自适应同时保持比例,以及页面刷新的时候没有布局稳固不晃动

这种方式应用场景就是:移动端或者需要具备响应式的图片上面,你总不能把图片宽高写死吧~

对于将图片设置为背景图的需求,我们一般会选择下面几种方式

1.background属性 ,使用background-size属性控制,但是这种方式带来的弊端就是总有部分图片高度或宽度是无法显示的。

2.使用vw单位,加入我们的图片不是通栏,左右有间距的话,那么就需要用calc去计算高度的值

3.百分百padding去实现(完美解决方案)

.pic{padding: 3.33% 0 0;background-size: cover;
}

假设图片不能作为背景图的话,那么也是可以通过百分百padding去实现,那么就有人问了,为什么不能直接设置图片的width为100%然后height不设置,这样子的话也可以实现图片比例不变,而且也是随着页面自适应。这种方式固然可以但是存在一个不好的体验问题:那就是随着页面加载的进行,图片占据的高度会有一个从0到计算高度的图片变化,视觉上会有明显的元素跳动,代码层面会有布局重计算。

所以对图片高宽进行同时约定还是有必要的,但是同时要保证宽度自适应,似乎有点难度。记住,如果遇到这种需求场景,没有比百分比padding布局更好的做法!

对于这种图片宽度100%容器,高度按比例的场景,padding-bottom的百分比值大小就是图片元素的高宽比,就这么简单。

<div class="works-item-t"><img src="./150x200.png">
</div>.works-item-t {padding-bottom: 133%;position: relative;
}
.works-item-t > img {position: absolute;width: 100%; height: 100%;
}

但,有时候,图片宽度并不是100%容器的,例如,图片宽度50%容器宽度,图片高宽比4:3,此时,CSS垂直方向百分比就666了

.img-box {padding: 0 50% 66.66% 0;
}

下面是demo:

	<template><div><div class="works-wrap"><ul class="works-con"><li class="works-item"><div class="works-item-t"><img src="/static/logo.png"></div><div class="works-item-b"><h4 class="works-item-h">aaaa</h4></div></li><li class="works-item"><div class="works-item-t"><img src="/static/logo.png"></div><div class="works-item-b"><h4 class="works-item-h">bbbbb</h4></div></li></ul></div></div></template><script>import { mapState } from 'vuex';export default {data() {return {}},components: {},computed: {...mapState([])},onLoad() {},onShow() {},methods: {},}</script><style lang="scss" scoped>* {padding: 0;margin: 0;border: none;line-height: 1;}
.works-wrap {max-width: 1000px;margin: auto;
}
.works-con {padding: 0;margin: 0 -.5em;list-style: none;overflow: hidden;
}
.works-item {display: inline-block;min-width: 150px;width: calc(20% - 1em);margin: 20px .5em 0;background: AppWorkspace;vertical-align: top;
}
.works-item-t {padding-bottom: 133%;position: relative;
}
.works-item-t > img {position: absolute;width: 100%; height: 100%;
}
.works-item-b {margin: .5em .5em 1em;
}
.works-item-h {margin: 10px 0 0;color: CaptionText;font-size: 100%;
}@media screen and (max-width: 1000px) {.works-item {width: calc(25% - 1em);}
}
@media screen and (max-width: 768px) {.works-item {width: calc(33.3% - 1em);}
}
@media screen and (max-width: 580px) {  .works-item {width: calc(50% - 1em);}
}
@media screen and (max-width: 400px) {  .works-item {width: calc(100% - 1em);}
}</style>

文章知识点来源于一位大佬的博客文章,阅读后受益匪浅!

二、aspect-ratio属性

随着CSS技术的发展,固定比例的图片布局有了新的选择,这个就是CSS aspect-ratio属性,专门设置元素的高宽比。

不过此属性用在IMG元素上是没有效果的,因为图片元素具有内在尺寸,不受aspect-ratio属性影响。

相比百分百padding方法,css简化了不少:

<ul class="box"><li class="list"><img src="0.jpg" /></li><li class="list"><img src="1.jpg" /></li>...
</ul>.box {display: flex;gap: .5rem;flex-wrap: wrap;
}
.list {flex-basis: calc(25% - 1.5rem / 4);aspect-ratio: 1 / 1;
}
.list img {display: block;width: 100%;height: 100%;object-fit: cover;
}

三、cqw单位

如今出现最简单的方法

<div class="box"><img src="0.jpg" /><img src="1.jpg" /><img src="2.jpg" /><img src="3.jpg" /><img src="4.jpg" /><img src="5.jpg" />
</div>.box {display: flex;gap: .5rem;flex-wrap: wrap;container-type: inline-size;
}
.box img {width: calc(25cqw - 1.5rem / 4);height: calc(25cqw - 1.5rem / 4);object-fit: cover;
}

container-type:inline-size可以让普通元素变成container容器元素,而cqw是容器宽度单位,1cqw=1%的容器宽度,100cqw就是容器宽度。

而本需求需要一行显示4个图片,因此,每个图片相对于容器的大小就很好计算了。

关于详细的容器单位介绍详看另一篇文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony、HarmonyOS和Harmony NEXT 《我们不一样》

1. OpenHarmony 定义与地位&#xff1a;OpenHarmony是鸿蒙系统的底层内核系统&#xff0c;集成了Linux内核和LiteOS&#xff0c;为各种设备提供统一的操作系统解决方案。 开源与商用&#xff1a;OpenHarmony是一个开源项目&#xff0c;允许开发者自由访问和使用其源代码&#…

【Leetcode每日一题】 递归 - 二叉树的所有路径(难度⭐)(59)

1. 题目解析 题目链接&#xff1a;257. 二叉树的所有路径 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 针对二叉树路径的求解问题&#xff0c;我们可以采用深度优先遍历&#xff08;DFS&#xff09;的策略来寻找所…

Java项目如何使用EasyExcel插件对Excel数据进行导入导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架&#xff0c;它以使用简单、节省内存著称。在解析Excel时&#xff0c;EasyExcel没有将文件数据一次性全部加载到内存中&…

linux学习:进程(新建+运行某文件+退出处理函数+等待)

目录 api 创建新进程 注意 运行某文件 例子 注意 例子&#xff0c;等待进程 进程是由进程控制块、程序段、数据段三部分组成 进程有都有一个父进程&#xff0c;除了init&#xff0c;父进程可以创建子进程 每个进程都有一个PID&#xff0c;可以用ps来查看&#xff0c;等…

【行为型模式】策略模式

一、策略模式概述 策略模式(又叫政策Policy模式)&#xff0c;属于对象行为模式下的&#xff1a;Strategy类提供了可插入式(Pluggable)算法的实现方案。 策略模式的定义-意图&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并让它们互相替换。策略模式…

汽车笔记-保险

保险 1.交强险 上路必须买的&#xff0c; 国家规定必须要买。交强险不管你是有责还是无责&#xff0c;它都是可以赔偿的。交强险还有一个18000的垫付功能&#xff0c;比如说我们出了交通事故后&#xff0c;对方住院治疗需要你垫付钱&#xff0c;那么这个时候就可以用到交强险…

Mybatis常用注解说明

MyBatisPlus 常用注解说明 TableName(opens new window) 描述&#xff1a;表名注解&#xff0c;标识实体类对应的表 使用位置&#xff1a;实体类 TableName("sys_user") public class User {private Long id;private String name;private Integer age;private Strin…

实用图像视频修复工具:完善细节、提高分辨率 | 开源日报 No.225

xinntao/Real-ESRGAN Stars: 25.6k License: BSD-3-Clause Real-ESRGAN 是一个旨在开发实用的图像/视频恢复算法的项目。 该项目主要功能、关键特性和核心优势包括&#xff1a; 提供动漫视频小模型和动漫插图模型支持在线 Colab 演示和便携式 Windows/Linux/MacOS 可执行文件…

如何利用纯前端技术,实现一个网页版视频编辑器?

纯网页版视频编辑器 一、前言二、功能实现三、所需技术四、部分功能实现4.1 素材预设4.2 多轨道剪辑 一、前言 介绍&#xff1a;本篇文章打算利用纯前端的技术&#xff0c;来实现一个网页版的视频编辑器。为什么突然想做一个这么项目来呢&#xff0c;主要是最近一直在利用手机…

OpenCV基本图像处理操作(四)——傅立叶变换

傅里叶变换的作用 高频&#xff1a;变化剧烈的灰度分量&#xff0c;例如边界 低频&#xff1a;变化缓慢的灰度分量&#xff0c;例如一片大海 滤波 低通滤波器&#xff1a;只保留低频&#xff0c;会使得图像模糊 高通滤波器&#xff1a;只保留高频&#xff0c;会使得图像细节…

Golang | Leetcode Golang题解之第31题下一个排列

题目&#xff1a; 题解&#xff1a; func nextPermutation(nums []int) {n : len(nums)i : n - 2for i > 0 && nums[i] > nums[i1] {i--}if i > 0 {j : n - 1for j > 0 && nums[i] > nums[j] {j--}nums[i], nums[j] nums[j], nums[i]}reverse…

【架构-15】NoSQL数据库

NoSQL&#xff08;Not Only SQL&#xff09;数据库是一类非关系型数据库&#xff0c;与传统的关系型数据库&#xff08;如MySQL、Oracle&#xff09;相对而言。NoSQL数据库的设计目标是针对大规模数据和高并发访问的需求&#xff0c;具有高可扩展性、高性能和灵活的数据模型。 …

Day 14 网络协议

常见网络设备&#xff1a;交换机 路由器 中继器 多协议网关&#xff08;路由器的前身&#xff09; 交换机&#xff1a;用于连接统一网络的设备&#xff0c;实现内网设备通信。 从广义上分为&#xff1a;局域网交换机&#xff0c;广域网交换机 从网络构成分为&#xff1a;接…

Jenkins配置windows/linux从节点

背景&#xff1a; 环境&#xff1a;jenkins环境&#xff08;Ubuntu&#xff09; 节点机器&#xff1a;Linux、Windows 前置条件&#xff1a; 节点机器&#xff1a;安装java、allure、python 1 Linux节点管理机器添加 1.1 系统管理->节点列表->New Node 1.2 节点配置…

【MySQL】MySQL锁(二)表锁与行锁测试

MySQL锁&#xff08;二&#xff09;表锁与行锁测试 上篇文章我们简单的了解了一大堆锁相关的概念&#xff0c;然后只是简单的演示了一下 InnoDB 和 MyISAM 之间 表锁 与 行锁 的差别。相信大家还是意犹未尽的&#xff0c;今天我们就来用代码说话&#xff0c;实际地操作一下&…

ES链接报connection reset by peer

这里写自定义目录标题 ES链接报connection reset by peer解决方法主要是删除node.lock文件重启es服务问题解决 ES链接报connection reset by peer 问题描述服务端报错connection reset by peer 在服务器上去curl返回的也是connection reset by peer 链接重置&#xff0c;说明e…

「GO基础」文件名规范、关键字与标识符

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

一键升级 package.json 下所有依赖的版本

命令&#xff1a; npx npm-check-updates -u这个命令会生成一个新的package.json文件&#xff0c;其中包含了所有依赖项的最新版本。然后&#xff0c;你可以运行npm install来安装这些更新后的依赖项。 请注意&#xff0c;在更新依赖项之前&#xff0c;最好备份你的项目&…

元数据管理Atlas

文章目录 一、Atlas概述1、Atlas入门2、Atlas架构原理 二、Atlas安装1、安装环境准备1.1 安装Solr-7.7.31.2 Atlas2.1.0安装 2、Atlas配置2.1 Atlas集成Hbase2.2 Atlas集成Solr2.3 Atlas集成Kafka2.4 Atlas Server配置2.5 Kerberos相关配置2.6 Atlas集成Hive 3、Atlas启动 三、…

ARM的学习

键控灯 mykey.h #ifndef __MYKEY_H__ #define __MYKEY_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_gic.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_exti.h" void key1_int_config(); void key2_int_config(…