Web布局:标准流,浮动,定位

元素显示模式(display)

元素显示模式就是元素(标签)以什么方式进行显示,比如

自己占一行,比如一行可以放多个

HTML元素一般分为两类:块元素,行内元素

块元素(display:blcok)

元素独占一行,一行只能放一个的元素(标签)叫块元素

常见块元素有:<h1>~<h6><p><div><ul><ol><li>等,其中<div>为常见块元素

特点

  • 独占一行
  • 高度,宽度,外边距及内边距都可以控制
  • 宽度是默认容器(父级宽度)的100%
  • 是一个容器及盒子,里面可以放行内或块级元素
    文字类的元素内不能放其它块级元素

行内元素(display:inline)

元素不独占一行,一行可以放多个元素(标签)的HTML标签叫行内元素

常见行内元素有:<a><strong><b><em><i><del><s><ins><u><span>等,其中<span>为常见行内元素

特点

  • 相邻行内元素在一行上,一行可以显示多个
  • 高度,宽度,设置是无效的
  • 宽度是它本身内容的宽度
  • 行内元素只能容纳稳步或者其它行内元素
    链接内不能再放链接
    特殊情况行内元素a里面可以放块级元素,但是需要给a转换一下为块级模式更安全

行内块元素(display:inline-block)

同时具有块元素和行内元素特点的叫行内块元素

常见行内块元素有:<img/><input/><td>

特点

  • 和相邻行内元素(行内块)在一行上,但他们之间会有空白间隙。一行可以显示多个(行内元素特点)
  • 高度,宽度,外边距及内边距都可以控制(块元素特点)
  • 宽度是它本身内容的宽度(行内元素特点)
元素模式元素排列设置样式默认宽度包含
块元素一行放一个快元素可以设置宽高容器的100%容器级可以包含任何标签
行内元素一行放多个行内元素不可以设置宽高本身内容的宽度容纳文本或者其它行内元素
行内块元素一行放多个行内块元素可以设置宽高本身内容的宽度

元素显示模式的转换

特殊情况我们需要元素模式的转换,简单理解:一个元素需要另一个模式的特性。
比如想要增加标签a的触发范围,a本身为行内元素不能设置宽高。但是我们通过模式转换,将a转为行内块元素。这时我们就可以设置a标签的宽高了。

<style>
	.sildr-a {
    	color:grey;
    	text-decoration: none;/*移除链接怼下划线*/
    	height: 56px;
    	width: 100px;
    	font-size: 13px;
    	display: block;/*把行内元素a 转为块元素*/
	}
</style>

 <a href="#" class="sildr-a"> 系统管理</a>

CSS三大特性

层叠性

相同选择器给设置相同的样式,此时一个样式就会覆盖另一个冲突的样式。那个样式离结构近就显示哪个样式,不冲突的样式不会层叠并且同时起作用。(CSS代码按由上到下的顺序执行,所以行号越大的代码离结构就越近)

继承性

子标签会继承父标签的某些样式,如文本颜色和字号。
(text-,font-,line-这些元素开头的都可以继承,以及color属性)

行高的继承

<style>
	body {
		font:12px/1.5 Micorsoft YaHi;
	}
	div{
		font-size:14px;/*这个1.5就是当前元素文字大小font-size的1.5倍*/
	}
</style>
<body>
	<p>文字的行高</p>
<body>

行高可以跟单位也可以不跟单位。
如果子元素没有设置行高,则会继承父元素行高的1.5倍

优先级

当同一个元素指定多个选择器,就会有优先级的产生

当选择器相同,则执行层叠性;选择器不同,则根据选择器权重大小执行。复合选择器的权重会叠加
在这里插入图片描述

盒子模型(Box Model)

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
在这里插入图片描述
不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

给盒子指定padding值后,内容和边框就有了距离。同时会撑大盒子;
但是如果盒子本身没有指定宽高属性,padding就不会撑大盒子

水平居中显示

盒子水平居中显示:盒子必须指定宽度,合作左右的外边距都设置为auto

.center{width:100px;margin:0 auto;}

以上方法是让块元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-aligen:center即可。

外边距合并问题

相邻块元素垂直外边距的合并

当上下相邻的两个块元素(兄弟关系)相遇时。如果上面的元素有下外边距margin-botton,下面的块元素有上边距margin-top.则他们之间的垂直间距不是margin-botton+margin-top的和。而是取两个值之间的最大值。

嵌套块元素坍塌

对于两个嵌套关系(父子关系)的块元素,父元素上有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。(表现为子元素的上外边距值设置不起作用,而父元素的上外边距值变大)

解决方案:

1:为父元素定义上边框 border-top: 1px solid rgb(184, 184, 167)。(撑大盒子1PX)
2:为父元素定义内边距 padding-top: 1px。(撑大盒子1PX)
3:为父元素添加overflow:hidden。(触发bfc ,不会撑大盒子)

清除内外边距

网页元素很多都带有默认的内外边距,而且不同的浏览器默认的也不一致。因此我们布局前,首先要清楚下网页元素的内外边距

