CSS-03-三大特性+盒子模型

html-css011

CSS-03-三大特性+盒子模型,第1张

CSS 有 非常重要的 三个特性:层叠性、继承性、优先级。

相同选择器 给设置 相同的样式,此时一个样式就会 覆盖(层叠) 另一个冲突的样式。

层叠主要解决样式冲突的问题

层叠性原则:

CSS中的继承:子标签会继承父标签的某些样式,如 文本颜色 和 字号。

简单理解:子承父业。

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

优先级注意点:

权重叠加 :如果是复合选择器,则会有权重叠加,需要计算权重。

练习:

页面布局要学习三大核心: 盒子模型, 浮动 和 定位 .

学习好盒子模型能非常好的帮助我们布局页面.

网页布局过程:

网页布局的核心本质: <u> 就是利用 CSS 摆盒子 </u>。

所谓 盒子模型 :就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。

CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:<u>边框</u>、<u>外边距</u>、<u>内边距</u>、和 <u>实际内容</u>

border可以设置元素的边框。边框有三部分组成: 边框宽度(粗细)、 边框样式 、 边框颜色

语法:

CSS 边框属性允许你指定一个元素边框的 样式 颜色

语法

边框样式 border-style 可以设置如下值:

边框简写:

边框分开写法:

课堂要求:请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色(提示:一定注意边框的层叠性)

border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

语法:

边框会额外增加盒子的实际大小。因此我们有两种方案解决:

padding 属性用于设置内边距,即 边框与内容 之间的距离。

padding 属性(简写属性)可以有一到四个值。

以上 4 种情况,我们实际开发都会遇到。

内边距会影响盒子实际大小

当我们给盒子指定 padding 值之后,发生了 2 件事情:

也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。

解决方案:

<u>如果保证盒子跟效果图大小保持一致</u>,则 让 width/height 减去多出来的内边距大小 即可。

padding内边距可以撑开盒子,我们可以做非常巧妙的运用.

因为每个导航栏里面的字数不一样多,我们可以不用给每个盒子宽度了,直接给padding最合适。

相关取值:

padding内边距可以撑开盒子, 有时候,也会让我们去修改宽度。

现实开发时候,小米侧边栏,文字距离左侧的距离不能用text-indent调整,这样不精确,实际开发的做法是:给padding值,这样更加精确

如果盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小.

margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

margin 简写方式代表的意义跟 padding 完全一致。

外边距可以让 块级 盒子 水平居中 ,但是必须满足两个条件:

① 盒子必须指定了宽度(width)。

② 盒子 左右的外边距 都设置为 auto 。auto----自动

常见的写法,以下三种都可以:

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

使用 margin 定义块元素的 垂直外边距 时,可能会出现外边距的合并。

主要有两种情况:

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

2. 嵌套块元素垂直外边距的塌陷

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有 上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的 较大者这种现象被称为 相邻块元素垂直外边距的合并

解决方案:

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

解决方案:

① 可以为父元素定义上边框。

② 可以为父元素定义上内边距。

③ 可以为父元素添加 overflow:hidden。

还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,后面再总结。

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

注意: 行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距(因为设置了也不起作用)。但是转换为块级和行内块元素就可以了。

因为网页美工大部分效果图都是利用 PS(Photoshop) 来做的,所以以后我们大部分切图工作都是在 PS 里面完成。

因为网页美工大部分效果图都是利用 PS(Photoshop) 来做的,所以以后我们大部分切图工作都是在 PS 里面完成。

总结

标签都是有语义的, 合理的地方用合理的标签。比如产品标题 就用 h, 大量文字段落就用p

类名就是给每个盒子起了一个名字,可以更好的找到这个盒子, 选取盒子更容易,后期维护也方便。

大部分情况两个可以混用,两者各有优缺点,但是根据实际情况,总是有更简单的方法实现。

布局有很多种实现方式,同学们可以开始先模仿我的写法,然后再做出自己的风格。

最后同学们一定多运用辅助工具,比如屏幕画笔,ps等等

去掉 li 前面的 项目符号(小圆点)

语法:

圆角边框、盒子阴影、文字阴影

(重点记住前两个,文字阴影做了解)

在 CSS3 中,新增了 圆角边框 样式,这样我们的盒子就可以变圆角了。

border-radius 属性用于设置元素的外边框圆角。

语法:

radius 半径(圆的半径)原理:(椭)圆与边框的交集形成圆角效果

CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。

语法:

注意

在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。

语法:

在CSS中,所有元素被“ 盒子 ”所包围,利用盒模型的基本原理来实现CSS准确布局,元素排列等处理

CSS广泛使用的两种盒子,其在页面流和元素之间的关系表现为不同的行为:

对于定义为块级盒子(block)的元素会表现出以下行为:

对于定义为内联盒子(inline)的元素会表现出以下行为:

