如下三个div将会会如何放置(margin collapsing)?css
<style> body { margin: 0; } .first { margin: 20px; height: 500px; background-color: #666; } .second { margin: -10px; height: 300px; background-color: #999; } .third { margin: -30px; height: 100px; background-color: #ccc; } </style> <div class="first"> <div class="second"> <div class="third"> 三个元素的外边距折叠 </div> </div> </div>
同一个BFC中,相邻的块状元素都是垂直放置吗?html
如何清除浮动?根据什么原理?app
如何对左侧栏200px,主内容自适应进行布局?布局
如何使用margin完成圣杯布局(左侧x px,右侧y px,中间自适应),用flex呢?测试
如下三个div将会会如何放置?flex
在同一个BFC中,相邻的块状
元素会发生折叠。两个margin值都是正值,取最大值,都是负值,取最小值,一正一负则相加。那么如题有三个呢,是从父元素往子元素算起,仍是子元素往外算起?若是从外往里算,是0,从内往外算是-10px。经测试,是从内往外计算。code
live demohtm
同一个BFC中,相邻的块状元素都是垂直放置吗?get
不必定,设置writing-mode
值。查看如下Demo。it
如何清除浮动?根据什么原理?
紧挨的块级元素设置clear both
来清除浮动,通常 会经过:after
清除浮动。如Bootstrap的clearfix
。
.clearfix { display: table; content: " "; clear: both }
使父级元素触发一个新的BFC,如overfow:hidden
或者display:table
。
如何对左侧栏200px,主内容自适应进行布局?
左栏设置200px的宽,设置浮动,主内容设置overflow:hidden
触发一个BFC。由于BFC不会与浮动折叠,因此右侧会自适应。
如何使用margin完成圣杯布局(左侧x px,右侧y px,中间自适应),用flex呢?
圣杯布局大体结构以下
<div class="header"></div> <div class="container"> <div class="main"></div> <div class="left"></div> <div class="right"></div> </div> <div class="footer"></div>
步骤以下:
.container设置内边距,留出放置左右固定宽度侧栏的宽度。设置min-width:x px
(content-box)下,若是.left宽度大于父元素content-box的宽度,本身会被挤下去。
.main,.left,.right设置浮动,.main设置100%的宽度。.main位置固定。
.left设置x px宽度,设置margin-left为-100%,此时与.main左上角重合,设置position:relative
,left设为-x px或者right设置x px,.left位置固定。
.right设置y px宽度,把margin-left设为-y px,此时与.main右上角重合,相对定位回到本身的位置。(或者margin-right小于等于-y px,最后不用定位,查看margin demo2)。
footer设置clear:both
清除浮动,或者container设置为display:table
或者overflow:hidden
闭合浮动。使.footer回到正常位置。
另外有flex布局就简单多了。须要注意的是使用margin会把.main放在最前边。而flex能够按照.left,.main,.right的顺序放置。另外flex布局也不会出现中间挤掉两边的状况。