使用padding代替高度实现背景图片高度按比例自适应

本篇文章由:http://xinpure.com/use-padding-instead-of-highly-adaptive-background-image-height-proportionately/

高度百分比

将高度设置成百分比时,其高度是基于父元素来定的,设置成50%,就是将该元素高度设置成 父元素的高度值 x 50%。

但是将高度设置成百分比时,往往是不生效的!高度依然为0,这是为啥? 道理很简单,那就是父元素的高度也为0。

所以这就需要讲到浏览器对宽度及高度是如何计算的。

浏览器在计算有效宽度时会考虑浏览器窗口的宽度,如果没有设置绝对宽度,就会自动将页面内容横向平铺填满整个窗口。

然而浏览器并不计算内容的高度,除非内容超过了视窗高度,形成滚动条。

或者给页面设置一个绝对高度,不然的话,浏览器就会将内容按文档流往下堆砌,也就是高度值为缺省值 auto。

所以如果基于缺省值 auto 来设置百分比高度的话,必定是无效高度。

显然只需要给父元素指定一个绝对高度,就没什么问题了。

可是在实际应用当中,高度通常都不是固定的,不会把高度写死,何解?

这就可以用到,本文给大家介绍的方法,接着往下看。。。

使用 padding 代替高度

为什么使用内边距代替高度?

内边距,顾名思义就是元素边框与元素内容之间的空白区域。

所以内边距越来越大时,元素的高度也会不断增大。

设想一下,如果一个元素的内容为空,内边距的高度,是不是就是该元素的高度呢?

答案是必须的!

那么我们是不是可以,将高度替换为内边距,并且以百分比设置它的值呢?

答案也是必须的!

这里可能有些朋友会有疑问了,如果设置成百分比的话,一样是基于父元素成百分比的呀?

对,没错,是基于父元素,但是 内边距 padding 是基于父元素的宽度的百分比的内边距

注意重点是 基于宽度

所以不管是 padding-left 和 padding-right 还是 padding-top 和 padding-bottom 都是基于父元素宽度的百分比。

理论说完,咱们就来实践一下

实践使用

这里就以实际遇到的情况做为例子来实践这个功能:

在页面中添加图片时,如果希望图片的宽高自适应的话,通常只需要将图片的宽度设置成百分比即可 (img 标签自身就是按比例缩放图片),

就是当你不能使用 img 标签的时候(使用 div 标签,以背景图片的形式加入图片),又该怎么办呢?

接下来咱们就用 padding 去实现这个需求。

那么问题又来了。。。

如果使用 padding 代替高度(因为是代替高度,所以使用 padding-top 或 padding-bottom 其中之一即可),那么百分比应该如何设置呢?

首先,我们需要计算出图片的宽高比例,本文案例中使用了一张 640x400 的图片,宽高比就是 1.6

假设将图片的宽度设置为 50%,那么图片的高度就是 50% / 1.6 = 31.25%

所以图片的高度按比例缩放就是 基于父元素宽度的 31.25%

来看看实际应用。

HTML

<img class="autoHeightImg" src="4.jpg" alt="4.jpg" />
<div class="autoHeightDiv"></div>

CSS

.autoHeightImg {
    width: 50%;
}
.autoHeightDiv {
    width: 50%;
    height: 0;
    padding-top: 31.25%;
    background-image: url(4.jpg);
    background-repeat: no-repeat;
    background-size: 100% 100%;
}

效果图

插入一张原图(使用 img 标签按比例显示)作为比较

这是使用 padding 代替高度之后按比例显示的效果

根据效果图可以看出,高度稍微会有微小的偏差,小于0.01%,几乎可以忽略不记了!

这样需求就实现了,代码也比较简单,当然使用 padding-top 和 padding-bottom 都是,一样可以实现,一样的效果。

时间: 2024-10-01 04:22:28

使用padding代替高度实现背景图片高度按比例自适应的相关文章

设置背景图片的两种方式,并解决手机端背景图片高度自适应问题

1 设置背景图片的两种方式: 方式一: <img src="../img/10.jpg"/ class="back" id="Background"> .back{ position: fixed; width: 100%; height: 100%; display: block; z-index: -100; } 方式二:div class="body" id="Background">

iOS开发 改变UINavigationController的UINavigationBar的高度和背景图片

1.改变高度 自定义UINavigationBar的新类别: [cpp] view plaincopy //UINavigationBar+BackgoundImage.h #import <Foundation/Foundation.h> @interface UINavigationBar (BackgoundImage) @end 在新类别的实现中,覆盖原有类的方法 - (void)drawRect:(CGRect)rect : [cpp] view plaincopy //UINavi

背景图片随窗口大小改变自适应

效果参考 http://vip.163.com/ http://vip.sina.com.cn/ 特点:背景图片在不变形的情况下尽可能的显示完整,窗口不出现滚动条,始终全屏显示 JS: #content代表最外层的DIV,使页面全屏 .bg代表背景图片 <img src="#" class="bg" /> //此参数表示图片缩放的比例,如果有需要定位在窗口某位置的图片,可根据此变量改变该图片的大小和坐标,使其在窗口大小改变的时候可以保持和背景固定的比例及

背景图片居中全屏自适应显示

.bg{ background-size: cover;background-image:url(../assets/images/sunshine.png);background-repeat:no-repeat;background-position:center;background-attachment:fixed; }

响应式Web设计- 背景图片

背景图片可以响应式调整大小或缩放,以下是三种不同的方式 1.如果 background-size 属性设置为 "contain", 背景图片将按比例自适应内容区域.图片保持其比例不变: <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>

CSS3------background-size(背景图片尺寸属性)

background-size 可以设置背景图片的大小,数值包括 长度length和百分比percentage. 并且会根据背景原点位置 background-origin 设置其图片覆盖的范围.那么下面我们一起来了解这个background-size属性吧. background-size语法 w3c对background-size的语法规定如下: 属性名: background-size 属性值: <bg-size>* 其中 bg-size = [ <length> | <

CSS3:background-size背景图片尺寸属性

background-size可以设置背景图片的大小,数值包括 长度length和百分比percentage. 并且会根据背景原点位置background-origin设置其图片覆盖的范围.那么下面我们一起来了解这个background-size属性吧. background-size语法 w3c对background-size的语法规定如下: 属性名: background-size 属性值: <bg-size>* 其中 bg-size = [ <length> | <pe

背景图片位置设置

举例: background: url("images/pc4.png") 100% 0 no-repeat; 以上,100%和0表示(x,y)位置. x=左侧距离÷(对象宽度-背景图片宽度)×100%: y=顶部距离÷(对象高度-背景图片高度)×100%: 另外,先设置背景图片,再设置背景颜色,两者可以共存. 原文地址:https://www.cnblogs.com/wanlibingfeng/p/11112550.html

代码: 两列图片瀑布流(一次后台取数据,图片懒加载。下拉后分批显示图片。图片高度未知,当图片onload后才显示容器)

代码: 两列图片瀑布流(一次后台取数据,无ajax,图片懒加载.下拉后分批显示图片.图片高度未知,当图片onload后才显示容器) [思路]: 图片瀑布流,网上代码有多种实现方式,也有各类插件.没找到合意的,所以根据网上找的一段代码,进行了较大改动. 需引用 zepto 或 jquery. 我这个是应用于手机上的,两列瀑布流,图片高度未知——等图片的onloaded事件触发后,才对容器进行计算和定位. 大容器是 $("#imgList"),容器格子是$(".pin"