CSS基础

103 阅读3分钟

浏览器兼容检查:

CanIUse

CSS reset——默认样式的去除

* { /*有的说法说*会使得性能变差,要一个个设置使用了的标签下面的样式*/
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
*::before,
*::after {
  box-sizing: border-box;
}
a {
  color: inherit;
  text-decoration: none;
}
input,
button {
  font-family: inherit;
}
ol,
ul {
  list-style: none;
}
table {/*必须加!去除table间隙*/
  border-collapse: collapse;
  border-spacing: 0;
}

语法

  1. 样式语法

    选择器{
        属性名:属性值;
    }
    
  2. @语法

    @charset "UTF-8";/*必须放在第一行申明字符编码集*/
    @import url(style.css);
    @media (min-width:100px) and (max-width:200px){
        /* ... */
    }
    

    注意点:

    1. @语法要以分号结尾
    2. charset 是 字符集,但是 utf-8并不是字符集,是字符编码集,charset确定了字符集,这是历史遗留问题

CSS学习方法

调试方法

  1. W3C验证

  2. 使用VSCode看报错颜色

  3. 使用Webstorm看报错颜色(最靠谱)

  4. 使用开发者工具

  5. Border调试法

    步骤:

    1. 给怀疑的元素加border
    2. 如果border没出现,说明选择器初吻日
    3. 如果border出现了,调整border位置

查阅资料

技术名词 +

  1. MDN
  2. CSS tricks
  3. 张鑫旭的博客

练习素材

PSD:

  1. 在 Freepik 搜索 PSD web
  2. 365 PSD 的UI套件

效果图:

dribbble.com 顶级设计师社区

用肉眼模仿

文档流

normal flow

什么是文档流

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

inlineinline-block 元素从左到右

block 元素从上到下

高度的决定

inline 的高度由 line-height 间接决定,字体也可以改变

blockinline-block的高度由包住的元素决定,也可以设置height

overflow溢出

内容溢出容器的解决方法:

  1. overflow:hidden

    直接隐藏溢出的部分

  2. overflow:scroll

    显示滚动条

  3. overflow:auto

    在内容超出的时候才会显示滚动条

脱离文档流

如何脱离文档流:

  1. float
  2. position:absolute/fixed

脱离文档流后,所在的容器不再计算高度,父级容器如果没有设置高度会造成高度塌陷

盒模型

box-sizing

content-box

img

border-box

border-box 更好用

img

margin合并

只在上下方向存在,左右方向不存在

兄弟合并

<div class="parent">
  <div class="child1">第一个孩子</div>
  <div class="child2">第二个孩子</div>
</div>
.parent{
  border:1px solid red;
}
.child1{
  border:2px solid blue;
  margin-bottom:30px;
}
.child2{
  border:2px solid green;
  margin-top:30px;
}

img

第一个孩子的margin和第二个孩子的margin出现重叠现象

解决方法

子节点加上

display:inline-block;
width:100%;

首尾孩子和父元素合并

.parent{
  margin:15px;
  border:1px solid red;
  background:yellow;
}
.child{
  border:2px solid blue;
  margin:30px 0;
}

img

解决方法

  1. 父元素加 : padding border
  2. 父元素加 :overflow:hidden
  3. 父元素加 : display:flex

基本单位

  • px 像素 (pixel)

  • em 相对于自身 font-size 的倍数

    .div1{
      font-size:20px;
      background:yellow;
      width:3em;
    }
    

    此div的宽度为 3*20 = 60px

  • rem

    根元素的字体大小

  • 百分数

  • 整数

  • vw

    视窗宽度的1%

  • vh

    视窗高度的1%

定位

一个div的分层

img

由上至下:

  • 文字内容
  • 浮动元素
  • 块级子元素
  • border
  • background

position

  • static 默认值

  • relative

    相对于自身移动

    1. 用于位移 (top,left移动) 很少用
    2. 给absolute做父元素
  • absolute

    1. 相对于除了 static 定位以外的第一个父元素进行定位。
  1. 鼠标悬浮显示提示内容
  2. 如果不写 top/left 有些浏览器会混乱
  • fixed

    相对于视口定位,尽量不要用,bug很多

  • stiky

    粘滞定位,兼容性很差

    在看到这个块的时候根据文档流定位,往上划走的时候就固定在视口顶部

层叠上下文

加了定位(非static)的元素处于最上层(z-index = 0)

img
  • 只有处于同一层叠上下文z-index 才可以比较

如何创建层叠上下文

MDN 层叠上下文

  • 文档根元素(<html>);
  • z-index = 0
  • flex
  • opacity 不为 1
  • transform