布局相关的一些基础
css 布局 前端
float 浮动:
通过浮动可以使一个元素向其父元素的左侧或右侧移动
--使用float属性来设置元素的浮动
可选值:
--none 默认值,元素不浮动
--left 元素向左浮动
--right 元素向右浮动
元素设置浮动以后 水平布局的等式便不需要强制成立了
元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置,所以元素下边的还在文档流中的文素会自动向上移动
浮动的特点:
1.浮动元素会完全脱离文档流,不再占据文档流中的位置
2.设置浮动以后,元素会向父元素的左侧或右侧移动
3.浮动元素默认不会从父元素中移出
4.浮动元素向左或向右移动时,不会超过它之前的其他浮动元素
5.浮动元素不会超过它上面浮动的兄弟元素 最多一样高
浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围
所以可以设置文字环绕图片的效果
元素设置浮动以后,将会从文档流中脱离,元素的一些特点也会发生变化:
脱离文档流的特点:
块元素:
--1.块元素不再独占页面的一行
--2.宽度和高度默认都被内容撑开
行内元素:
--行内元素脱离文档流之后 特点与块元素相同 可以设置宽高
脱离文档流之后 不需要区分块元素 和 行内元素
高度塌陷问题:
在浮动布局中 父元素的高度默认被子元素撑开时,当子元素浮动后,其从文档流中脱离,将会无法撑起父元素的高度,导致父元素的高度丢失。
处理方法:
1.BFC 块级格式化环境
-- BFC 是一个css中一个隐含的属性 可以为一个元素开启BFC 开启BFC后该元素会变成一个独立的布局区域
-- 元素开启BFC后的特点:
1.开启BFC的元素不会被浮动元素所覆盖
2.开启BFC的元素 子元素和父元素外边距不会重叠
3.开启BFC的元素可以包含浮动的子元素
-- 可以通过一些特殊方式来开启元素的BFC:
1.设置元素的浮动(不推荐)
2.将元素设置为行内块元素(不推荐)
3.将元素的overflow设置为一个非visible的值
常用 overflow:hidden 开启BFC 以使其可以包含浮动元素
2.使用clear属性
如果不希望某个元素因为其他元素浮动的影响而改变位置,可以通过
clear属性来清除浮动元素对当前元素所产生的影响
clear
--作用:清除浮动元素对当前元素所产生的影响
--可选值:
--left 清除左侧浮动元素对当前元素的影响
--right 右侧
--both 清除两侧中较大影响的那一侧
--原理:
设置清除浮动以后,浏览器自动为元素添加一个上外边距,使其位置不受其他元素的影响
eg:使用伪元素在父元素最后添加一个块元素,设置其clear属性,使浏览器为这个元素添加一个上外边距,此时父元素被撑开,就解决了高度塌陷的问题。
<div class="outer">
<div class="inner">
</div>
</div>
.outer{
border:10px solid red;
}
.outer:after{
content:'';
clear:both;
display:block;
}
.inner{
background:#bfa;
height:100px;
width:100px;
float:left;
}
同时引入一个点,解决父子元素外边距重叠也可以使用类似的方法:
.clearfix::before,
.clearfix::after{
content:'';
display:table;
clear:both;
}
此时clearfix 这个类可以同时解决 高度塌陷 以及 父子元素外边距重叠问题。
position 定位
通过定位可以将元素摆放到页面的任意位置
使用position属性来设置定位
可选值:
static 默认值,元素是静止的没有开启定位
relative 开启元素的相对定位
absolute 开启元素的绝对定位
fixed 开启元素的固定定位
sticky 开启元素的粘滞定位
相对定位:
当元素的position属性值设置为relative时 则开启了元素的相对定位
相对定位的特点:
1.元素开启相对定位以后,如果不设置偏移量,元素不会发生任何的变化
2.相对定位是参照于元素在文档流中的位置进行定位的
3.相对定位会提升元素的层级
4.相对定位不会使元素脱离文档流,不会改变元素的性质,块还是块,行内还是行内
偏移量(Offset)
当元素开启定位之后,可以通过偏移量来设置元素的位置
top bottom left right
绝对定位
当元素的position属性值设置为absolute时 则开启了元素的相对定位
绝对定位的特点:
1.元素开启绝对定位以后,如果不设置偏移量,元素的位置不会发生变化
2.开启绝对定位后,元素会从文档流中脱离
3.绝对定位会改变元素的性质,行内变成块,快的宽高默认被内容撑开
4.绝对定位会提升元素的层级
5.绝对定位元素使相对于其包含块进行定位的
包含块(containing block):
正常情况下:
--包含块就是离当前当元素最近的祖先块元素
绝对定位的包含块:
--包含块就是离它最近的开启了定位的祖先元素
如果所有的祖先元素都没有开启定位,则根元素就是它的包含块
- html(根元素、初始包含块)
固定定位:
当元素的position属性值设置为fixed时 则开启了元素的固定定位
固定定位也是一种绝对定位,多以大部分特点与绝对定位一样
--唯一不同的是固定定位永远参照于浏览器的视口进行定位 固定定位的元素不会随网页的滚动条滚动
粘滞定位
当元素的position属性值设置为sticky时 则开启了元素的粘滞定位
和相对定位的特点基本一致
不同的是粘滞定位可以在元素到达某个位置时将其固定,由于兼容性问题,一般不使用。
绝对定位absolute水平方向的特点:
left + margin-left/right + border-left/right + padding-left/right + width = 包含块内容区的宽度,比普通的块元素多了两个值 left和right
可以设置auto的值:
-- margin width left right
当发生过度约束时,如果没有值为auto,则自动调整right值使等式满足,如果有auto的值,则调整值为auto的属性。
垂直方向也必须满足等式
top + margin-top/bottom + border-top/bottom + padding-top/bottom + height = 包含块内容区的高度
eg:元素在包含块内上下左右完全居中
.box1{
position:relative;
height:200px;
width:200px;
background: #bfa;
}
.inner{
width:100px;
height:100px;
margin:auto;
background: tomato;
position:absolute;
right:0;
left:0;
bottom:0;
top:0;
}
对于开启了定位的元素,可以通过z-index属性来指定元素的层级
z-index需要一个整数作为参数,值越大元素层级越高
层级一样时,优先显示靠下的元素。