元素显示模式
.1什么是元素显示模式
元素显示模式就是元素(标签)以什么方式进行显示,比如<div>自己占一行,一行可以放多个<span>。
作用:网页标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。
分类:html元素一般分为块元素和行内块元素两种类型。
.2块元素
常见的块元素有h1-h6、p、div、ul、ol、li等,其中div标签是最典型的块元素。
特点:
- 比较霸道,自己独占一行。
- 高度,宽度,外边距和内边距都可以控制。
- 宽度默认是容器(父级宽度)的100%。
- 是一个容器,里面可以放行内元素或者块级元素。
注意: - 文字类的元素内不能使用块级元素。
- p标签主要用于存放文字,因此p里面不能放块级标签,特别不能放div。
- 同理,h1-h6等都是文字类块级标签,里面也不能放其他块级元素。
.3行内元素
常见的行内元素有a、strong、b、em、i、del、s、ins、u、span等,其中span标签是最典型的行内元素。有的地方也将行内元素成为内联元素。
特点:
- 相邻的行内元素在一行上,一行可以显示多个。
- 高、宽直接设置是无效的。
- 默认宽度就是它本身内容的宽度。
- 行内元素只能容纳文本或其他行内元素。
注意: - 链接里面不能再放链接。
- 特殊情况链接a里面可以放块级元素,但是给a转换一下块级模式最安全。
.4行内块元素
在行内元素中有几个特殊的标签——img、input、td,他们同时具有块元素和行内元素的特点,有些资料称他们为行内块元素。
特点:
- 和相邻行内元素(行内块)在一行上,但是他们之间会有空白间隙。一行可以显示多个(行内元素特点)。
- 默认宽度就是它本身内容的宽度(行内元素特点)。
- 宽度、行高、外边距和内边距都可以控制(块级元素特点)。
.5元素显示模式总结
元素模式 元素排列 设置样式 默认宽度 包含 块级元素 一行只能放一个块级元素 可以设置宽度和高度 容器的100% 容器级可以包含任何标签 行内元素 一行可以放多个行内元素 不可以直接设置宽度高度 它本身内容的宽度 容纳文本或者其他行内元素 行内块元素 一行放多个行内块元素 可以设置宽度和高度 它本身内容的宽度 .6元素显示模式转换
特殊情况下,我们需要元素模式的转换,简单理解就是一个模式的元素需要另外一种模式的特性,比如想要增加链接a的触发范围。
- 转换为块元素:display:block;
- 转换为行内元素:display:inline;
- 转化为行内块元素:display:inline-block。
页面布局整体思路
为了提高页面制作的效率,布局时通常有以下的整体思路:
1.必须明确页面的版心(可视区),我们测量可得知;
2.分析页面中的行模块,以及每个行模块中的冽模块—页面布局第一准则;
3.一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置—页面布局第二准则。
制作页面时,先理清楚布局结构,再写代码尤为重要;写代码时,我们遵循先有结构,后有样式的原则,结构永远最重要。页面布局三大核心:盒子模型、浮动、定位:
0:网页布局
网页布局的本质:用css来摆放盒子,把盒子摆放到相应位置。css提供了三种传统的布局方式,即:普通流(标准流)、浮动、定位。这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。标准流:
所谓标准流,就是标签按照规定好的默认方式排列。
1.块级元素独占一行,从上向下顺序排列。常用的有div、hr、p、h1-h6、ul、ol、dl、form、table等。
2.行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素有span、a、i、em等。网页布局过程:
1.先准备好相关的网页元素,网页元素基本就是盒子box;
2.利用css设置好盒子模式,然后摆好到相应位置;
3.往盒子里面装内容。1:盒子模型
1.1:盒子模型组成
所谓盒子模型,就是把html页面中的布局元素看作一个矩形的盒子,也就是一个盛装内容的容器。css盒子模型本质上是一个盒子,封装周围的html元素,它包括:边框(border)、外边距(margin)、内边距(padding)和实际内容(content)。
1.2:边框(border)
border可以设置元素的边框。边框有三部分组成:边框宽度、边框样式、边框颜色。
border: border-width border-style border-color;
属性 作用 border-width 定义边框宽度,单位是px。 border-style 边框的样式。 border-color 边框颜色。
1:边框的复合写法:border:1px solid red;(没有顺序)
2:边框的分开写法:
border-top:1px solid red; border-bottom:1px solid red; border-left:1px solid red; border-right:1px solid red;
表格的细线边框:
border-collapse属性控制浏览器绘制相邻单元格边框的方式。
border-collapse:collapse;
- collapse单词是合并的意思。
- border-collapse:collapse;表示相邻边框合并在一起。
注意:
边框会影响盒子的实际大小,即边框会额外增加盒子的实际大小。我们的解决方案有两种:
1.测量盒子大小的时候不量边框;
2.手动改变边框的大小,即在width/height中减去边框的大小。1.3:内边距(padding)
padding属性用于设置内边距,即边框与内容之间的距离。
属性 作用 padding-left 左内边距 padding-right 右内边距 padding-top 上内边距 padding-bottom 下内边距 内边距复合写法:
padding简写属性可以有一到四个值。
值的个数 表达意思 padding:5px 1个值,代表上下左右都是5px内边距。 padding:5px 10px 2个值,代表上下内边距是5px,左右内边距是10px。 padding:5px 10px 20px 3个值,代表上内边距是5px,左右内边距是10px,下内边距是20px。 padding:5px 10px 20px 30px 4个值,上5右10下20左30,顺时针。 注意:
1.当我们给盒子指定padding值之后,发生了两件事:
(1).内容和边框之间有了距离,添加了内边距;
(2).padding影响了盒子实际的大小。
也就是说,如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子。
解决方案:手动改变边框的大小,即在width/height中减去内边距的大小。
2.如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小。1.4:外边距(margin)
margin属性用于设置外边距,即控制盒子和盒子之间的距离。
属性 作用 margin-left 左外边距 margin-right 右外边距 margin-top 上外边距 margin-bottom 下外边距 margin简写方式代表的意义和padding完全一致。
外边距典型应用:
外边距可以让块级盒子水平居中,但是必须满足两个条件:
1.盒子必须指定了宽度(width);
2.盒子左右的外边距都设置为auto。.header{ width:960px;margin:0 auto;} .header{ width:960px;margin:auto;} .header{ width:960px;margin-left:auto;margin-right:auto;}
注意:以上方法都是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加text-align:center即可。
外边距合并
使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。
1.相邻块元素垂直外边距的合并
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom和margin-top之和,而是取两个值中较大者。
解决方案:尽量只给一个盒子添加margin值。
2.嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
解决方案:可以为父元素定义上边框;可以为父元素定义上内边距;可以为父元素添加overflow-hidden;绝对定位的盒子不会有塌陷,比如浮动、固定。清除内外边距:
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致,因此我们在布局前,首先要清除下网页元素的内外边距。
*{ margin:0; padding:0; }
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距,但是转换为块级和行内块元素就可以了。
1.5:圆角边框
border-radius属性用于设置元素的外边框圆角。
border-radius:length;
radius半径原理:(椭)圆与边框的交集形成了圆角效果。
- 参数值可以是数值或百分比的形势;
- 如果是正方形,想要设置一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%;
- 如果是个矩形,可以设置为高度的一半;
- 该属性是一个简写属性,可以跟四个值,分别为左上角、右上角、右下角、左下角;也可以跟2个值,分别为左上角和左下角、右上角和右下角;也可以跟三个值,分别为左上角、右上角和右下角、左下角;
- 分开写:border-top-left-radius、border-top-right-radius、border-bottom-left-radius、border-bottom-right-radius。
1.6盒子阴影
box-shadow属性为盒子添加阴影。
box-shadow:h-shadow v-shadow blur spread color insert;
值 描述 h-shadow 必需。水平阴影的位置,允许负值。 v-shadow 必需。垂直阴影的位置,允许负值。 blur 可选。模糊程度。 spread 可选。阴影的尺寸。 color 可选。阴影的颜色。 inset 可选。将外部阴影(outset)改为内部阴影(inset)。 注意:
1.默认是外阴影,但是不可以写这个单词,否则导致阴影无效。
2.盒子阴影不占用空间,不会影响其他盒子排列。1.7文字阴影
text-shadow属性将阴影应用于文本。
text-shadow:h-shadow v-shadow blur color;
值 描述 h-shadow 必需。水平阴影的位置,允许负值。 v-shadow 必需。垂直阴影的位置,允许负值。 blur 可选。模糊程度。 spread 可选。阴影的尺寸。 2.浮动
2.1为什么需要浮动
有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。因为浮动可以改变元素标签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。2.2什么是浮动
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
选择器{float:属性值;}
属性值 描述 none 元素不浮动(默认值) left 元素向左浮动 right 元素向右浮动 2.3浮动特性
1.浮动元素会脱离标准流的控制移动到指定的位置,俗称脱标,浮动起来的盒子不再保留原来的位置。
2.如果多个元素都浮动,则他们会按照属性值一行内显示并且顶端对齐排列。注意:浮动的元素是相互贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的元素,多出的元素会另起一行对齐。
3.浮动的元素会具有行内块元素的特性。任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后都具有与行内块元素相似的特性。
- 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定。
- 浮动的盒子中间是没有缝隙的,是紧挨在一起的。
- 行内元素同理。
2.4浮动布局注意点
1.浮动元素经常和标准流父级搭配使用。为了约束浮动元素位置,我们网页布局一般采取的策略是:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。
2.一个元素浮动了,理论上其余的兄弟元素也要浮动。即一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
注:浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。2.5清除浮动
1.为什么需要清除浮动
由于父级盒子很多情况下不方便给高度,但是子盒子浮动后又不占有位置,最后父级盒子高度为0,就会影响下面的标准流盒子。
2.清除浮动的本质
2.1清除浮动的本质就是清除浮动元素造成的影响;
2.2如果父级盒子本身有高度,则不需要清除浮动;
2.3清除浮动之后,父级就会根据浮动的子盒子自动检索高度。父级有了高度之后就不会影响下面的标准流了。
3.清除浮动选择器{clear: 属性值;}
属性值 描述 left 不允许左侧有浮动元素(清除左侧浮动的影响) right 不允许右边有浮动元素(清除右侧浮动的影响) both 同时清除左右两侧浮动的影响 在我们实际工作中,几乎只用clear:both;
4.清除浮动的方法
4.1额外标签法也称为隔墙法,是W3C公司推荐的做法;
4.2父级元素添加overflow属性;
4.3父级元素添加after伪元素;
4.4父级元素添加双伪元素。2.5—4.1额外标签法
额外标签法会在浮动元素末尾添加一个空的标签。例如<div style=“clear:both”></div>,或者其他标签(如<br />等)
优点:通俗易懂,书写方便。
缺点:添加许多无意义的标签,结构化较差。
注意:新添加的空标签必须是块级元素。2.5—4.2父级添加overflow
可以给父级元素添加overflow属性,将其属性值设置为hidden、auto或scroll。
优点:代码简洁。
缺点:无法显示溢出的部分。2.5—4.3:after伪元素法
:after方法是额外标签法的升级版,即网页自动添加了一个额外的标签,不需要手动添加额外的标签。也是给父级元素添加:
.clearfix:after{ content:""; display:block; height:0; clear:both; visibility:hidden; } .clearfix{ /*IE6、7专有,目的是兼容IE6、7。*/ *zoom:1; }
优点:没有新增标签,结构更简单。
缺点:照顾低版本浏览器。
常用网站:百度、淘宝网、网易等。2.5—4.4双伪元素清除浮动
相当于网页在子元素前后都自动添加一个额外的标签。也是给父级元素添加:
.clearfix:before,.clearfix:after { content:""; display:table; } .clearfix:after { clear:both; } .clearfix{ *zoom:1; }
优点:代码更简洁。
缺点:照顾低版本浏览器。
常用网站:小米,腾讯等。2.5—4.5清除浮动总结
方法 优点 缺点 额外标签法 通俗易懂,书写简单 添加许多无意义的标签,结构化较差 父级overflow:hidden; 书写简单 溢出隐藏 父级:after伪元素 结构语义化正确 IE6、7不支持:after,兼容性问题 父级双伪元素 结构语义化正确 IE6、7不支持:after,兼容性问题 常见网页布局
1.
2.
3.
<html> <head> <title>常见网页布局3</title> <style> *{ margin:0; padding:0; } .top{ height:50px; background-color:gray; } .banner{ width:980px; height:150px; background-color:gray; margin:10px auto; } .box{ width:980px; margin:0 auto; height:300px; } li{ list-style:none; float:left; width:237px; height:300px; background-color:gray; margin-right:10px; } .box .last{ margin-right:0; } .footer{ height:200px; background-color:gray; margin-top:10px; } </style> </head> <body> <div class="top">top</div> <div class="banner">banner</div> <div class="box"> <ul> <li>1</li> <li>2</li> <li>3</li> <li class="last">4</li> </ul> </div> <div class="footer">footer</div> </html>
3.定位
3.1为什么需要定位
浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子,而定位是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。3.2定位组成
定位=定位模式+边偏移
- 定位模式用于指定一个元素在文档中的定位方式。
- 边偏移则决定了该元素的最终位置。
3.2.1定位模式
定位模式决定元素的定位方式,它通过css的position属性来设置,其值可以分为四个:
值 语义 static 静态定位 relative 相对定位 absolute 绝对定位 fixed 固定定位 3.2.2边偏移
边偏移就是定位的盒子移动到最终位置。有top、bottom、left和right四个属性:
边偏移属性 示例 描述 top top:80px 顶端偏移量,定义元素相对于其父元素上边线的距离。 bottom bottom:80px 底部偏移量,定义元素相对于其父元素下边线的距离。 left left:80px 左侧偏移量,定义元素相对于其父元素左边线的距离。 right right:80px 右侧偏移量,定义元素相对于其父元素右边线的距离。 3.2.3static
静态定位是元素的默认定位方式,就是无定位的意思。
选择器 { position:static; }
- 静态定位按照标准流特性摆放位置,没有边偏移;
- 静态定位在布局时很少使用。
3.2.4relative
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。
选择器 { position:relative; }
- 它是相对于自己原来的位置来移动的;
- 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。(不脱标)
3.2.5absolute
绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的。
选择器 { position: absolute; }
- 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位;
- 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位的祖先元素为参考点移动;
- 绝对定位不再占有原来的位置。
子绝父相
子级是绝对定位的话,父级要用相对定位。所以相对定位经常用来作为绝对定位的父级。
- 子绝:子级绝对定位,不会占有位置,可以放在父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
- 父相:父盒子需要加定位限制子盒子在父盒子内显示,父盒子布局时需要占有位置,因此父盒子只能是相对定位。
当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝可也可能会遇到。
3.2.6fixed
固定定位是元素固定于浏览器可视化的位置。主要使用场景:在浏览器页面滚动是元素的位置不会改变。
选择器 { position: fixed; }
- 以浏览器的可视窗口为参考点移动元素,跟父元素没有任何关系且不随滚动条滚动;
- 固定定位不再占有原先的位置。
将盒子固定到版心右侧位置
- 让固定定位的盒子left:50%,走到浏览器可视化(也可以看做版心)的一半位置;
- 让固定定位的盒子margin-left:版心宽度的一半距离,多走版心宽度的一半位置;
<head> <title> </title> <style> body { margin: 0; padding: 0; } .w { width: 800pz; height: 1400px; background-color: red; margin: 0 auto; } .fixed { position: fixed; left: 50%; margin-left: 400px; width: 50px; height: 150px; background-color: blue; } </style> </head> <body> <div class="fixed"></div> <div class="w">版心盒子 800像素</div> </body>
3.2.7sticky
粘性定位可以被认为是相对定位和固定定位的混合。它常跟页面滚动搭配使用,但是兼容性较差,ie浏览器不支持粘性定位。sticky 粘性的
选择器 { position: sticky; top: 10px; }
- 以浏览器的可视窗口为参考点移动元素(固定定位特点);
- 粘性定位占有原先的位置(相对定位的特点);
- 必须添加top、left、right、bottom其中一个才有效。
3.2.8定位模式总结
定位模式 是否脱标 移动位置 是否常用 static静态定位 否 不能使用边偏移 很少 relative相对定位 否 相对于自身位置移动 常用 absolute绝对定位 是 带有定位的父类 常用 fixed固定定位 是 浏览器可视区 常用 sticky粘性定位 否 浏览器可视区 很少 3.3定位叠放次序 z-index
在使用定位布局时,可以会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序。z:z轴。
选择器 { z-index: 1 }
- 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上;
- 如果属性值相同,则按照书写顺序,后来居上;
- 数字后面不能加单位;
- 只有定位的盒子才有z-index属性。
3.4定位的拓展
3.4.1绝对定位的盒子居中
加了绝对定位的盒子不能通过margin:0 auto水平居中。
- left:50%;:让盒子的左侧移动到父级元素的水平中心位置;
- margin-left:-width/2px;:让盒子向左移动自身宽度的一半。
3.4.2绝对定位特性
1.绝对定位和固定定位和浮动类似。
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度;
- 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。
2.浮动元素、绝对定位、固定定位等脱标元素都不会触发外边距塌陷的问题。
3.浮动产生目的的最初是为了做文字环绕效果的,所以浮动的元素只会压住下面标准流的盒子,但是不会压住下面标准流盒子里面的文字、图片。但是绝对定位和固定定位会压住下面标准流所有的内容。网页布局总结
1.垂直的块级盒子显示使用标准流布局;
2.多个块级盒子水平显示使用浮动布局;
3.如果元素要自由地在盒子内移动使用定位布局。元素的显示与隐藏
本质:让一个元素在页面中隐藏或者显示出来。display显示隐藏;visibility显示隐藏;overflow溢出显示隐藏。
(1)、display
display属性用于设置一个元素应如何显示。
- display:none;隐藏对象
- display:biock;除了转换为块级元素之外,同时还有显示元素的意思
display隐藏元素后,不再占有原来的位置。后面的应用及其广泛,搭配js可以做出很多的网页特效。
(2)、visibility
visibility属性用于指定一个元素应可见还是隐藏。
- visibility:visible; 元素可视
- visibility:hidden; 元素隐藏
visibility隐藏元素后,继续占有原来的位置。所以,如果隐藏元素想要占有原来的位置,使用visibility:hidden;;如果隐藏元素不想要占有原来的位置,使用display:none;。在实际应用中,display更常见一些。
(3)、overflow
overflow属性指定了如果内容溢出一个元素的框时,会发生什么。
属性值 描述 visible 不隐藏内容 hidden 隐藏超出的内容 scroll 隐藏超出的内容,且不管超出与否都显示滚动条 auto 隐藏超出的内容,只有在内容溢出时才显示滚动条 一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局。使用隐藏属性时,请慎用overflow:hidden,因为它会隐藏那些我们设计页面时故意溢出的部分。