*{
	padding:0; /*清除内边距*/
	margin:0;  /*清除外边距*/
}

网页布局准则:多个块元素纵向排列找标准流,多个块元素横向排列找浮动

标准流

1:块元素会独占一行,从上往下顺序排列
2:行内元素会按顺序排列,从左向右顺序排列,碰到父元素边缘则自动换行

可用让盒子上下或者左右排列,垂直的块级盒子显示就用标准流布局

浮动(float:laft)

float属性用于创建浮动框,将其移动到一边,直到左、右边缘触及父元素或另一个浮动框的边缘

可以让块级别元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局

作用:让多个块元素一行内排列显示

divdivdiv

特点

1:浮动元素会脱离标准流,移动到指定位置并且浮动的盒子不再保留原先的位置

2:浮动的元素会一行内显示并且元素顶部对齐

3:浮动的元素会具有行内块元素的特性(任何元素都可以添加浮动,并且添加后都具有行内块元素的特性)

浮动布局注意点

1:浮动和标准流的父盒子搭配使用
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置

2:一个元素浮动了,理论上其余的兄弟元素也要浮动
一个盒子里有多个子盒子,如果其中一个盒子浮动了。那么其他兄弟也应该浮动,以防止引起问题

清除浮动(clear:both)

当父元素的高不固定时,子元素使用浮动时父元素高度会变为0px。为了解决该问题。可以采取清除浮动的方式来解决。(相当于iOS中的动态高度问题)

额外标签法

在子元素后面添加一个空div,利用css提供的clear:both清除浮动,让父级div能自动获取到高度

.clear {
	clear:both;
}

父级添加overflow属性

给父元素添加overflow,将其属性设置为hidden ,auto或scroll。

父级添加after伪元素

.clearfix:after {
	display:block;
	clear:both;
	content:"";
	visibility:hidden;
	height:0
}
 .clearfix{
 	zoom:1
 }

父级添加双伪元素

.clearfix:before,.clearfix:after {
	content:"";
	display:table;
}
.clearfix:after {
	clear:both;
}
 .clearfloat{
 	zoom:1
 }

定位(position)

将盒子定在某个位置,所以定位也是摆放盒子,按照定位的方式移动盒子。
定位= 定位模式 + 边偏移

定位最大特点是层叠的概念,就是可以让多个盒子前后堆叠来显示,如果元素需要自由在某个盒子内移动就用定位布局

静态定位:static

静态定位是元素的默认定位方式,无定位的意思
语法:

选择器 { position:static; }
/*静态定位按照标准流特效摆放,它没有边偏移*/

相对定位:relative

元素在移动位置的时候,是相对于它原来的位置来说的。

特点:
1:它相对于自己原来位置来移动的(移动位置的时候参照点是自己原来的位置)

2:原来在标准流的位置继续占有,后面的盒子依然以标准流对待它。(不拖标,继续保留原来位置)

绝对定位:absolute

元素在移动位置的时候,是相对于它的祖先元素来说的。

特点:
1:如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位。
2:如果祖先元素有定位(相对,绝对,固定定位),则以最近一级有定位祖先元素为参考点移动位置
3:绝对定位不再占用原来的位置(脱标)

子绝父相

子元素使用决定定位的时候,父元素使用相对定位。通过这种方式将子元素约束在父元素里面

使用例子:广告轮播图

固定定位:fixed

固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时元素位置不会改变

.dj {
	position:fixed;
	top:10px;
	letf:50px;
}
<div class="dj">
	<img src="images/pvp.png" alt="" />
</div>

粘性定位:sticky

粘性定位可以被认为是相对定位和固定定位的混合(跟iOS的tableview头部悬停一样的效果)

特点:
1:以浏览器的可视窗口为参照点移动元素(固定定位特点)
2:粘性定位占有原来的位置(相对定位的特点)
3:必须添加top left right botton其中一个才生效

跟页面滚动搭配使用。兼容性差,IE不支持

在这里插入图片描述

定位叠放次序:z-index

定位特殊性:

1: 行内元素添加绝对或固定定位,可以直接设置宽度和高度

2:块级元素添加绝对定位或固定定位。如果不给宽度或者高度,默认大小是内容的大小。

3:脱标的盒子不会触发外边距塌陷

浮动元素,绝对定位(固定定位)元素都不会触发外边距合并的问题

元素的显示和隐藏

display显示隐藏元素

display:none;隐藏对象
display:block;除了转换为块级元素之外,同时还有显示元素的意思

display隐藏元素后,不再占有原来的位置。

visibility显示隐藏元素

visibility:hidden;元素隐藏
visibility:visible;元素可视

visibility隐藏元素后,继续占有原来的位置。

overflow溢出显示隐藏

overflow:hidden;不显示超出对象尺寸的内容,超出部分隐藏掉
overflow:visible;不剪裁内容也不添加滚动条
overflow:scroll;不管内容是否超出,总是显示滚动条
overflow:auto;超出自动显示滚动条,不超出不显示滚动条

以上内容均整理自视频

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页