搜索
首页web前端js教程详解CSS百分比padding制作图片自适应布局

本文主要和大家分享详解CSS百分比padding制作图片自适应布局,css知识点:当padding/margin取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的!

一、CSS百分比padding都是相对宽度计算的

在默认的水平文档流方向下,CSS marginpadding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样。

这么设计的原因在我的新书(应该不出几个月就要出版了)中会有说明,这里不展开。

对于padding属性而言,任意方向的百分比padding都现对于宽度计算可以让我们轻松实现固定比例的块级容器,举个例子,假设现在有个e388a4556c0f65e1904146cc1a846bee元素:

p { padding: 50%; }

或者:

p { padding: 100% 0 0; }

或者:

p { padding-bottom: 100%; }

则这个e388a4556c0f65e1904146cc1a846bee元素尺寸就是一个宽高1:1的正方形,无论其父容器宽度是多少,这个e388a4556c0f65e1904146cc1a846bee元素总能保持比例不变。

这种能固定比例的特性什么作用呢?

对于绝大多数都布局,我们并不要求非要比例固定,但是有一种情况例外,那就是图片,因为图片原始尺寸它是固定的。在传统的固定宽度的布局下,我们会通过给图片设定具体的宽度和高度值,来保证我们的图片占据区域稳固;但是在移动端或者在响应式开发情况下,图片最终展现的宽度很可能是不确定的,例如手机端的一个通栏广告,iPhone7下宽度是375,iPhone7 Plus下是414,还有360等尺寸,此时需要的不是对图片进行固定尺寸设定,而是比例设定。

通常有如下一些实现:

1. 固定一个高度,然后使用background-size属性控制,如下:

.banner {
 height: 40px;
 background-size: cover;
}

实时效果如下:

可以看到随着宽度的变化,总会有部分图片区域(宽度或高度)无法显示,并不是完美的做法。

2. 使用视区宽度单位vw,如下:

.banner {
 height: 15.15vw;
 background-size: cover;
}

如果对兼容性要求不是很高,使用vw也是一个不错的做法,至少理解起来要更轻松一点。

但是,如果我们的图片不是通栏,而是需要离左右各1rem的距离,此时,我们的CSS代码就要啰嗦点了,想要保持完美比例,就使用借助CSS3 calc()计算:

.banner {
 height: calc(0.1515 * (100vw - 2rem));
 background-size: cover;
}

如果,图片距离两侧的宽度是动态不确定的,则,此时calc()也捉襟见肘了,但,恰恰是普普通通其貌不扬的padding属性,其兼容性和适应性都一级棒。

3. 使用百分比padding,如下:

.banner {
 padding: 15.15% 0 0;
 background-size: cover;
}

此时无论图片的外部元素怎么变动,比例都是恒定不变的。

二、CSS百分比padding与宽度自适应图片布局

但是有时候我们的图片是不方便作为背景图呈现的,而是内联的a1f02c36ba31691bcfe87b2722de723b,百分比padding也是可以轻松应对的,求套路是比较固定的,图片元素外面需要一个固定比例的容器元素,例如下面的HTML结构:

<br>

<p class="banner">
 <img src=""banner.jpg>
</p>

.banner元素同样负责控制比例,然后图片填充.banner元素即可,CSS代码如下:

.banner {
 padding: 15.15% 0 0;
 position: relative;
}
.banner > img {
 position: absolute;
 width: 100%; height: 100%;
 left: 0; top: 0;
}

效果就达成了!

眼见为实,去年起点中文网手机版诸多页面的通栏广告就都是这么实现的,最终的效果参见下面的gif截图(如果图无法显示,可以评论反馈):

可以看到,无论屏幕宽度多宽,我们的广告图片比例都是固定的,不会有任何剪裁,不会有任何区域缺失,布局就显得非常有弹性,也更健壮。

————-

其实,我之前一直低估百分比padding的实际应用价值,因为有vw单位的存在,毕竟理解vw看上去要更简单一些,所以,一直就没做相关技巧的介绍。但是,随着图片相关布局处理越来越多,我发现,百分比padding的实用价值要比想象的大,要比vw单位适用场景更多,兼容性更好(百分比特性IE6+支持,图片100%覆盖IE8+支持)。

对于复杂布局,如果图片的宽度是不固定的自适应的,我们通常会想到这么一个取巧的做法,就是只设定图片的宽度,例如:

img { width: 100%; }

此时浏览器默认会保持图片比例显示,图片宽度大了,高度也跟着一起变大;图片宽度小了,高度也跟着一起变小。开发人员似乎无需关心图片真实比例是怎样的。

然而这种技巧有一个非常不好的体验问题,那就是随着页面加载的进行,图片占据的高度会有一个从0到计算高度的图片变化,视觉上会有明显的元素跳动,代码层面会有布局重计算。

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

缩小浏览器宽度可以看到不同宽度下的布局效果,Gif效果截图如下:

此demo难点就是图片自适应同时保持比例,以及页面刷新的时候没有布局稳固不晃动,其核心HTML和CSS代码如下:

<br>

<p class="works-item-t">
  <img src="./150x200.png">
</p>

.works-item-t {
 padding-bottom: 133%;
 position: relative;
}
.works-item-t > img {
 position: absolute;
 width: 100%; height: 100%;
}

可以看到,当把垂直方向padding值只使用padding-bottom表示的时候,如果没有text-align属性干扰,a1f02c36ba31691bcfe87b2722de723b元素的left:0;top:0是可以省略的。

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

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

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

相关推荐:<br>

一个CSS+div高度自适应布局模型_html/css_WEB-ITnose

CSS3自适应全屏焦点图切换的特效怎么做

响应式和自适应有什么区别

以上是详解CSS百分比padding制作图片自适应布局的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python vs. JavaScript:开发环境和工具Python vs. JavaScript:开发环境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

JavaScript是用C编写的吗?检查证据JavaScript是用C编写的吗?检查证据Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript的角色:使网络交互和动态JavaScript的角色:使网络交互和动态Apr 24, 2025 am 12:12 AM

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具