CSS基础概念

173 阅读5分钟

要理解的基本概念:

  • 文档流Normal Flow
  • 块、内联、内联块
  • margin合并
  • 两种盒模型(border-box更符合人类的思维)

css的牛逼之处在于:

  • 层叠样式表

  • 可以多次对同一选择器进行样式声明

  • 选择器层叠

  • 可以用不同选择器对同一个元素进行样式声明

  • 文件层叠

  • 可以用多个文件进行层叠

  • 这些特性使得CSS极度活跃

  • 这也为CSS后来被吐槽留下隐患

  • 世界上使用最广泛的CSS版本是2.1;从3开始就是每个模块自己升级

查看模块是否适配游览器: caniuse.com/

CSS的语法1:

选择题{

属性名:属性值;

}

注意事项:

  • 所有符号都是英文
  • 区分大小写,a和A是不同的东西
  • 最后的分号可以省略,但是不建议
  • 写错了不会报错,游览器会忽略

CSS语法2:at语法

@charset "utf-8";

@import url(2.css);

@media (min-width:100px) and (max-width:200px) {

语法一

}

注意事项:

  • @charset必须放在第一行
  • 前两个at都必须以分号;结尾
  • @media语法会单独教学
  • charset是字符集的意思,但UTF-8是字符编码encoding,这是历史遗留问题

如何调试:

  • border调试大法:
  • 怀疑某个元素有问题
  • 就给这个元素加border
  • border没出现,说明选择器错了或者语法错了
  • border出现,看看边界是否符合预期
  • bug解决了才可以吧border删除

在哪查资料:

  1. 谷歌搜索关键词时加mdn
  2. CSS tricks(英文)
  3. 张鑫旭的博客

在哪练习:

PSD:

效果图(不提供下载):

  • dribbble.com 顶级设计师社区
  • 可以用肉眼模仿它

商业网址:

  • 直接模仿你常去的网站

标准制定者:w3c

文档流

文档流指的是文档中元素的流动方向

一次写多个的方式:span{第$个元素}*8

一次简写:span.ib{第$个inline-block元素}*8就会等于8个

什么是inline,什么是block呢?

流动方向:

  • inline元素从左到右,到达最右边才会换行

  • block元素从上到下,每一个都另起一行

  • inline-block也是从左到右(但是不会跨两行分开)

  • 不要在inline元素里面写block元素(没人会这样做)

宽度:

  • inline宽度为内部inline元素的和,不能用width指定。

  • block默认自动计算宽度(不是占满屏),可用width指定。(永远不要写宽度100%)

  • inline-block结合前两者特点,可用width(宽度是自适应的)。

高度:

  • inline高度有line-height(行高)间接确定,跟height无关

  • block高度由内部文档流元素决定,可以设height

  • inline-block跟block类似,可以设height

overflow 溢出

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

  • auto是灵活设置
  • hedden是直接隐藏溢出部分
  • visible是直接显示溢出部分
  • scroll是永远显示(不好用)
  • overflow可以分为overflow-x和overflow-y

脱离文档流

用float、position:absolute/fixed这两个可以脱离

盒模型

分别是:

  • content-box内容盒-内容就是盒子的边界
  • border-box边框盒-边框才是盒子的边界
  • 就是以宽度来区分

公式:

content-box 的宽度 width :表示内容区的宽度,不包含 padding 和 border;

border-box 的宽度 width :表示内容区 + padding + border 的总和。 一般优先使用后者。

同时指定这三个padding、width、border就知道为什么了

margin 合并

  • 哪些情况会合并
  1. 父子margin 合并

  2. 兄弟margin 合并

    只会在上下重叠合并,不会在左右重叠合并

    合并的前提是他们中间什么都没有,所以以下加了东西就可以阻止合并

  • 如何阻止合并
  1. 父子合并用padding/border挡住
  2. 父子合并用overflow:hidden挡住
  3. 父子合并用display:flex,不知道为什么
  4. 兄弟合并是符合预期的
  5. 兄弟合并可用inline-block消除
  6. 每条都死记,CSS的属性逐年增多,每年都可能有新的

基本的单位

长度单位:
  1. px像素
  2. em相对于自身font-size的倍数
  3. 百分数
  4. 整数
  5. rem:等你把em滚瓜烂熟了再问rem
  6. vw和vh
  7. 其他长度单位都用的少,不用了解
颜色:
  1. 十六进制#FF6600或者#F60
  2. RGBA颜色rgb(0,0,0)或者rgb(0,0,0,1)
  3. hsl颜色hsl(360,100%,100%)

请简述 CSS 盒模型是什么

参考答案

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

其他回答

CSS3 box-sizing 属性分为content-box和border-box

content-box:在该盒属性下,对元素设定的width和height会被应用到元素内容框,在内容框宽高之外绘制元素的内边距和边框。

border-box:在该盒属性下,对元素设定的width和height会被应用到元素边框盒,为元素设置的的任何padding和border都将在已设定的width和height内进行绘制。 通过从已设定的宽高分别减去padding和border得到内容框的宽高。

display:block:block元素会独占一行,默认情况下宽度会自动填满父级元素的宽度;可以手动设置width和height属性,也可设置padding和margin属性。

display:inline:inline元素在有多个的情况会自动排列填满一行后换行,宽度是由元素内容决定,设置width、height属性无效,设置竖直方向的padding、margin属性无效。

display:inline-block:inline-block元素是借鉴了以上两种元素的特性,在有多个该元素的情况时会保持同行排列,同时也可以对其中每一个元素设置宽高、间距属性。