css布局-百分比布局

html-css04

css布局-百分比布局,第1张

书写手机网页时,必须约束视口宽度(320-420左右): <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" id="viewport" /> width=device-width 约束视口 initial-scale=1.0 初始视口倍数是1倍 minimum-scale=1.0 最小允许视口宽度是1倍 maximum-scale=1.0 最大允许视口宽度是1倍 user-scalable=no不允许用户缩放视口 书写移动端网页,没有版心,必须用百分比布局。百分比布局也叫流式布局。 一、百分比布局 width:宽度的百分比是相对于父盒子width内容宽的比。没有父盒子就是相对于浏览器的宽。 height:高度的百分比是相对于父盒子height内容高的比。 padding,margin.:padding和margin不管任何方向百分比都是相对于父盒子width内容宽的比。 border:不能书写百分数 子盒子如果绝对定位,width百分比参考的是距离最近,且有定位的父盒子的width(算上padding.); height百分比参考的是距离最近,且有定位的父盒子的height(算上padding.); padding,margin百分比参考的是距离最近,且有定位的父盒子的width(算上padding.); 例:div{ width: 50%overflow: hidden} p{ width: 50%height: 100pxfloat: leftbackground-color: pink} p:last-child{ background-color: green}二、box-sizing:border-box css2中的盒模型是外扩的。 css3的box-sizing:盒模型内减。(在width、height基础上再书写padding或者border,是在原有宽高上进行内减。) 例: 内减盒模型:书写的width、height就是盒子真正占有的宽和高。 讲真,内减盒模型简直不能再更好用了!!尤其是要自己各种测算的时候! 三、弹性盒 display的属性值:block ,inline,inline-block,none -webkit-box:弹性盒容器。 例: 书写:3个P,宽度比是1:2:3。(X+2X+3X=100%) 抽象公式: 四、固比固模型 固比固模型:第一部分和第三部分宽度是固定值,第二部分宽度是剩余部分的宽度。 例:1和3部分宽度是120px,2自动撑开。 1、利用浮动 2、绝对定位(推荐) 3、弹性盒 五、max-width 和 min-width 移动端网页宽度必须使用百分比,但是网页的最小宽度或者是最大宽度只能书写像素px。不能用百分数。 例:

用js实现一个宽度自适应,高度随着宽度变化而变化的矩形,相信大家肯定都会。无非是js获取一下元素宽度,然后再计算出相应比例的高度,然后赋给元素,但如果要求只用CSS实现呢。

html代码如下,

<div class='container'>

<div class='dummy'></div>

<div class='content'>content</div>

</div>

css代码如下,

复制代码

.container{

background-color: silver

width:100%

position:relative

display: inline-block

}

.dummy{

margin-top: 100%

}

.content{

position:absolute

left:0

right:0

top:0

bottom: 0

}

有什么问题你可以去《5 1r gb》看看里面的论坛

接下来分析一下,究竟是如何实现的。首先容器container块内包含了两个div,一个是dummy,这个纯粹是为了实现缩放效果加的,另一个content里面放的是我们真正想要展现的内容。其实原理也很简单,大家都知道div是块元素,它默认就是占一行,宽度本来就是自适应的,所以我们需要做的是让它的高度能随宽度改变。在不使用js的前提下,靠的就是前面提到的dummy那个块来实现,dummy只设置了一个css属性,margin-top:100%,相信大家都反应过来了。因为容器宽度已经在那儿了,通过dummy块的margin-top来把整个的高度撑得和宽度一样,当容器宽度改变时,dummy的位置也会改变,进而容器高度就跟着发生了变化。-《http://v.youku.com/v_show/id_XMTMzMjg3MTU3Ng==.html?f=26081534》-

但是,还是会有个问题——外部容器发生了高度塌陷。而”高度塌陷“这个词大家肯定都不是第一次听到,大家肯定都处理过因为子元素浮动导致父元素高度塌陷,所以这里采用的方法也是类似清除浮动的方法,设置父元素display:inline-block或overflow:hidden。这里说个题外话,不知道大家在使用这两种方法清除浮动的时候有没有过疑问,为什么给父元素这样设置之后就能把父元素高度撑起来呢,准确的原理解释起来有点复杂。可以简单的理解为,当子元素脱离文档流时,父元素不知道子元素的存在,所以导致高度塌陷。当设置父元素为display:inline-block或者overflow:hidden时,迫使父元素去检查自己内部有哪些子元素,而这时候就发现了之前absolute定位的子元素,所以高度就撑开了。

这里给dummy块设置margin-top:100%,出来的是个可自适应缩放的正方形,如果需要长方形只需要更改此值即可,比如需要4:3的长方形,则应设为margin-top:75%。