css
的显示模式
元素显示模式就是元素(标签)以什么方式进行显示,比如<div>
自己占一行,比如一行可以放多个<span>
网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页
块元素
常见的块元素
<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>
<div>
标签是最典型的块元素
块级元素的特点:
- 比较霸道,自己独占一行。
- 高度,宽度、外边距以及内边距都可以控制。
- 宽度默认是容器(父级宽度)的100%。
- 是一个容器及盒子,里面可以放行内或者块级元素
文字类的元素内不能放块级元素
<p>
标签主要用于存放文字,因此 <p>
里面不能放块级元素,特别是不能放<div>
同理, <h1>~<h6>
等都是文字类块级标签,里面也不能放其他块级元素
行内元素
常见的行内元素
<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>
<span>
标签是最典型的行内元素。有的地方也将行内元素称为内联元素
行内元素的特点:
- 相邻行内元素在一行上,一行可以显示多个。
- 高、宽直接设置是无效的。
- 默认宽度就是它本身内容的宽度。
- 行内元素只能容纳文本或其他行内元素
链接里面不能再放链接。特殊情况链接 <a>
里面可以放块级元素,但是给<a>
转换一下块级模式最安全
行内块元素
常见的行内块标签
<img />、<input />、<td>
它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素
行内块元素的特点:
- 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。
- 一行可以显示多个(行内元素特点)。
- 默认宽度就是它本身内容的宽度(行内元素特点)。
- 高度,行高、外边距以及内边距都可以控制(块级元素特点)
元素显示模式总结
元素模式 | 元素排列 | 设置样式 | 默认宽度 | 包含 |
---|---|---|---|---|
块级元素 | 一行只能放一个块级元素 | 可以设置宽度高度 | 容器的100% | 容器级可以包含任何标签 |
行内元素 | 一行可以放多个行内元素 | 不可以直接设置宽度高度 | 本身的内容的宽度 | 容纳文本或其他行内元素 |
行内块元素 | 一行可以放多个行内块元素 | 可以设置宽度高度 | 本身内容的宽度 |
学习元素显示模式的主要目的就是分清它们各自的特点,当我们网页布局的时候,在合适的地方用合适的标签元素
元素显示模式的转换
一个模式的元素需要另外一种模式的特性。比如想要增加链接<a>
的触发范围
转换方式
- 转换为块元素:
display:block;
- 转换为行内元素:
display:inline;
- 转换为行内块:
display: inline-block;
文字垂直居中
让文字的行高等于盒子的高度 就可以让文字在当前盒子内垂直居中
行高的上空隙和下空隙把文字挤到中间了,如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,则文字偏下。
css
三大特性
层叠性
相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题
层叠性原则
- 样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式
- 样式不冲突,不会层叠
继承性
CSS中的继承: 子标签会继承父标签的某些样式,如文本颜色和字号。恰当地使用继承可以简化代码,降低 CSS
样式的复杂性。
子元素可以继承父元素的样式:
text-,font-,line-这些元素开头的可以继承,以及color属性
行高的继承性
body {
font:12px/1.5 Microsoft YaHei;
}
- 行高可以跟单位也可以不跟单位
- 如果子元素没有设置行高,则会继承父元素的行高为
1.5
- 此时子元素的行高是:当前子元素的文字大小 * 1.5
body
行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高
优先级
当同一个元素指定多个选择器,就会有优先级的产生。
- 选择器相同,则执行层叠性
- 选择器不同,则根据选择器权重执行
选择器优先级计算表格
选择器 | 选择器权重 |
---|---|
继承 或者* | 0,0,0,0 |
标签选择器 | 0,0,0,1 |
类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式 | 1,0,0,0 |
!important | 无穷大 |
优先级注意点:
- 权重是有4组数字组成,但是不会有进位。
- 可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推…
- 等级判断从左向右,如果某一位数值相同,则判断下一位数值。
- 可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000,
!important
无穷大. - 继承的权重是0, 如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是 0
权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重。
div ul li
------> 0,0,0,3.nav ul li
------> 0,0,1,2a:hover
-----—> 0,0,1,1.nav a
------> 0,0,1,1
盒子模型
网页布局的核心本质: 就是利用 CSS
摆盒子
网页布局过程:
- 先准备好相关的网页元素,网页元素基本都是盒子
Box
。 - 利用
CSS
设置好盒子样式,然后摆放到相应位置。 - 往盒子里面装内容
盒子模型组成
盒子模型:把 HTML
页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容
边框
边框的使用
borde
r可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色;
border : border-width || border-style || border-color;
属性 | 作用 |
---|---|
border-width | 定义边框粗细,单位是px |
border-style | 边框的样式 |
border-color | 边框颜色 |
边框样式 border-style
可以设置如下值:
none
:没有边框即忽略所有边框的宽度(默认值)solid
:边框为单实线(最为常用的)dashed
:边框为虚线dotted
:边框为点线
边框的合写分写
边框简写
border: 1px solid red;
边框分开写法
border-top: 1px solid red; /* 只设定上边框, 其余同理 */
表格的细线边框
border-collapse
属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框
border-collapse:collapse;
collapse
单词是合并的意思
border-collapse: collapse;
表示相邻边框合并在一起
边框会影响盒子实际大小
边框会额外增加盒子的实际大小。因此我们有两种方案解决:
- 测量盒子大小的时候,不量边框。
- 如果测量的时候包含了边框,则需要
width/height
减去边框宽度
内边距
padding
属性用于设置内边距,即边框与内容之间的距离
合写属性
值得个数 | 表达意思 |
---|---|
padding:5px; | 上下左右都有5像素内边距 |
padding:5px 10px; | 上下内边距5像素,左右内边距10像素 |
padding:5px 10px 20px; | 上内边距5像素,左右内边距10像素,下内边距20像素 |
padding:5px 10px 20px 30px; | 上5像素,右10像素,下20像素,左30像素 顺时针 |
分写属性
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-right | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
内边距会影响盒子实际大小
当我们给盒子指定 padding
值之后,发生了 2 件事情
- 内容和边框有了距离,添加了内边距。
2.padding
影响了盒子实际大小
内边距对盒子大小的影响
- 如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。
- 如何盒子本身没有指定
width/height
属性, 则此时padding
不会撑开盒子大小
如果保证盒子跟效果图大小保持一致,则让 width/height
减去多出来的内边距大小即可
外边距
margin
属性用于设置外边距,即控制盒子和盒子之间的距离
属性 | 作用 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
外边距典型应用
外边距可以让块级盒子水平居中的两个条件:
- 盒子必须指定了宽度(
width
)。 - 盒子左右的外边距都设置为
auto
margin-left: auto; margin-right: auto;
margin: auto;
margin: 0 auto;
注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center
即可
外边距合并
使用 margin
定义块元素的垂直外边距时,可能会出现外边距的合并
主要有两种情况:
1、相邻块元素垂直外边距的合并
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom
,下面的元素有上外边距margin-top
,则他们之间的垂直间距不是 margin-bottom
与 margin-top
之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并
解决方案:尽量只给一个盒子添加 margin
值
嵌套块元素垂直外边距的塌陷
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值
解决方案:
- 可以为父元素定义上边框。
- 可以为父元素定义上内边距。
- 可以为父元素添加
overflow:hidden
清除内外边距
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距
* {
padding:0; /* 清除内边距 */
margin:0; /* 清除外边距 */
}
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
其他样式
圆角边框
在 CSS3
中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。
border-radius 属性用于设置元素的外边框圆角
border-radius:length;
- 参数值可以为数值或百分比的形式
- 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50%
- 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
- 分开写:
border-top-left-radius
、border-top-right-radius
、border-bottom-right-radius
和border-bottom-left-radius
- 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用
盒子阴影
CSS3
中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影
box-shadow: h-shadow v-shadow blur spread color inset;
值 | 描述 |
---|---|
h-shadow | 必需,水平阴影的位置,允许负值 |
v-shadow | 必需,垂直阴影的位置,允许负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的尺寸 |
color | 可选,阴影的颜色 |
inset | 可选,将外部阴影(outset)改为内部阴影 |
文字阴影
在 CSS3
中,我们可以使用 text-shadow
属性将阴影应用于文本
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需,水平阴影的位置,允许负值 |
v-shadow | 必需,垂直阴影的位置,允许负值 |
blur | 可选,模糊的距离 |
color | 可选,阴影的颜色 |