我们知道,标准流中的,父容器里的多个块级的子元素会默认从上往下排列。但我们如果使用伸缩布局,就可以使子元素们在不脱离标准流的情况下,水平方向上,从左至右排列
flex 布局的优势
1、flex 布局的子元素不会脱离文档流,很好地遵从了“流的特性”。
2、flex 是一种现代的布局方式,是 W3C 第一次提供真正用于布局的 CSS 规范。 flex 非常提供了丰富的属性,非常灵活,让布局的实现更佳多样化,且方便易用。
但flex 的缺点在于,它不支持低版本的 IE 浏览器。
我们来明确几个概念
弹性盒子
弹性盒子指的是使用 display:flex 或 display:inline-flex 声明的父容器。
子元素/弹性元素
子元素/弹性元素指的是父容器里面的子元素们(父元素是弹性盒子)。
使用 display:flex 或 display:inline-flex 声明一个父容器为弹性盒子。此时,这个父容器里的子元素们,会遵循弹性布局。我们一般使用display:flex。
1.flex子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配
min-width 最小值 min-width: 280px 最小宽度 不能小于 280
max-width: 1280px 最大宽度 不能大于 1280
flex-direction:用于设置盒子中子元素的排列方向。属性值可以是:
flex-direction这个属性默认子元素从左到右排列的。
子盒子如何在父盒子里面水平对齐方式如下所示,
子盒子如何在父盒子里面垂直对齐(单行),如下所示
flex-wrap控制是否换行,如下
flex-flow是flex-direction、flex-wrap的简写形式
align-content是针对flex容器里面多轴(多行)的情况,align-items是针对一行的情况进行排列。必须对父元素设置自由盒属性display:flex,并且设置排列方式为横向排列flex-direction:row并且设置换行,flex-wrap:wrap这样这个属性的设置才会起作用。
div+css 如何让背景图片横向缩小方法
方法/步骤
1、首先,需要新建一个html页面,并在页面中写上一个div。并为div添加背景图片,为背景图片添加一些基本的样式。
2、然后,按下键盘上的F12,查看其在浏览器中的效果。效果肯定是页面中没有相应的背景图片,理由是做的是背景图片,无法将div撑起一定的高度。
3、既然不能撑起来,也不能单纯的为div设置高度,这样无法解决不同大小背景图片的问题,可以利用css中的伪元素::after或者::before
4、可以简单的解释一下,利用伪元素是将指定标签的前面或者后面的内容设为空,并设成块元素,并设定以百分比为单位的padding-bottom或者padding-top。以此撑开这个div。
5、另一种方法是,我们在有背景图片的div的内部再套一个div,然后为这个内部的div添加相应的样式,使得外层div可以被撑起来。
6、这里采用的是和第一个相同的做法,为这个内部div设定内部边距上或者下都可以。同样是以百分比作为单位。这样我们再次在浏览器中查看,就可以看到作为背景的图片了。
7、不管采用方法一还是方法二,都是设置的上下的内边距而不是外边距,并且要以百分比作为单位。
当父元素和子元素都没有定义宽度的情况下实现水平居中:
display:inline-block
可以使用text-align:center和display:inline-block相结合,这个技巧需要一个父元素。
1、HTML代码:
代码如下:
<div class="navbar">
<ul>
<li><a href="/">Home</a></li>
…
</ul>
</div>
2、CSS代码:
代码如下:
.navbar {
text-align:center
}
.navbar ul {
display:inline-block
}
.navbar li {
float:left
}
.navbar li + li {
margin-left:20px
}
3、IE系列IE8+支持,要IE7 IE6 支持需要加入以下代码使display:inline像display:inline-block一样
代码如下:
.navbar ul {
*display:inline
*zoom:1
}
position:relative
使用position:relative与float相结合的技巧及其浮动和定位参照物的关系,这个技巧需要两个父元素,一个用来定位而另外一个用来避免出现滚动条。
HTML代码:
代码如下:
<div class="navbar">
<div>
<ul>
<li><a href="/">Home</a></li>
…
</ul>
</div>
</div>
CSS代码:
代码如下:
.navbar {
overflow:hidden
}
.navbar >div {
position:relative
left:50%
float:left
}
.navbar ul {
position:relative
left:-50%
float:left
}
.navbar li {
float:left
}
.navbar li + li {
margin-left:20px
}
浏览器支持度较低 只Chrome和Firefox这样的-webkit- -moz-内核浏览器。当然以后慢慢会发展起来的。
这个方式是推动浏览器发展的一个新的东西,目前供应于所以可以写前缀的浏览器,并没有工作在IE9和IE9以下。
根据你的需求来选择合适的方法吧,display:inline-block兼容性较好,flex-box将会用于未来。