CSS布局


浮动

float:left/right/both
设置浮动后,脱离正常文档流,不会覆盖文字,文字形成环绕效果。其高度不会加到父元素上(需要将一个元素放置在主容器末尾,对其使用clear属性,将其拓展到浮动元素下方,即可实现父元素背景包含浮动元素的效果)
clear:该元素某边不允许出现浮动元素

.clearfix::before
.clearfix::after{
	display:table;
	content:" "; //防止外边距折叠
}
.clearfix::after{
	clear:both; //伪元素清除所有浮动
}

浮动陷阱


如图,1,2号媒体盒子存在高度差,导致3号盒子无法另起一行排列,解决方法:在奇数媒体盒子上添加clear:left

.media:nth-child(odd){
	clear:left;
}
//nth-child选择器选择奇数盒子

BFC(块级格式化上下文)

BFC本身属于环绕文档流一部分,但其将内部内容与外部上下文分隔开,BFC中内容不会与外部的元素相互影响

创建BFC的属性
float:left,right
overflow:hidden,auto,scroll
display:inline-block,table-cell,flex
position:absolute,fixed

FLexbox

display:flex
该元素变成了一个弹性容器,直接子元素变成弹性子元素。子元素默认从左到右依次排列,弹性容器填满宽度(子元素不一定),弹性子元素高度相等,高度由其内容决定。

弹性容器属性


弹性方向:
flex-direction:column/row-reverse/column-reverse,改变主轴方向,副轴随主轴改变

弹性子元素属性

在这里插入图片描述
flex:1 1 0%(默认值)(grow,shrink,basis)

flex-basis
定义元素大小的基准值,包括px,em,百分比
flex-grow
在flex-basis确定后,弹性子元素的值不一定填满弹性容器的宽度,多余出来的空白部分会根据flex-grow(成长因子) 分配给每个弹性子元素
flex-shrink
在flex-basis确定后,若子元素的值超过了弹性容器的宽度,flex-shrink会根据子元素的值进行收缩至不再溢出

网格布局

display:grid
作用于两级的DOM结构,100%填充可用宽度,

.grid{
	display:grid;
	grid-template-columns:1fr 1fr 1fr; //定义等宽的三列
	grid-template-rows:1fr 1fr; //定义等高的两行
	grid-gap:0.5em;//单元格之间加入间隔
}

repeat()函数

repeat(2,2fr,1fr) 等价于 2fr 1fr 2fr 1fr

网格线编号

.main{
	grid-column:1/2;
	grid-row:3/5;
}
// 将main元素放置于第一列第三行

网格线代替语法:

//命名的网格线
.grid{
	display:grid;
	grid-template-columns:[start] 2fr [center] 1fr [end]; 
	// 将三列网格线分别命名为start,center,end
}
//命名网格区域
.containr{
	display:grid;
	gird-template-areas:”title title“
									   “nav nav”
									   “main aside1”
									   “main aside2”;									   
	grid-template-columns:2fr 1fr; 		//定义相同大小的网格区域
	grid-template-rows:repeat(4,auto);
}

相较于flex的优点:
flexbox可以通过wrap换行,但下一行元素无法和上一行元素对齐,grid可以保证二维的对齐

隐式网格

若网格元素放在声明的网格轨道之外,会创建隐式网格,直到包含该元素

.portfolio{
	display:gird;
	grid-template-columns:repeat(auto-fill,minmax(200px,1fr);
	// auto-fill 尽可能多的生成轨道 
	//minmax限制了最大最小值,最小宽200px,上限为1fr
	//auto-fit 将非空轨道拓展,填满可用空间
	grid-auto-rows:1fr;
	//将隐式轨道大小设为1fr
	//grid-auto-flow:column dense 
	//自动布局算法 自动紧凑的按列填满空白 可用于实现照片墙

object-fit属性:

fill:自动缩放,以填满盒子;
cover:扩展,以填满盒子,部分被剪裁;
contain:缩放,完整的填满盒子,但出现空白

特性查询:
当某浏览器支持某样式时,该样式才生效

@support(display:grid){
 	...
 }

网格布局的对齐

align-items:网格项目元素在单元格中的垂直呈现方式,是垂直拉伸显示,还是上中下对齐
justify-items:网格项目元素在单元格中的水平呈现方式,是水平拉伸显示,还是左中右对齐
align-self,justify-self作用于单个元素

定位和层叠上下文

固定定位(让元素相对于视口定位)

position:fixed;固定元素脱离文档流,不再影响其他元素的位置

.modal{
	position:fixed;
	top:3em;
	bottom:3em;
	right:20%;
	left:20%;
	//通过 top,bottom,right,left设置主体定位
	rgba(0000.5//第四个值 设置透明度
	}

绝对定位(相对于最近的祖先定位元素)

.modal{
	position:absolute;
	top:3em;
	right:3em;
	}

若祖先元素未定位。绝对定位元素会基于初始包含块定位

相对定位

position:relative 开启相对定位
1.不设置偏移量时,元素不会发生变化
2.相对于元素在文档流中原来的位置进行定位(不会脱离文档流,但提升一个层级)

z-index

浏览器绘制元素时,会先绘制所有非定位的元素,再绘制定位元素(定位元素间层叠关系不改变),这会导致定位元素和源码的层叠关系不一。z-index可以控制层叠顺序,控制x-y-z坐标系中的深度方向,拥有较高的z-index出现在较低的z-index前面,负数的z-index元素出现在静态元素之后。

.modal-backdrop{
	position:fixed;
	top:0;
	right:0;
	bottom:0;
	left:0;
	z-index:1;
	//将蒙版拉到没有设置z-index的元素之前

!!!! z-index只在定位元素上生效,不能用于控制静态元素,给定位元素加入z-index可创建层叠上下文

层叠上下文(决定元素的前后出现顺序)

一个层叠上下文包含一个元素,或由浏览器一起绘制的一组元素。其中一个元素作为层叠上下文的根,给一个定位元素加上z-index的时候,它会变成一个新的层叠上下文的根,所有后代元素属于层叠上下文的一部分。

所有层叠上下文内的元素会按照以下顺序,从后往前叠放:
层叠上下文的根
z-index为负的定位元素(及其子元素)
非定位元素
z-index为auto的定位元素(及其子元素)
z-index为正的定位元素(及其子元素)

粘性定位(相对,固定定位的结合)

元素随页面滚动,当达到屏幕特定位置时,若用户继续滚动,该元素会锁定在该位置(侧边栏导航)。该元素不会超出父元素的范围。

.affix{
	position:sticky;
	top:1em;
}

响应式设计

响应式设计三大原则:

  • 移动优先,先构建移动版布局再实现桌面布局
  • @media原则(媒体查询),为不同大小的视口定制样式
  • 流式布局,允许容器根据视口宽度缩放尺寸

meta标签:

<meta name = "viewport"
content = "width=device-width,initial-scake=1">
//为移动端响应式设计添加视口标签

媒体查询(遵循选择器优先级与源码顺序):

@media(min-width:560px){
	.titile>h1{
		font-size:2.25rem;
	}
}
//当视口宽度大于560px时,会给标题设置2.25rem的字号

断点:
特殊临界值,当屏幕尺寸达到这个值时,网页样式会发生改变

.title{
	...
}
//移动端样式,对所有断点均生效
@media(min-width:35em){
	.titile{
		...
	}
}
//中等屏幕断点,覆盖移动端样式
@media(min-width:50em){
	.titile{
		...
	}
}
//大屏幕断点,覆盖中小屏幕的样式
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值