布局相关的一些基础

布局相关的一些基础


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需要一个整数作为参数,值越大元素层级越高
		层级一样时,优先显示靠下的元素。
© 2025 Niko Xie