CSS杂记<1> | 青训营笔记

152 阅读12分钟

415f82b9ly1ft7ds63pifj203f048glu (1).jpg

这是我参与「第四届青训营」笔记创作活动的的第1\color{CornflowerBlue}这是我参与「第四届青训营」笔记创作活动的的第1天 第一次用markdown工具做笔记, 如有不妥, 请各位看官多多包涵

文章目录

  • CSS简介
  • CSS权重叠加问题
  • CSS盒子模型
  • CSS圆角边框
  • CSS盒子阴影
  • CSS浮动
  • CSS定位
  • 总结

CSS简介--网页的美容师

  CSS是层叠样式表(Cascading Style Sheets)的简称,有时我们也会称之为CSS样式表或级联样式表。它是一种用来表现HTML或XML等文件样式的计算机语言。
  CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。
  CSS让我们的网页更加丰富多彩,布局更加灵活自如。
  简单理解:CSS可以美化HTML,让HTML更漂亮,让页面布局更简单。

CSS权重叠加问题

如果是复合选择器, 则会有权重叠加, 需要计算权重
选择器                     选择器权重
继承 或者 *                 0,0,0,0
元素选择器                  0,0,0,1
类选择器, 伪类选择器         0,0,1,0
ID选择器                    0,1,0,0
行内样式style=""            1,0,0,0
!important 重要的           ∞无穷大
注意:继承的权重是0

CSS盒子模型

组成:
  border边框 :
    属性: border-width(粗细) || border-style(样式) || border-color(颜色)
    简写: border: 1px solid red; //没有顺序
    border-collapse: collapse; //表格细线边框
    边框会影响盒子实际大小

  content内容

  padding内边距
    属性: padding-left(左内边距) padding-right(右内边距) padding-top(上内边距) padding-bottom(下内边距)
    简写:padding: a, b, c, d;
       1个值:上下左右--a      2个值:上下--a 左右--b
       3个值:上--a 左右--b 下--c  4个值:上--a 右--b 下--c 左--d
    内边距也会影响盒子实际大小。如果盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小

  margin外边距
    margin-left(左外边距)    margin-right(右外边距)
    margin-top(上外边距)    margin-bottom(下外边距)
    简写与padding一样
    外边距可以让 块级盒子 水平居中, 但必须满足两个条件:
      1.盒子必须指定了宽度(width)
      2.盒子左右的外边距都设置为auto
    常见的三种写法:
      1.margin-left: auto; margin-right: auto
      2.margin: auto;
      3.margin: 0 auto;
    行内元素 或者 行内块元素 水平居中给其父元素添加 text-align: center; 即可

  相邻块元素垂直外边距的合并:
    当上下相邻的两个块元素(兄弟关系)相遇时, 如果上面的元素有下外边距, 下面的元素有上外边距, 则它们之间的垂直间距不是两者之和, 而是去两个值中的较大值. 该现象被称为 相邻块元素垂直外边距的合并.
    解决方案:尽量只给一个盒子添加margin值.

  嵌套块元素垂直外边距的塌陷
    对于两个嵌套关系(父子关系)的元素, 父元素有上外边距的同时子元素也有上外边距, 则此时父元素会塌陷较大的外边距值.
    解决方案:
      1.可以为父元素定义上边框
      2.可以为父元素定义上内边距
      3.可以为父元素添加 overflow: hidden;
    还有其他方法, 比如浮动、固定、绝对定位的盒子不会有塌陷问题.

CSS圆角边框

  border-radius: length;
    圆形设置: border-radius: 50%;    //设置为width和height的一半
    圆角矩形:设置为height的一半
    简写: 可以跟四个值, 分别代表左上角, 右下角, 右下角, 左上角
    分开写: border-top-left-radius     border-top-right-radius,
        border-bottom-left-radius,   border-bottom-right-radius

CSS盒子阴影

  box-shadow: h-shadow v-shadow blur spread color inset;
    h-shadow:必须, 水平阴影的位置, 允许负值
    v-shadow:必须, 垂直阴影的位置, 允许负值
    blur:可选, 模糊距离
    spread:可选, 阴影尺寸
    color:可选, 阴影颜色
    inset:可选, 将外部阴影改为内部阴影(默认外阴影outset,但不可写)
    注意: 盒子阴影不占用空间, 不会影响其他盒子排列.

CSS浮动

  传统网页布局的三种方式: 普通流(标准流)、浮动、定位
    标准流(普通流/文档流):
      1.块级元素会独占一行, 从上向下顺序排列
      常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
      2.行内元素会按照顺序, 从左到右顺序排列, 碰到父元素边缘则自动换行
      常用元素:span、a、i、em、...

  网页布局第一准则:多个块级元素纵向排列找标准流, 多个块级元素横向排列找浮动

  语法:
    选择器 { float: 属性值; }
    属性值:none(不浮动, 默认值)  left(左浮动)  right(右浮动)

  特性:
    1. 浮动元素会脱离标准流(脱标), 浮动的盒子不再保留原先的位置
    2. 浮动的元素会一行内显示并且元素顶部对齐
    3.浮动的元素会具有行内块元素的特性

  浮动元素经常和标准流父级搭配使用
    先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置

  清除浮动
    本质是清除浮动元素造成的影响. 如果父盒子本身有高度, 则不需要清除浮动. 清除浮动之后, 父级就会根据浮动的子盒子自动检测高度. 父级有了高度, 就不会影响下面的标准流了.

  语法:
    选择器 { clear: 属性值; }
    属性值:left(不允许左侧有浮动, 清除左侧浮动的影响)
      right(不允许右侧有浮动, 清除右侧浮动的影响)
      both(同时清除左右两侧浮动的影响)

  清除浮动的策略是: 闭合浮动
    方法:
      1.额外标签法(隔墙法)
      是W3C推荐的做法, 在浮动元素末尾添加一个空的标签(必须是块级元素)
      优点: 通俗易懂, 书写方便
      缺点: 添加许多无意义的标签, 结构化较差

      2.父级添加overflow属性
      属性值: hidden、auto、scroll
      优点: 代码简洁
      缺点: 无法显示溢出的部分

      3.父级添加after伪元素

            .clearfix:after {
               content: "";
               display: block;
               height: 0;
               clear: both;
               visibility: hidden;
            }
            .clearfix {
               /* IE6、7 专有 */
               *zoom: 1;
            }

      优点: 没有增加标签, 结构更简单
      缺点: 照顾低版本浏览器

      4.父级添加双伪元素

            .clearfix:before, .clearfix:after {
               content: "";
               display: table;
            }
            .clearfix:after {
               clear: both;
            }
            .clearfix {
               /* IE6、7 专有 */
               *zoom: 1;
            }

      优点: 代码更简洁
      缺点: 照顾低版本浏览器

