css3 calc()属性介绍以及自适应布局使用方法
前端知识
Calc()介绍
calc的英文是calculate的缩写,中文为计算的意思,是css3的一个新增的功能,用来只当元素的长度。比如说:你可以用calc()给元素margin、padding、border、font-size和width等属性设置动态值。为什么说是动态值呢?因为我们是使用来表示得到的值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。
Calc()的用处
calc()能让你给元素的做计算,你可以给一个div元素,使用百分比、em、px和rem单位值计算出其宽度或者高度,比如说“width:calc(50%+2em)”,这样我们就不用考虑元素DIV的宽度值到底是多少,而把这个任务交由浏览器去计算。
Calc()语法
calc()语法很简单,使用数学表达式来表示就可以了,就像我们以前学习的加(+)、减(-)、乘(*)、除(/)一样,如下:
.elm { width: calc(expression); }
其中”expression”是一个表达式,用来计算长度的表达式。
Calc()的运算规则
DIV+CSS自适应布局
1、高度自适应布局
原理:把每个模块设置为绝对定位,然后设置中间自适应的模块的top和bottom属性的值分别为头部和底部模块的高,然后中间模块的高度就自适应。
html代码如下:
<body> <div class="top"> 120px </div> <div class="main"> 自适应 </div> <div class="bottom"> 120px </div> </body>
css代码如下:
.top{ width: 100%; height: 120px; position: absolute; background-color: greenyellow; } .main{ position: absolute; width: 100%; top: 120px; bottom: 120px; background-color: azure; height: auto; } .bottom{ position: absolute; bottom: 0;//别漏了 width: 100%; height: 120px; background-color:greenyellow ; }
2、宽度自适应
宽度自适应有三种方法:分别是绝对定位;利用margin,中间模块先渲染;自身浮动。
1)、用绝对定位来设置宽度自适应布局,原理为:针对自适应模块使用绝对定位,再把left和right设置为左右两列的宽,其实原理和高度自适应的原理是一样的,另外左右两列分别左右浮动。
html代码:
<body> <div class="left"> 200px </div> <div class="main"> 自适应 </div> <div class="right"> 200px </div> </body>
css代码:
html, body { margin: 0; height: 100%; padding: 0; font-size: 30px; font-weight: 500; text-align: center; } .left, .right { width: 200px; display: inline; height: 100%; background-color: greenyellow; } .left { float: left; } .right { float: right; } .main { position: absolute; left: 200px; right: 200px; height: 100%; background-color: azure; display: inline; }
2)、中间一列优先渲染的自适应三列布局,优先渲染(加载)的关键:内容在html里面必须放在前面。自适应的div必须放在left和right前面且包含在一个父div里。父div,left和right模块都向左浮动,然后对自适应的div(就是父div里的子div)设置margin:0 200px,然后对left的margin-left的属性值设置为100%的负数,就是margin-left:-100%;对right的margin-left的属性值设置为自身宽度的负数,就是margin-left:-200px。
注:自适应的div必须放在left和right前面且包含一个父div里。
html代码:
<body> <div class="main"> <!--看清楚,这里用一个父div包住--> <div class="content"> 自适应 </div> </div> <div class="left"> 200px </div> <div class="right"> 200px </div> </body>
css代码:
html, body { margin: 0; height: 100%; padding: 0; font-size: 30px; font-weight: 500; text-align: center; } .main { width: 100%; height: 100%; float: left; } .main .content { margin: 0 200px; background-color: azure; height: 100%; } .left, .right { width: 200px; height: 100%; float: left; background-color: greenyellow; } .left { margin-left: -100%; //important } .right { margin-left: -200px; //important }
3)、自身浮动,原理:中间列设置margin属性,就是把左右列分别左右浮动。
注:使用这个方法布局自适应的话,必须把自适应的那一列在html中放在left和right后面。
html代码:
<body> <div class="left"> 200px </div> <div class="right"> 200px </div> <div class="main"> 自适应 </div> </body>
css代码:
html, body { margin: 0; height: 100%; padding: 0; font-size: 30px; font-weight: 500; text-align: center; } .main { margin: 0 200px; height: 100%; background-color: azure; } .left, .right { width: 200px; height: 100%; background-color: greenyellow; } .left { float: left; } .right { float: right; }