CSS盒模型

ppgo8 于 2023-02-13 发布

CSS盒模型

CSS三大特性

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

CSS层叠性

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

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

层叠性原则:

口诀:长江后浪推前浪

继承性

现实中的继承:我们继承了父亲的姓

CSS中的继承:子标签会继承父标签的某些样式。

image-20230212230624577

此时P标签中的文字颜色会显示红色。

特殊的继承:行高line-height继承

行高后写

body行高1.5 这样写法最大的优势是里面的子元素可以根据自己文字大小自动调整行高

优先级

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

!important 声明的分号前面写,代表该属性是最重要的。不管你是哪一种选择器。

注意:

  1. 权重由4组数字组成,但是不会有进位

  2. 可以理解为

    id选择器>类选择器>元素原则器>

  3. 继承的属性权重是0

    image-20230213111548880

    此时,p显示的颜色是粉色。有自己的有继承的,优先显示自己的。

​ 在继承的情况下,以后看标签显示的样式:首先看这个标签有没有直接被选出来

  1. a标签不会继承父元素的颜色样式

    因为浏览器默认给a {color: blue}的样式

**权重叠加**

image-20230213113733711

CSS盒子模型

看透网页布局本质

网页布局过程:

  1. 先准备好相关的网页元素,网页元素基本都是盒子Box.
  2. 利用CSS设置好盒子样式,然后摆放到相应位置(最麻烦)
  3. 往盒子里添加内容

网页布局的核心:就是用css摆放盒子

盒子模型(Box Mode)组成

image-20230213121334412

border:盒子的边框

padding:内容和盒子的距离

content:盒子里面的内容

margin:盒子和盒子之间的距离

边框(border)

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

语法:

image-20230213121821692

border-style的属性值

边框三大属性简写:粗细 线条样式 颜色

image-20230213122822684

单独设置每一段边框:

这四个也都可以用边框的三个属性的复合写法,单独定义每一部分边框。

表格的细线边框

之前学习Html的时候制作边框,表格太粗。不在html处更改,在css这里修改样式。

border-collapse属性控制浏览器绘制表格边框的方式。他控制相邻单元格的边框。如果两个格子都有1px边框,那么叠加到中间共同的线就是2px,不好看,用这个属性设置。

image-20230213125900728

边框注意点

内边距(padding)

padding属性用于设置内边距,即边框(边框的最内层)和内容之间的距离。

image-20230213131019415

内边距复合写法

image-20230213131339121

注意

  1. 内容和边框有了距离

  2. padding也会影响盒子的大小

    padding和Boreder一样,如果盒子本身有了高度和宽度属性。padding也会影响盒子的大小。

解决方案

一定要有padding,那么则使用width和height属性减去原来的值。

padding案例

image-20230213132120610

导航栏内各个文字个数不同,如果按照方式1,都设置相同宽度不合理。

可以使用方案2,不给文字设置宽度(文字内容撑起宽度),使用padding修改各个格子,和左右具有一定的空间。

image-20230213133418994

特殊情况

​ 如果盒子本身没有设置width和height,那么就不会撑开盒子。

​ 只要盒子自己没有定义width和height,(父元素定义了也不会继承),不会撑开盒子。

外边距 Margin

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

image-20230213152320855

margin的简写方式和padding完全一致。

margin属性后面的属性值的个数:

外边距典型应用

可以让块级元素实现水平居中显示,必须满足两个条件:

  1. 盒子必须指定了宽度(width)

  2. 盒子左右外边距设置为auto

  3. 三中书写方式均可

    margin: auto;
    margin: 0 auto; <!-- 常用 -->
    margin-left: auto;margin-right: auto;
    
注意

:以上方法是让块级元素水平居中。

**行内元素或者行内块元素水平居中给其父元素添加text-aligin:center即可**

相当于把行内元素和行内块元素看成文字内容。

总结

1.块内元素水平居中:左右margin:auto

2.行内元素或行内块元素水平居中:找到父级元素设置text-align:center

外边距合并

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

    image-20230213154843294

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

image-20230213155525549

image-20230213161604335

垂直塌陷需要两个盒子的边框重合,才会发生塌陷。

清除内外边距

​ 网页元素里面自带外边距。如谷歌默认body有8px的外边距、ul默认有40px的padding。

因此在布局前,首先要清楚网页元素的内外边距

image-20230213162957056

上述方式,可以清除所有标签的默认内外边距。

上面这句话也是CSS的第一行代码。

注意:行内元素为了兼顾兼容性,尽量只设置左右内外边距,但是转换为块级和行内块元素就可以了

ps基本操作

网页美工大部分都是利用ps来制作的,大部分的切图工作都是在PS中完成的。

需要掌握PS的相关操作。

https://www.bilibili.com/video/BV14J4114768?p=155&spm_id_from=pageDriver&vd_source=dde2f4dd432156027fedf9b1734ba705

ctrl+r快速调出标尺,右击改变刻度为单位

ctrl+加号/减号可以放大或者缩小图片

空格键,鼠标变成小手,拖动PS视图

用选区 拖动,可以查看图片的大小。ctrl+d取消选区,或者在旁边空白处点击一下也可以取消选区。

image-20230213165049007

总结

  1. 布局为啥用不同盒子,我只想用div?

    标签由语义,合理的地方用合理标题。标题就用h,大段文字就用p

  2. 为什么用这么多类名?

    起个类名是好习惯,每个盒子都起类名,相当于每个盒子都有名字。可以更好地找到盒子、后期维护也更加方便。

  3. 到底用margin还是padding?

    大多情况下可以混用。

    弹幕:

    • 上下用margin左右用padding

    • 父子盒子用padding 兄弟盒子用margin

  4. 自己没有思路?

    布局有很多种实现方式,可以先模仿,再形成自己的风格。