html图片水平居中,CSS图片响应式 垂直水平居中

我看最近微博流行CSS居中技术,我看了几编资料写的都不多好,于是抽时间把相关资料整合了,具体内容如下。

点击此处下载源码

效果展示:

2956f6dd7d925a780f5664727da9bbb4.gif

要求:

1.尽可能兼容更多浏览器,这里兼容到ie7,ie6不支持max-*就不考虑了。

2.浏览器尺寸变化时,图片总是等比例拉伸或缩放。

3.包裹图片的div也是响应式的,并且每个div的尺寸是一样的。

4.图片始终保持水平垂直居中。

5.图片的行列数不变,这里一直都是3*3.

下面来搞定一个个要求。

满足要求1意味着这里要尽量不使用高级浏览器才有的属性,比如高级浏览器居中常用的什么

display:table-cell;vertical-align;center;

flexbox

transform

。。。

如果不得不用这些属性,也必须要有兼容低版本浏览器的替代方案。

要求2中图片等比拉伸缩放在响应式设计中很容易搞定。

直接对图片img{max-width: 100%;}就可以了。外面的宽度就算设成比图片宽度小的尺寸,图片会填满外面div,同时等比例的计算出图片这时该有的高度。

aa6ffb3e04e9d5e3c5a3f4d18a8b038b.gif

可以看到图片尺寸是640*480(4:3),外面div设成300px,图片尺寸这时变为300*225(4:3).

然后是要求2里面的浏览器尺寸变化。这个也容易,把外面div的宽度写成百分百就可以了。

1f245461b58677a8c7f61440f3616e7e.gif

可以看到不管外面div尺寸怎么变,图片的宽高比始终没变。

然后是要求3,外面div响应式。

第一反应是把尺寸设置成百分百。比如最上面的效果,一行有三张图片。把每个包裹图片的div宽度设成33.3%;那这时div还会像里面的图片一样,等比例缩放或拉伸,div的高度就会参差不齐。

  • 1.jpg

.....

*{

margin: 0;

padding:0;

}

li{

list-style-type: none;

display:inline-block;

vertical-align: middle;

max-width: 200px;

width: 32%;

border:1px solid red;

}

img{

max-width: 100%;

max-height: 100%;

display: inline-block;

vertical-align: middle;

}

#wrap{

max-width: 620px;

font-size: 0;

}

e506c2eafc7550e16698c243df3d04ec.gif

可以看到第一张图片的高度已经超过200px,因为第一张图片是宽度小于高度,很显然这时应该以高度为基准,宽度等比例缩放。如果在图片父元素加overflow:hidden;就看不到大猪的猪脚了。

那么到底怎么做才能让外面div响应式?

padding-top:100%;

  • ...

*{

margin: 0;

padding:0;

}

li{

list-style-type: none;

float: left;

display: block;

max-width: 200px;

width: 32%;

border:1px solid red;

}

.dummy{

padding-top: 100%;

}

#wrap{

max-width: 620px;

font-size: 0;

}

62e4478803000e6935d67344a5a4c260.gif

这里宽高比是1:1.如果宽高比是4:3,就设成padding-top: 75%;,其他的以此类推。

要求3是搞定,下面是要求4。

先把图片放进去。

47b3a8f4fde6f813bf122e71466d136a.png

这时让图片脱离文档流,并把图片整个铺满。

img{

position: absolute;

top: 0;

bottom: 0;

left: 0;

right: 0;

max-width: 100%;

max-height: 100%;

display: block;

margin: 0 auto;

border: 2px solid blue;

}

同时把包裹图片div position:relative;

5cba0e82fe415ad9d8aee5cb49a167e7.png

注意到上面图片margin:0 auto;,已经可以水平居中了。

下面就只差一个图片垂直居中了,要求5只需在最外面div设置一个max-width就可以设置一行的列数了。

垂直居中有很多方法,但是这里图片position:absolute;,很容易想到设置margin:auto;padding:auto;就可以让脱离文档流的图片水平垂直居中。参见Absolute Horizontal And Vertical Centering In CSS。

63ee761532a1f41a1a2a76348170608b.gif

但是这种方法对ie7无效。因此只有在图片外面再加一层div.

这里本屌用的是很常见的一种垂直居中的方法。

1.jpg

img{

max-width: 100%;

max-height: 100%;

display: inline-block;

vertical-align: middle;

}

i{

display: inline-block;

vertical-align: middle;

height:100%;

}

注意,这时

标签要设置height:100%.否则在ie7中,标签没有可以参照的高度,使得它无法达到和外部容器一样的高度。

以上内容是本文针对CSS图片响应式 垂直水平居中的全部内容,希望大家喜欢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下代码来创建一个响应式导航栏,并将其居中: HTML代码: ``` <nav class="navbar navbar-default navbar-centered"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse"> <span class="sr-only">Toggle Navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a href="#" class="navbar-brand">Logo</a> </div> <div class="collapse navbar-collapse" id="navbar-collapse"> <ul class="nav navbar-nav"> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Services</a></li> <li><a href="#">Portfolio</a></li> <li><a href="#">Contact</a></li> </ul> </div> </div> </nav> ``` CSS代码: ``` .navbar-centered .navbar-nav { display: inline-block; float: none; } .navbar-centered .navbar-collapse { text-align: center; } @media (min-width: 768px) { .navbar-centered .navbar-nav { float: none; display: table-cell; vertical-align: top; } .navbar-centered .navbar-header { display: table-cell; width: 1%; } .navbar-centered .navbar-collapse { display: inline-block; text-align: center; width: 100%; } } ``` 解释: - 通过将 .navbar-nav 的 display 属性设置为 inline-block 和 float 属性设置为 none,来使导航菜单水平排列,并具有自适应宽度; - 通过将 .navbar-collapse 的 text-align 属性设置为 center,使导航菜单居中; - 通过使用媒体查询来处理大屏幕情况下的样式:将 .navbar-nav 的 display 属性设置为 table-cell,并使用 vertical-align 属性使其垂直居中;将 .navbar-header 的 display 属性设置为 table-cell,width 属性设置为 1%,防止它占据过多空间;将 .navbar-collapse 的 display 属性设置为 inline-block,并设置其宽度为100%。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值