CSS简介和基本概念

341 阅读5分钟

一. CSS 简介

1. CSS(Cascading Style Sheets)层叠样式表

CSS厉害之处——层叠

  • 样式层叠:可以多次对同一选择器进行样式声明
  • 选择器层叠:可以用不同选择器对同一个元素进行样式声明
  • 文件层叠:可以用多个文件进行层叠 所以这些特性使CSS极度灵活,也造成了CSS不正交的特点。

2. CSS版本

版本时间重点
CSS 2.12004~2011推出使用最广泛的版本(所有浏览器都支持)
CSS 31999年开始起草现代版本,分模块(IE8部分支持)

如何知道哪些浏览器支持哪些特性?

  • 方法:使用caniuse.com (开发者社区的力量)

3. CSS语法(超级简单)

  • 样式语法
选择器 {
    属性名: 属性值;
    /*注释*/
    /*所有符号都是英文符号,如果写错了,浏览器会警告 ;
      区分大小写;
      最后一个分号可以省略,但建议不要省略 */
}
  • @语法
@charset "UTF-8";        /*必须在第一行,@charset定义的是样式表的字符集,charset是字符集的意思,但UTF-8是字符编码的意思,是历史遗留问题,可以理解为声明字符编码的意思*/
@import url(2.css);      /*导入额外的CSS*/
@media (min-width:100px) and (max-width:200px){
    样式语法
}

如何调试CSS ?!

CSS任何地方写错了,浏览器都不会报错,会直接忽略,因此通过调试才能知道代码正确与否。

  • 方法
  1. 使用VScode看颜色
  2. 使用WebStorm看颜色
  3. 使用开发者工具看警告: 找到标签 → 看是否有选择器 → 看样式是否被划掉 → 看样式是否有警告
  4. border调试法给怀疑元素加border,逐行往下加;若border没出现,说明上一行选择器或者语法错了;若border出现了,看看边界是否符合预期;bug解决了才可以把border删掉
    CSS的border调试法就相当于JS的log调试法。

4. CSS文档查询

CSS的标准制定者——W3C,搜索CSS spec可以找到CSS最新标准,看不完,可以看看CSS2.1标准的中文版

网站推荐:

  • MDN ( 搜索关键词 + MDN )
  • CSS tricks
  • 张鑫旭博客

5. CSS素材练习

  • PSD : freepik搜索psd web ; 365PSD(中文的)
  • 效果图(不提供下载) :dribbble.com顶级设计师社区,可以用肉眼模仿
  • 商业网站 :直接模仿你常用的网站
    不要沉迷临摹! 每个类型临摹一两个即可,PC网站、手机网站、UI套件,再多无益。

二. CSS 基本概念

1. 文档流 Normal Flow

1) 流动方向

  • 所有内联元素inline(如span)从左到右依次排列,默认合并,到最右边会换行,如果最右边长度不够一个Inline元素,会自动切割为两半,即会跨越两行
  • 所有块级元素block(如div)从上到下依次排列,不会合并,每个块级元素都独占一行
  • inline-block也是从左到右,很像inline,但有block的特点,不会跨两行 注意:HTML5不会再区分内联元素和块级元素,全部由样式display: inline | block;决定元素类型,没有绝对的元素类型

2) 宽度

  • inline宽度为内部inline元素的和,不能用width指定 (不要在inline元素中加block元素,样式很奇怪)
  • block默认自动计算宽度,一般为一行长,可用width指定 (block元素的默认宽度是width: auto; 不是100%,最大是100%,但永远不要写100%)
  • inline-block结合前两者,可用width

3) 高度

  • inline高度由line-height间接确定(字体变了可能会不一样),跟height无关
  • block高度由内部文档流元素的总和决定,可以设置height
  • inline-block跟block类似,可以设置height

4) overflow 溢出

当内容大于容器时,等内容宽度或高度大于容器的,会溢出,可用overflow属性来设置是否显示滚动条。

  • 默认 overflow: visible; 就是溢出,放那不管
  • overflow: hidden; 溢出部分被隐藏,用户看不到溢出的内容,无法滚动
  • overflow: scroll; 超出部分可以滚动展示,但有一个bug,是就算你的内容没有溢出,它也会显示滚动条
  • overflow: auto; 灵活地显示滚动条,只有在需要的时候才会出现滚动条 overflow可设置为 overflow-x 和 overflow-y

5) 脱离文档流

block元素的高度是由内部文档流元素决定的,所以当元素脱离了文档流,block元素就不会计算它的高度。
有两种方式可以脱离文档流:

  • position: absolute | fixed;
  • float: left | right;

2. 盒模型

1) 两种盒模型(border-box更符合人类思维)

CSS 盒模型有两种,一种是 content-box,一种是 border-box;
content-box 的宽度 width 表示内容区的宽度,不包含 padding 和 border;
border-box 的宽度 width 表示 内容区 + padding + border 的总和,
一般优先使用border-box。

代码展示

<div class="content-box">content box</div>
<div class="border-box">border box</div>
 .content-box {
   margin: 25px;
   border: 5px solid red;
   padding: 15px;
   box-sizing: content-box;
   width: 100px;
   height: 100px;
 }
 .border-box {
   margin: 25px;
   border: 5px solid red;
   padding: 15px;
   box-sizing: border-box;
   width: 100px;
   height: 100px;
 }

代码效果图

虽然都设置了相同的宽度为100px,但可以看到两种盒模型的宽度是不同的
content-box盒模型:content = 100px,
border-box盒模型:padding + border + content = 100px

2) margin合并(只在上下方向合并,左右不会合并

父子margin合并,兄弟margin合并

阻止合并

  • 父子合并用padding/border挡住
  • 父子合并用overflow:hidden挡住
  • 父子合并用display:flex
  • 兄弟合并用inline-block 消除

3) 基本单位

常用长度单位

  • px 像素
  • em 相对于自身font-size的倍数
  • 百分数

颜色

  • 十六进制 #FF6600或#F60
  • rgba颜色 rgb(0, 0, 0) 或 rgba(0, 0, 0, 1) (a指透明度,0全透明,1不透明)
  • hsl颜色 或hsla hsl(360, 100%, 100%)——(颜色,饱和度,亮度),a同上 取色工具:snipaste pro