css的理解总结

1. 对盒子模型的理解

  • 定义:css基本盒子模型是css规范的模块,它定义的长方形的盒子
  • 分类:盒模型按照标准定义分为标准盒模型和IE盒模型,按照元素类型分为块级盒模型和内联盒模型
  • 使用:按照标准切换模型:box-sizing: border-box;或者box-sizing: context-box;
    按照元素切换盒模型:display: block;或者display: inline;或者display: iinline-block
  • 应用:盒模型有padding,border,margin属性;padding和margin设置的值沿着顺时针方向等

2. 对BFC的理解

  • 定义:BFC是块格式化上下文,代表一个独立的空间, 这个空间子元素的渲染不会影响外部布局
  • 创建BFC:
    • display: inline-block;
    • display: table-cell;
    • display: flex;
    • position: absolute;
    • position: fixed;
    • overflow: hidden
  • 作用:
    • 解决了垂直方向margin合并的问题
    • 解决了设置float脱离文档流, 父元素高度塌陷问题

3. 对css选择器的理解

  • 定义: css选择器是用来对选定页面元素进行样式修改的
  • 种类
    • 标签选择器
    • 通配符选择器
    • 类选择器
    • ID选择器
    • 标签属性选择器
    • 伪类选择器
    • 伪元素选择器
    • 后代选择器
    • 子代选择器
    • 兄弟相邻选择器
    • 通用兄弟选择器

4. 对css选择器的优先级的理解

  • 定义: css选择器优先级是对于不同种类选择器组成的匹配规则
  • 优先级: !important > 行内样式 > ID选择器 > 类、伪类、属性选择器 > 标签、伪元素选择器 > 通配符、子类选择器、兄弟选择器

5. 对css属性继承的理解

  • 定义: css继承指的是父元素设置的属性样式等, 子元素同时拥有该属性和样式
  • 可继承属性:
    • 字体:font、font-family、font-size、font-style、font-variant、font-weight
    • 字母间距:letter-spacing
    • 文字展示:line-height、text-align、text-indext、text-transform
    • 字间距:word-spacing
    • 可见性: visibility

6. 对px/em/rem/vw/vh的理解

  • 定义:
    • px: 绝对单位,像素, 基本长度单位
    • em: 相对单位,相对当前元素文本的字体大小
    • rem: 相对单位,基于html元素字体大小
    • vw: 相对单位,相对浏览器的视口宽度单位(1vw代表视口宽度的1%)
    • vh:相对单位,相对于浏览器的视口高度单位(1vh代表视口高度的1%)

7. 实现左边定宽,右边自适应

  • flex布局
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 600px;
      height: 600px;
      border: 1px solid #000;
      display: flex;
    }
    .left {
      width: 200px;
      background-color: pink;
    }
    .right {
      flex: 1;
      background-color: red;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
</body>
</html>
  • table布局
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 600px;
      height: 600px;
      border: 1px solid #000;
      display: table;
    }
    .left {
      width: 200px;
      background-color: pink;
      display: table-cell;
    }
    .right {
      display: table-cell;
      background-color: red;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
</body>
</html>
  • grid布局
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 600px;
      height: 600px;
      border: 1px solid #000;
      display: grid;
      grid-template-columns: 200px auto;
    }
    .left {
      background-color: pink;
    }
    .right {
      background-color: red;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="left">left</div>
    <div class="right">right</div>
  </div>
</body>
</html>

8. 实现绝对居中

  • 定宽高

绝对定位 + 负margin值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      position: relative;
    }
    .box {
      width: 100px;
      height: 100px;
      position: absolute;
      top: 50%;
      left: 50%;
      background-color: pink;
      margin-left: -50px;
      margin-top: -50px;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="box"></div>
  </div>
</body>
</html>

绝对定位 + margin auto

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      position: relative;
    }
    .box {
      width: 100px;
      height: 100px;
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      background-color: pink;
      margin: auto;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="box"></div>
  </div>
</body>
</html>
  • 不定宽高

绝对定位 + transform

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      position: relative;
    }
    .box {
      position: absolute;
      background-color: pink;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="box">position + transform</div>
  </div>
</body>
</html>

table-cell

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      display: table-cell;
      vertical-align: middle;
      text-align: center;
    }
    .box {
      background-color: pink;
      display: inline-block;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="box">table-cell</div>
  </div>
</body>
</html>

flex布局

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 500px;
      height: 500px;
      border: 1px solid #000;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .box {
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="A">
    <div class="box">flex布局</div>
  </div>
</body>
</html>

9. 清除浮动方式

例如外部div没有设置高度, 但是内部元素设置了浮动, 这时候会导致外部div塌陷, 这时候就需要清除浮动

方式:

* 1. 父元素设置固定宽高
	* 优点:简单, 代码量少, 没有兼容问题
	* 缺点: 内部元素高度不确定时不能使用
* 2. 内部添加新元素,并添加`clear: both;`
	* 优点: 简单, 代码量少,没有兼容问题
	* 缺点: 无语义, 不利于后期维护
* 3. 使用伪元素
	* 优点: 仅用css实现, 不容易出错
	* 缺点: 仅支持IE8以上和非IE浏览器
* 4. 触发父元素BFC
	* 优点: 仅使用css实现, 代码少, 浏览器支持好
	* 缺点: 用overflow: hidden触发可能会使内部元素被裁剪
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 100px;
      /* 方式一 */
      /* height: 20px; */
      padding: 10px;
      border: 1px solid red;
      /* 方法四 */
      /* overflow: hidden; */
    }
    .left {
      float: left;
    }
    .right {
      float: right;
    }
    /* 方法三 */
    /* .A::after {
      content: '';
      display: block;
      clear: both;
      height: 0;
    } */
    /* 方式二 */
    /* .else {
      clear: both;
    } */
  </style>
</head>
<body>
  <div class="A">
    <div class="left">左边</div>
    <div class="right">右边</div>
    <!-- 方式2 -->
    <!-- <div class="else"></div> -->
  </div>
</body>
</html>

10. css画三角形

处于页面性能考虑,为避免发送过多的http请求,节省带宽,我们可能需要使用css手动绘制各种图案

  • 对于实现三角形,我们可以利用border属性来实现
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    .A {
      width: 0;
      /* height: 0; */
      border: 20px solid transparent;
      border-left: 20px solid red;
    }
  </style>
</head>
<body>
  <div class="A">
  </div>
</body>
</html>

11. css提高页面性能

  • 属性设置使用简写(例:margin值)
    • 目的:减小生产包体积
  • 用css替换图片
    • 目的:减少http请求节约带宽
  • 删除不必要的零和单位
    • 目的:减小生产包体积
  • 用css精灵图代替单个文件加载
    • 目的:减少http请求节约带宽
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值