css 布局的几种方式
1、 标准流布局 (现在用得少)
所谓的标准:就是标签按照规定好默认方式排列,标准流是最基本的布局方式
1.1 块级元素
块级元素会独占一行,从上向下顺序排列
常用元素:div,hr,p,h1,ul,ol,form,table
1.2 行内元素
行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行
常用元素:span,a,i,em等
2、 浮动布局
2.1 浮动特性
1、脱标
(1)脱离标准普通流的控制(浮)移动到指定位置(动)
(2)浮动的盒子不再保留原先的位置
2、如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列
注意:浮动的元素是相互贴靠在一起的(不会有缝隙,对比inline-block会有缝隙),如果父元素装不下这些浮动的盒子,多出的盒子会另起一行
3、任何元素都可以浮动,不管原先是什么模式,添加浮动之后具有行内元素的相似特性。
如果行内元素有了浮动,则不需要转换块级\行内块元素就可以直接给高度和宽度;如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动之后,它的大小根据内容来决定。
2.2 浮动布局注意点
1、浮动和标准流的父盒子搭配
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列到左右位置
2、一个元素浮动了,理论上其余的兄弟也要浮动,以防止引起问题
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
2.3 清除浮动
1、由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。
2、清除浮动的本质:清除浮动元素造成的影响,清除之后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了。
3、清除浮动的方法
清除浮动本质:清除浮动元素脱离标准流造成的影响
清除浮动的策略:闭合浮动,只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。
(1)额外标签法(隔墙法)
实际工作中不常用
在浮动元素末尾添加一个空的标签
通俗易懂,书写方便但是添加许多无意义的标签,结构化较差
注意:要求这个新的空标签必须是块级元素
如
<div style="clear"></div>
(2)父级添加overflow:hidden属性
overflow:hidden/auto/scroll
优点:代码简洁;缺点:无法显示溢出的部分
(3)父级添加after伪元素
方式是额外标签法的升级版
优点:没有增加标签,结构更简单;缺点:照顾低版本浏览器
.clearfix:after{
content:"";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.clearfix{
*zoom:1;
}
(4)父级添加双伪元素
.clearfix:before,.clearfix:after{
content:"";
display:table;
}
.clearfix:after{
clear:both;
}
.clearfix{
*zoom:1;
}
3、 定位布局
3.1 静态定位 position:static
默认的定位方式,按照标准流摆放
3.2 相对定位 position:relative
1、元素在移动位置的时候,是相对于它原来的位置来说的
2、不脱标,继续保留原来的位置
3.3 绝对定位 position:absolute
1、如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
2、如果祖先元素有定位(相对、绝对、固定),则以最近一级的有定位的祖先元素为参考点移动位置
3、绝对定位不再占有原先的位置(脱标)
子绝父相:大多数时候因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,因此是绝对定位
3.4 固定定位 position:fixed
1、以浏览器的可视窗口为参照点移动元素
跟父元素没有任何关系,不随滚动条滚动
2、固定定位不占有原先的定位
3.5 粘性定位 position:sticky
粘性定位是相对定位和固定定位的组合,跟页面滚动搭配使用,兼容性较差,IE不支持
1、以浏览器的可视窗口为参考点移动元素(固定定位特点)
2、粘性定位占有原先的位置(相对定位特点)
3、必须添加top、left、right、bottom其中一个才有效
3.6 定位的叠放顺序
数字后面不能加单位
只有定位的盒子才有z-index属性
3.7 定位的扩展
1、绝对定位的盒子居中
加了绝对定位的盒子不能通过margin:0 auto 水平居中
left:50%;让盒子的左侧移动到父级元素的水平中心位置
margin-left:-××px;让盒子向左移动自身宽度的一半
垂直方向上同理
2、定位的特殊性
绝对定位和固定定位也和浮动类似
行内元素添加绝对或固定定位,可以直接设置宽高
块级元素加绝对定位或固定定位,如果不给宽高,默认大小是内部的大小
3、脱标的盒子不会触发外边距塌陷
浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题
4、绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下面标准流的盒子,不会压住下面标准流盒子里面的文字(图片),因为浮动产生的目的最初是为了做文字环绕效果的,文字会围绕浮动元素
但绝对定位(固定定位)会完全压住下面标准流的所有内容
四、伸缩盒布局
父元素中常用的属性display:flex 设置父元素是一个弹性盒,子元素会自动水平排列
flex容器:使用display:flex就是flex容器
项目:flex容器中的子元素就是项目,不包括孙子元素
默认主轴方向排列,即横向
flex-容器的属性:
(1)display属性
作用:指定flex属性
取值:flex | inline-flex
flex:将对象作为弹性伸缩盒展示,相当于块级属性,有默认宽度100%
inline-flex:将对象作为内联块级弹性伸缩盒展示,即行级元素,没有默认宽度
(2)flex-direction
作用:指定容器的主轴方向,主轴默认为水平向右方向,项目排列的方向
取值:row | row-reverse | column | column-reverse
row:默认值,主轴横向往右排列
row-reverse:主轴横向往左反向排列
column:垂直方向排列
column-reverse:垂直方向反向排列
(3)justify-content属性
作用:属性定义了项目在主轴上的对齐方式
取值:flex-start | flex-end | center | space-between | space-around
flex-start:默认的是从主轴开始位置对齐
flex-end:默认的是从主轴结束位置对齐
center:居中对齐,项目形成的总宽度不变
space-between:两端对齐,中间间隔宽度一样
space-around:所有项目的两侧间隔相等,主轴两端会留边
space-evenly:等分空余空间给每个元素 (4)align-items属性
作用:定义元素交叉轴上的对齐方式
取值:flex-start | flex-end | center | baseline | stretch
flex-start:交叉轴的开始位置对齐
flex-end:交叉轴的结束位置堆砌
center:交叉轴居中
baseline:基线对齐,文字第一行对齐
stretch:(单词意思是弹性、拉伸)默认值!!如果项目未设置高度或者设置为auto,将沾满整个容器的高度(自动填充)
如果flex-item没有设置高度,那么flex-item的高度不像以前那样他的高度由内容决定,而是他的高度会拉伸和父元素一样。 (5)flex-wrap
作用:描述如果一个轴线排列不下,如何换行
取值:nowrap | wrap | wrap-reverse
nowrap:默认不换行,会压缩子元素
wrap:换行,第一行在上方
wrap-reverse:换行,第一行在下方 (6)flex-flow
作用:是flex-direction和flex-wrap和合并缩写形式
取值:flex-direction || flex-wrap
// 下方写法一和写法二效果一样:
// 写法一
.box {
flex-flow: row wrap;
}
// 写法二 .box { flex-direction: row; flex-wrap: wrap; } (7)align-content 作用:定义了交叉轴线上的排列方式 说明:如果项目只有一个轴线(一行),该属性不起作用,如果wrap换行了,那么才有作用 取值:flex-start | flex-end | center | space-between | space-around | stretch flex-start:所有轴线都是从头开始,交叉轴开始位置开始,主轴横轴的话,就是上对齐 flex-end:从尾开始,交叉轴结束位置开始 center:所有从中间开始 space-between:多条轴线上下两端对齐 space-around:多条轴线上下两端分散对齐,上下两侧留白 space-evenly:等分空余空间给每个元素 stretch:默认!高度自动填充拉伸 这里参考justify-content 看看吧,只不过把主轴换成了交叉轴
Flex-项目的属性:
项目的属性规定的是项目在flex容器中的属性
order
flex-grow 可以设置三个值,第一个值为占比,第二个值为缩小比例(当子元素宽度和超过总宽度时可设置),第三个值为设定的最小宽度。
flex-shrink
flex-basis
flex
align-self (1)order
作用:定义项目的排列顺序
取值:integer (2)align-self
作用:允许项目有和其他项目不一样的对齐方式,可以覆盖父元素的align-items属性
取值:和align-items多了个auto
默认值为auto,表示继承align-items属性 (3)flex-grow
作用:定义项目的放大比例,默认是0,即如果存在剩余空间,也不放大。
取值:> 0
默认值为0,默认不会自动放大
如果都设置为1,那么所有项目会平分剩余的空间
如果有三个元素,一个设置为2,剩余为1,那么项目2的就会占一半,剩下两个会各占四分之一。
如果有三个元素,一个width设置为200,剩余都为1,那么剩余的会平分固定宽度200之外的空间
最终尺寸不得大于max-width和max-height (4)flex-shrink
作用:定义项目的缩小比例,和grow相反
取值:>0
默认值为1,默认会自动缩小
如果所有项目都为1,当空间不足时候,都会等比例缩小
如果有一个项目为0,其他都为1,当空间不足时候,0不变,1都缩小
最终尺寸不得小于min-width和min-height (5)flex-basis
用来设置flex items在主轴方向上的base size
auto 默认值、具体的宽度数值
决定flex items最终base size的因素、优先级从高到低
max-width|max-height|min-width|min-height
flex-basis
width|height
内容本身的size (6)flex
作用:flex-grow、flex-shrink、flex-basis的简写
默认值:0 1 auto;
单值语法:值必须为以下其中之一:
1、一个无单位数:他会被当做flex-grow的值。
2、一个有效的宽度值:他会被当做flex-basis的值。
3、关键字none,auto或initial。
双值语法:第一个值必须为无单位数,并且它会被当做flex-grow的值
第二个值必须为以下之一:
1、一个无单位数:它会被当做flex-shrink的值。
2、一个有效的宽度值:它会被当做flex-basis的值。
三值语法:
第一个值必须为一个无单位数,并且它会被当作flex-grow的值。
第二个值必须为一个无单位数,并且它会被当作flex-shrink的值。
第三个值必须为一个有效的宽度值,并且它会被当作flex-basis的值。
五、栅格布局(框架)
5.1响应式开发原理:
1、 利用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。
2、响应式需要一个父级作为布局容器,来配合子级元素来实现变化效果。
5.2优点:
1、标准化的html+css编码规范
2、提供了一套简洁、直观、强悍的组件
3、有自己的生态圈,不断的更新迭代
4、让开发更简单,提高了开发的效率
5.3使用Bootstrap步骤:
1、创建文件夹结构
2、创建html骨架结构
3、引入相关样式文件
4、书写内容
直接拿bootstrap预先定义好的样式来使用
修改bootstrap原来的样式,注意权重问题
学好bootstrap的关键在于知道它定义了哪些样式,以及这些样式能实现什么样的效果
5.4布局容器
1、container类
响应式布局的容器 固定宽度
大屏(>=1200px)宽度为1170px
中屏(>=992px)宽度为970px
小屏(>=768px)宽度为750px
超小屏(100%)
2、container-fluid类
流式布局容器 百分百宽度
占全部视口的容器
适合于单独做移动开发