CSS定位

  组成:定位 = 定位模式 + 边偏移
    定位模式用于指定一个元素在文档中的定位方式
    边偏移则决定了该元素的最终位置

  定位模式position:
    static: 静态定位
      默认定位方式, 无定位的意思. 按照标准流特性摆放位置, 没有边偏移

    relative: 相对定位
      特点: 1.是相对于自己原来的位置移动的
         2.原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它

    absolute: 绝对定位
      特点: 1.如果没有祖先元素或者祖先元素没有定位, 则以浏览器为准定位
         2.如果祖先元素有定位(相对、绝对、固定定位), 则以最近一级的有定位祖先元素为参考点移动位置
         3.绝对定位不再占有原先的位置(脱标)

    fixed: 固定定位
      特点: 1.以浏览器的可视窗口为参照点移动元素, 跟父元素没有任何关系,不随滚动条滚动
         2.固定位置不占有原先的位置(脱标)
      固定定位小技巧: 固定在版心右侧位置
        1.让固定定位的盒子left: 50%. 走到浏览器可视区(也可以看作版心)一半位置.
        2.让固定定位的盒子margin-left: 版心宽度的一半距离.多走版心宽度一半位置

    sticky: 粘性定位
      特点: 1. 以浏览器的可视窗口为参照点移动元素(固定定位特点)
         2. 粘性定位占有原先位置(相对定位特点)
         3. 必须添加top、left、right、bottom其中一个才有效
         4. 跟页面滚动搭配使用. 兼容性较差, IE不支持

  边偏移:
    top: 顶端偏移量, 定义元素相对于父元素上边线的距离
    bottom: 底部偏移量, 定义元素相对于父元素下边线的距离
    left: 左侧偏移量, 定义元素相对于父元素左边线的距离
    right: 右侧偏移量, 定义元素相对于父元素右边线的距离

  定位的叠放顺序:
    z-index控制盒子的前后次序(z轴)
    语法:
      选择器 { z-index: 1; }
      1.数值可以是正整数、负整数或0, 默认是auto, 数值越大, 盒子越靠上
      2.如果属性值相同, 则按照书写顺序, 后来居上
      3.数字后面不能加单位
      4.只有定位的盒子才有z-index属性

  定位特殊特性:
    绝对定位和固定定位也和浮动类似
     1.行内元素添加绝对或者固定定位, 可以直接设置高度和宽度
     2.块级元素添加绝对或者固定定位, 如果不给宽度或者高度, 默认大小是内容的大小
    注意:
     脱标的盒子不会触发外边距塌陷
     浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题
     绝对定位(固定定位)会完全压住盒子
     浮动元素不同, 只会压住它下面标准流的盒子, 但是不会压住下面标准流盒子里的文字(图片)
     但是绝对定位(固定定位)会压住下面标准流所有的内容
     浮动之所以不会压住文字, 因为浮动产生的目的最初是为了做文字环绕效果, 文字会围绕浮动元素

  绝对定位的盒子居中:
    1. left: 50%; 让盒子的左侧移动到父级元素的水平中心位置
    2. margin-left: -100px; 让盒子向左移动自身宽度的一半

  元素的显示与隐藏
    1. display显示隐藏
      none: 隐藏对象
      block: 除了转换成块级元素外, 还有显示元素的意思
      display隐藏元素后, 不再占有原来的位置
    2. visibility显示隐藏
      inherit: 继承上一个父对象的可见性
      visible: 对象可视
      hidden: 对象隐藏
      collapse: 主要用来隐藏表格的行或列. 隐藏的行或列能够被其他内容使用. 对于表格外的其他对象, 其作用等同与hidden
      visibility隐藏元素后, 继续占有原来的位置
      如果隐藏元素想要原来位置, 就用visibility: hidden;
      如果隐藏元素不想要原来位置, 就用display: none;
    3. overflow溢出显示隐藏
      visible: 不剪切内容也不添加滚动条
      auto: 超出自动显示滚动条, 不超出不显示滚动条
      hidden: 不显示超过对象尺寸的内容, 超出的部分隐藏掉
      scroll: 不管超出内容与否, 总是显示滚动条

总结

  • 第一次在电脑上用markdown语法写笔记着实不怎么习惯
  • 青训营这段时间才发现自己所学的仅仅只是冰山一角
  • 纸上得来终觉浅,绝知此事要躬行!!