通过对盒子设置display的属性值,来控制盒子的外部显示类型

外部显示类型与内部显示类型

外部显示类型:决定盒子是块级还是内联,即决定了盒子之间的布局方式

内部显示类型:决定了盒子内部的元素是如何布局的,默认情况是按照正常文档流布局,也可以通过设置display值为flex和grid来改变内部元素之间的布局方式

不同显示类型的例子

block:

图中段落里的 <span>word </span>被设置为 display:block

因此其独占一行,宽度填满整个父元素

flex:

图中的列表被设置为 display:block ,每个列表是一个块级元素 —— 像段落一样 —— 会充满整个容器的宽度并且换行

inline-flex与inline

图中的列表被设置为 display:inline-flex ,使得在一些flex元素外创建一个内联框

最后设置两个段落为 display: inline , inline flex 容器和两个段落在同一行上,而不是像块级元素一样换行

CSS组成一个盒模型需要以下几个部分:

在标准模型中,如果你给盒设置 width 和 height,实际设置的是 content box。 padding 和 border 再加上设置的宽高一起决定整个盒子的大小

如果使用标准模型宽度 = 410px (350 + 25 + 25 + 5 + 5),高度 = 210px (150 + 25 + 25 + 5 + 5),padding 加 border 再加 content box

如果使用替代模型,一切都将变得简单很多,此时的 width 和 height 就是盒子可见的宽度与高度,无论怎么改变 padding 或 border 的值,都会通过压缩 conten box 的大小来保持 width 和 height 的值不变

如需使用,只需要声明以下CSS样式:

外边距是盒子周围一圈看不到的空间。它会把其他元素从盒子旁边推开。 外边距属性值可以为正也可以为负。设置负值会导致和其他内容重叠。无论使用标准模型还是替代模型,外边距总是在计算可见部分后额外添加

CSS:

html:

结果如下:因为上外边距设置为负值,所以两个边框会重叠

外边距折叠

理解外边距的一个关键是外边距折叠的概念。如果你有两个外边距相接的元素,这些外边距将合并为一个外边距,即最大的单个外边距的大小

结果如下,中间间隔的部分为50px

如下图所示,对内联盒子设置 width 和 height 都不会生效,虽然margin,padding和border会生效,但不会改变与其它内联盒子的关系,因此其内边距和边框会与段落的其它元素重叠

要避免上述情况,只需要将内联盒子的display值设置为inline-block即可

设置之后的效果为:

但因其保留有inline的特征,所以它不会跳转到新行

float可以使得当前元素脱离正常文本流,并吸附到父元素的左边(left)或者右边(right)正常布局中位于该浮动元素之下的内容,此时会围绕着浮动元素进行排列

基本的常见用途在于图片与文字环绕排版以及首字母下沉:

重点是这个,元素浮动具有一定的规则与限制

设置如下三个盒子(均以块级元素方式呈现):

将box1设置为向右浮动:

因为box1脱离正常文档流,所以box2和box3会向上填补box1的空位,box1浮动到父元素(body)的最右边

设置box1向左浮动:

同理,box1脱离正常文档流,box2与box3向上填补box1的空位,此时box1浮动到父元素(body)的最左边,所以会覆盖掉box2(浮动元素在正常流文档的上方)

设置box2向左浮动:

可以看到box3因为box2脱离正常文档流而向上填充其空位,box2因为浮动到左边覆盖了box3,然而box1仍处于正常文档流中,并且在html文件中最先声明,所以box2只能在box1的下方进行浮动(即使box2设置为向右浮动也是一样)

设置box1、box2与box3都向左浮动:

可以看到三个盒子均向左浮动,直到碰到前一个浮动框的边缘为止(对于box1来说是碰到父元素的边缘),因此呈现如此的排列状况

如果当父元素太窄,无法包含三个盒子的宽度,则无法容纳的元素向下移动,直到有足够的空间使得其能向某个方向浮动,如下图所示:

如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”

相关参考:

https://zhuanlan.zhihu.com/p/21286019?refer=miaomiaoji

https://www.jianshu.com/p/fe1052f1a8b6

浮动的规则先讨论到此

高度塌陷

在父元素container内设置一个盒子box1,此时没有设置浮动,box1会撑起父元素container的高度

如果此时设置box1浮动,因为其脱离了正常文档流,无法撑起盒子的高度,所以将发生高度塌陷:

为了解决这个问题,在此提供三种方法:

1. 添加额外标签

首先在父元素内添加空白内容的额外标签clearfix

然后再CSS规则中添加以下内容:

通过清除父元素内空白元素的浮动,使得父元素边框重新包含浮动内容

2. 父级元素添加overflow属性

直接在父元素内添加overflow属性:

同样可以清除浮动,结果如下:

3. after伪元素

html文档改为:

在CSS规则里添加: