NotionNext
NotionNext
编程爱好者
/互联网从业者
/知识分享博主
认知决定态度,态度决定选择,选择决定人生

CSS 基本概念

发布于:2021-12-10|最后更新: 2023-8-29|
type
status
date
slug
summary
tags
category
icon
password

CSS的历史

CSS是谁发明的?

李爵士的挪威同事赖先生首先提出CSS

赖先生生平

生平
  • 1991年获得MIT媒体实验室视觉研究理学硕士学位
  • 1994年提出CCS概念而闻名
  • 1999年任Opera的CTO
  • 2005年他写公开信给比尔盖茨问为什么IE不支持Web标准,盖茨说IE 7马上发布,他写了Acid2用来验证
  • 2006年通过了博士论文答辩
  • 2006年他倡议Web网页应使用通用字体格式
  • 2007年他倡议浏览器可以支持video标签
观点
  • 微软的IE常常成为他的批评对象
  • 他也是Web打印概念的倡导者,用HTML和CSS写书

CSS的牛X之处在哪?

CSS得到全称是层叠样式表
层叠指的是什么
  • 样式层叠可以多次对同一选择器进行样式声明
  • 选择器层叠可以用不同选择器对同一个元素进行样式声明
  • 文件层叠可以用多个文件进行层叠
  • 这些特性使得CSS极度灵活这也为CSS后来被吐槽留下了隐患

CSS的版本

版本
时间
重点
CSS 1
1996年
不用管
CSS 2
1998年
添加定位,z-index ,media
CSS 2.1
2004年~2011年
使用最广泛的版本(IE支持)
CSS 3
1999年开始起草
现代版本,分模块(IE 8部分支持)
CSS 4*
分模块升级

我怎么知道哪些浏览器支持哪些特性呢?

  1. 方法一:几十种浏览器全部跑一遍
  1. 方法二:caniuse.com

为什么CSS这么难学?

因为CSS是艺术,就像画画,折纸,你需要用感性思维来理解CSS 不要用理性思维,既不要问 为什么会这样? 而是说 原来是这样 浏览器说是怎么样,就是怎么样

CSS的语法是怎样的?

  • 语法一:样式语法
注意事项
  • 所有符号都是英文符号,如果写错了,浏览器会警告
  • 区分大小写,a和A是不同的东西
  • 没有//注释
  • 最后一个分号可以省略,但建议不要省略
  • 任何地方写错了,都不会报错,浏览器会直接忽略
  • *语法二: at语法
注意事项
  • @charset必须放在第一行
  • 前面两个at语法必须以分号;结尾
  • charset是字符集的意思,但UTF-8是字符编码encoding,这是历史遗留问题

如何调试CSS?

方法
  • 使用W3C验证器(在线/命令行工具)
  • 使用VSCode看颜色
  • 使用WebStorm看颜色
  • 使用开发者工具看警告
如何使用开发者工具
  • 找到你脑中的标签
  • 看它是否有选择器
  • 看它的样式是否被划掉
  • 看它的样式是否有警告
Border调试法
  • 步骤
  1. 怀疑某个元素有问题
  1. 就给这个元素加border
  1. border没出现? 说明选择器错了或者语法错了
  1. borer出现了?看看边界是否符合预期
  1. bug解决了才可以把border删掉
  • 记住
  • CSS的border调试法
  • 就想当于JS的log调试法

在哪里查资料?

  • Google 搜索关键词时加上 MDN
  • CSS tricks(英文)
  • 张鑫旭的博客

在哪里搜练习素材?

PSD
效果图(不提供下载)
  • 可以用肉眼模仿它
商业网站
  • 直接模仿你常去的网站
不要沉迷于临摹:每个类型的临摹一两个即可 PC网站,手机网站,UI套件

CSS的标准制定者是谁?

W3C搜索CSS spec 可以找到CSS最新标准,但是没有人能看完它,可以去看看CSS 2.1标准的中文版

CSS文档流

基本概念

要理解几个重要的概念
  • 文档流Normal Flow
  • 块,内联,内联块
  • margin合并
  • 两种和模型(border-box 更符合人类思维)

文档流

文档流的英文名是Normal Flow ,就是正常的流动方向,指的是文档中元素的流动方向
流动方向
  • inline元素从左到右,到达最右边才会换行
  • block元素从上到下,每一个都另起一行
  • inline-block 也是从左到右
宽度
  • inline元素宽度为内部inline元素的和,inline元素不能用width指定
  • block元素默认自动计算宽度,可以用width指定
  • inline-block结合前两者特点,可用width
高度
  • inline高度由line-height间接确定,跟height无关
  • block高度由内部文档流元素决定,可以设置height
  • inline-block跟block类似,可以设置height
新的HTML5的标准是部分内联元素,和块级元素的,所有的元素都可以是内联元素或者块级元素
span元素的宽度是由它内联元素宽度的总和决定的 span元素不能设置宽度
div元素的宽度不是100%,而是auto,能有多宽占多宽 如果div里什么都没有,div的高度是0 永远不要写宽度为100%

overflow溢出

当内容大于容器
  • 等内容的宽度或高度大于容器的,会溢出
  • 可用overflow来设置是否显示滚动条
  • auto是灵活设置
  • scroll是永远显示
  • hidden是直接隐藏溢出部分
  • visible是直接显示溢出部分
  • overflow可以分为overflow-x和overflow-y

脱离文档流

回忆
  • block高度是由内部文档流元素决定的,可以设为height
  • 这句话的意思是说,有些元素可以不在文档流中
哪些元素脱离文档流
  • float
  • position: absolute / fixed
怎么让元素不脱离文档流
  • 不用上面的属性就不会脱离了

盒模型

两种盒模型

分别是
  • content-box内容盒-内容就是盒子的边界
  • border-box边框盒-边框才是盒子的边界
公式
  • content-box width = 内容宽度
  • border-box width = 内容宽度 + padding + border
哪个好用
  • border-box 好用
  • 同时指定padding,width,border就知道为什么了
什么是盒模型?CSS盒模型分两种,一种是content-box , 一种是border-box,那content-box和border-box的区别是,content-box的宽度只包含conent,border-box的宽度包含到border , 分别是边框(border) , 内边距(padding)和内容(content)

margin合并

哪些情况会合并
  • 父子margin合并
  • 兄弟margin合并
  • 上下margin合并
  • 左右margin不合并
如何阻止合并
  • 父子合并用padding/border挡住
  • 父子合并用overflow:hidden挡住
  • 父子合并用display:flex,不知道为什么
  • 兄弟合并是符合预期的
  • 兄弟合并可以用inline-block消除
  • CSS的属性逐年增多,每年都可能有新的

基本单位

长度单位
  • px 像素
  • em相对于自身font-size的倍数
  • 百分数
  • 整数
  • rem
  • vw和vh
颜色
  • 十六进制#FF6600或者#F60
  • RGBA颜色rgb(0,0,0)或者rgba(0,0,0,1)
  • hsl颜色hsl(360,100%,100%) (色相,饱和度,亮度)或者hsla
 
 
HTML标签CSS 布局