在如今响应式布局的要求下,很多能自动调整尺寸的元素能够做到高宽自适应,如img,通过{width:50%;height:auto;}实现图片高度跟随宽度比例调整。

然而,用的最多的标签一哥Div却不能做到自动调整(要么从父级继承,要么自行指定px,要么给百分比!但是这个百分比是根据父级的高度来计算的,根本不是根据元素自身的宽度,那么就做不到Div的宽高达成一定的比例=-=)。

要实现这种功能(div的高度:宽度=1:1),通过各种加Buff,得知有以下几种处理方式

1,直接指定div的宽高+zoom来实现自适应

div{width:50px;heigth:50px;zoom:1.1;}

这样能达到初步的等宽高div,但是局限性太大,PASS!

2,通过js动态判断div的宽度来设置高度

div{width:50%;}

window.onresize = function(){div.height(div.width);}

也能实现等宽高div,但是总觉得有点别扭,PASS!

3,通过宽高单位来设置

div{width:20vw;height:20vw;/*20vw为viewport width的20%*/}

但是很多设备不支持这个属性,兼容性太差,PASS!

4,通过float来设置

#aa{background:#aaa;;}
#bb{background:#ddd;;float:left}
#cc{background:#eee;;float:right}

<div id="aa">父div
  <div id="bb">子div</div>
  <div id="cc">子div</div>
  <div style="clear:both">就是这个用于clear错误的</div>
</div>

能够让父级元素aa根据子元素的高度自动改变高度(在子元素里放置自适应元素)来调整高宽比一致,然而太麻烦,PASS!

5,终于到最终大杀器了,通过padding来实现此功能

通过以上几个方案的实验,发现宽度的自适应是根据viewport的width来调整的,比如{width:50%}就是浏览器可视区域的50%,resize之后也会自动调整。

而height指定百分比后,他会自行找到viewport的height来调整,跟width一毛钱关系没有,自然两者不能达到比例关系了。通过这个思路,要找到一个能跟viewport的width扯上裙带关系的属性,就能解决这个问题了。

这个属性就是padding,padding是根据viewport的width来调整的,巧就巧在padding-top和padding-bottom也是根据viewport的width来计算的,那么通过设置这个属性就能跟width达成某种比例关系了,

我们首先指定元素的width为父级元素的50%(父级元素为任意有高宽的元素,不能指定特定父级元素,否则影响此方案的通用性)

.father{width:100px;height:100px;background:#222}

.element{width:50%;background:#eee;}

这个时候我们再设置element的height为0,padding-bottom:50%;

.element{width:50%;height:0;padding-bottom:50%;background:#eee;}

element就变成了一个宽度50%,高度为0(但是他有50%width的padding-bottom)的正方形了,效果如下图灰白色的div

这个时候可能有人要问了,这个div的高度为0,那如果我要在element里放置元素呢,那岂不是overflow了,这里就要提到overflow属性了,它的计算是包括div的content和padding的,也就是说,

原来你的div可能是个{width:50px;height:50px;padding:0}的div,现在变成{width:50px;height:0;padding-bottom:50px;}的div了,尺寸还是一样的,通过指定这个div的子元素的定位,一样可以正常显示

这样就可以通过设定父级元素father、我们需要的元素element、子级元素datail来实现任意情况下该需求(div宽高定比例)。

纯Css实现Div高度根据自适应宽度(百分比)调整的更多相关文章

  1. 纯CSS实现Div高度根据自适应宽度(百分百调整)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. div高度不能自适应(子级使用float浮动,父级div高度不能自适应)

    1.问题截图: 2.问题描述: 由于地址.公司名长度的不定性,所以每一条地址所在的父级div高度不定,但是需要设置一个最小的高度min-height:48px;但是当内容增加的时候,父级div高度却不 ...

  3. css中div高度自适应

    高度的自适应(父div高度随子div的高度改变而改变) 1.如果父div不定义height.子div均为标准流的时候,父div的height随内容的变化而变化,实现父div高度随子div的高度改变而改 ...

  4. CSS实现div高度自适应

    1.有时候,我们希望容器有一个固定高度,但当其中的内容多的时候,又希望高度能够自适应,也即容器在纵向能被撑开,且如果有背景,也能够自适应.在一般情况下,使用min-height即可解决.但是广大网民的 ...

  5. <转载>如何解决子级用float浮动父级div高度不能自适应的问题

    转载:http://www.kwstu.com/ArticleView/divcss_2013101582430202 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内 ...

  6. 纯css实现div中未知尺寸图片的垂直居中

    1.淘宝的方法 在曾经的"淘宝UED招聘"中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是 ...

  7. 让一个父级div根据子级div高度而自适应高度

    需求是点击上传的时候进行子级div高度不定,相对来说父级div高度也不能固定,把元素都设置成普通标准流,然后样式可以使用margin内边距或者padding外边距来进行调节 放上代码供参考: .opu ...

  8. css设置div高度与宽度相等的一种方法

    div.category{ width:33%; padding:33% 0 0; } 1.关键在padding:33% 0 0这句代码,通过设置padding-top与宽度相等(padding使用百 ...

  9. css控制div下图片自适应解决方法:图片不超过最大宽度

    我们(特别是像我一样的菜鸟)经常会遇到一个问题——图片自适应.这个问题是很普遍的.在文章区,在论坛,可以这么说:哪儿需要上传图片,哪儿就存在这个问题,而论坛上也不时有人询问.为什么?原因很简单,我们不 ...

随机推荐

  1. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(六):集成 Swagger API

    spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在 ...

  2. 20-hadoop-pagerank的计算

    转: http://www.cnblogs.com/rubinorth/p/5799848.html 参考尚学堂视频 1, 概念( 来自百度百科) PageRank是Google专有的算法,用于衡量特 ...

  3. 面试题-----按位翻转32位unsigned

    // test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include < ...

  4. mongo学习使用记录1

    1 mongo的安装 1.添加MongoDB安装源 1.添加MongoDB安装源vim /etc/yum.repos.d/mongodb-enterprise.repo 将下列配置项写入文件 [mon ...

  5. 简易的命令行聊天室程序(Winsock,服务器&客户端)

    代码中使用WinSock2函数库,设计并实现了简单的聊天室功能.该程序为命令行程序.对于服务器和客户端,需要: 服务器:创建监听套接字,并按本地主机绑定:主线程监听并接受来自客户端的请求,并为该客户端 ...

  6. BeanDefinition到Bean

    转自:http://songzi0206.iteye.com/blog/1430239 当 BeanDefinition 注册完毕以后, Spring Bean 工厂就可以随时根据需要进行实例化了.对 ...

  7. Linux 卸载 openjdk

    1 卸载 openjdk sudo apt-get purge openjdk*

  8. ASP.NET截取网页注释行之间的内容

    这是网友在论坛问到的问题,网友要求:“我想要抓取每一个<!-- 文字新闻spider begin -->开始<!-- 文字新闻spider end -->      结尾的中间 ...

  9. c#中Socket网络通信的入门

    请访问 http://balabiu.com/?p=16 后续本文更新将在这里: 将设计服务器端异步接受客户端连接和客户端消息.

  10. JAVA通过XPath解析XML性能比较

    转自[http://www.cnblogs.com/mouse-coder/p/3451243.html] 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 ...