基本点

  • 是什么:Cascading Style Sheet ,层叠样式表
  • 作用:用于控制网络样式,并允许将样式代码与网页内容分离的一种标记性语言
  • 由W3C审核通过并推荐使用

    实操步骤

  1. 先安排总体布局
    1. 拿一张草稿纸,详细分析好、确定布局,建立不同的css
    2. 从网上找reset+自己手动改,比如颜色
  2. 进入具体小布局-
    1. 该布局选用:传统定位/弹性盒子定位
    2. 行级元素有哪些?盒子类型是border-sizing还是content-sizing?推荐使用前者
    3. width/height
    4. padding
    5. margin
  3. ps:觉得确实没有问题的先不管,因为可能是浏览器的延迟

    实践笔记

  • 怎么设置全屏
    • 不要滚动条 ```html

      方法1:100%方法

      该方法要求具备html、body标签

      body, html{ height: 100%; margin: 0px; padding: 0px; } .bg{ width: 100%; height: 100%; position: fixed;

      加fixed就没有滚动条了,

      background-color: aquamarine; }

方法2:vh、vw方法

该方法要求IE9以上

.bg{ background-color: #070d82; width: 100vw; height: 100vh; position: fixed; }

  1. - 要滚动条
  2. ```html
  3. body, html{
  4. margin: 0px;
  5. padding: 0px;
  6. }
  7. .bg{
  8. # 下面两个二选一
  9. background-size : auto auto;
  10. background-repeat: repeat-x repeat-y;
  11. }

盒模型

基本点

  • 简介
    • CSS处理网页时,它认为每个HTML元素都包含在一个不可见的盒子里。
    • 网页布局就是摆放盒子。
  • 作用
    • 设计、布局
  • 组成
    • margin外边距:透明
    • border边框
    • padding内边框:透明
    • content内容
  • box-sizing属性
    • content-box(W3C盒模型)
      • 功能:属性width,height只包含内容content,不包含border和padding
      • 适用:chrome
    • border-box(IE盒模型)
      • 功能:属性width,height包含content、border和padding
      • 适用:IE
  • width与height
    • width:100%
      • 子元素一定会从父元素的content的左上角开始定位
      • 父元素无需设置width(这是因为浏览器会自动计算窗口宽度),也可以随便怎么设置
      • 不好用,一般不用
      • 100vh,vh是相当于视窗的高度(满高是100vh)
    • height:100%
      • 子元素一定会从父元素的content的左上角开始定位
      • 父元素的height需要为固定值或者百分比,不能为auto,也不能没有。(这是因为浏览器不会自动计算窗口高度,父元素如果不设置高度,就是auto,这会是undefind值,可以给父元素的height设置一个100%去解决。)
      • 子元素非绝对定位时,根据父元素的height计算百分比;绝对定位时,宽高百分比的计算是相对于第一个非static组先的padding-box,如果没有就是body。
      • 100vw,vw是相当于视窗的宽度(满宽是100vw)
    • width:auto(即自适应)
      • 不设置width时,默认为auto
      • 在宽度上,子元素将占满父元素的content
    • height:auto
      • 不设置height时,默认为auto
      • 在高度上,子元素根据自身内容动态调节height(如果没有内容,height会为0),和父元素无关
      • 当position不同时显示效果不同,浮动可能会导致其不显示,需要清除浮动
  • 子元素设置margin-top后,父元素跟随下移的问题
    • 原因:父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding.就会不断一层一层的找自己“领导”(父元素,祖先元素)的麻烦。
    • 解决方法:设置border-top或padding-top

      元素分类

      块状元素

      特点

  1. 每个块级元素都会独占一行
  2. 在不设置块级元素宽度的情况下,其宽度和父容器的宽度保持一致
  3. 设置块级元素的盒模型属性都是有效的
  4. 外边距合并:当两个块级元素在垂直方向上相遇,如果上面的元素有margin-bottom,下面的元素有margin-top,则两者间距不是它们的和,而是它们的较大值.

    使用

  5. 常用标签:

    ,

    ,

    ,
      ,
        ,
        ,

      1. 设置display:block,可以将元素转换块级元素

        内联元素

        特点

      2. 不能独占一行,和其它元素在同一行

      3. 元素的宽高就是它包含内容的宽高,不可改变
      4. 对内联元素设置width,heigth,以及垂直方向上的margin和padding无效,其中垂直方向上的padding会对显示有影响,对周围元素没有影响

        使用

      5. 常用的内联标签有:,,

      6. 设置display:inline;可以将块级元素转换为内联元素

        内联块状元素

        特点

      7. 和其它元素都在一行上

      8. 元素的高度,宽度及顶部和底部边距可设置

        使用

      9. 常用的内联块状标签有:CSS3 - 图1 , ,

      10. float:left/right; position: absolute/fixed;display:inline-block;可以将元素设置为内联块级元素(BFC)

        布局

        传统布局

        • 传统布局中涵盖了普通流、绝对定位、float,三种不同的定位方案,注意区分

          通过position定位

        • position取值

          • absolute绝对定位
            • 脱离标准文档流进行定位,定位的起始位置为最近的position不为static父元素,否则为body文档本身.
            • 不设置top…,也会脱离文档流
            • 使用绝对定位,会转换成block块级元素
          • relative相对定位
            • 不脱离文档流,在文档流中改变自身的位置,定位的起始位置为此元素原先在文档流中的位置.
          • fixed固定定位
            • 脱离文档流定位,根据浏览器窗口定位,不随滚动条滚动改变
          • static默认布局
            • 按正常的页面流进行布局,由浏览器自主决定不能使用五大属性
            • 子元素始终从父元素的左weight和上height开始定位
          • sticky
            • 是relative和fixed的结合
            • 当页面滚动,父元素开始脱离浏览器视口时(即部分不可见)(没有父元素就会以body为父元素),只要与sticky元素的距离达到生效门槛,relative定位自动切换为fixed定位;等到父元素完全脱离视口时(即完全不可见),fixed定位自动切换回relative定位。
            • 要设置top、left、right、bottom中的任意一个才可以生效(z-index是不行的)
        • 与position关联的5大属性

          • top
          • bottom
          • left
          • right
          • z-index
            • 可以为负,值越大越靠前
          • ps:
            • 都是相对于target的外边缘定位,比如top就是target的padding-top边缘向下移动,bottom就是target的padding-bottom边缘向上移动。
            • left和top属性的权重是高于right和bottom,只有在没定义left或top的情况下,相应的right和bottom属性才会起作用,如果left或top定义了,则会忽略right或bottom的值

              float

        • 属性值

          • none:默认值,不浮动
          • inherit:继承父元素的float属性
          • left:向左浮动
          • right:向右浮动
        • 特点
          • float会自动将元素设置为块级元素
          • 一个浮动的元素,如果没有设置宽高,那么将自动收缩为内容的宽高
            • 对于块级元素,如果不给它设置宽高,它会霸占一整行,如果设置了float,它会收缩为内容的宽高。
          • float可以实现字围效果
          • 假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。
            • 举例
              • 把div2、div3、div4都设置成左浮动

        CSS3 - 图2,发现234和1的底部对齐,并没有影响1

        1. - div2div4左浮动
        2. ![](https://cdn.nlark.com/yuque/0/2021/png/10357741/1633767293997-7ae3a457-de1c-4b44-9f61-7aba7ddb70f8.png#clientId=u57b46a61-177b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=199&id=qCBWa&margin=%5Bobject%20Object%5D&originHeight=324&originWidth=500&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ua1a28845-cab6-41d5-9fba-81ff3df393c&title=&width=307),发现div2和1的底部对齐,div4和3的底部对齐
        3. - ps:为了避免过于复杂,要么都浮动,要么不浮动

        flex布局

        基本点

        • 怎么设置:display: flex;

          容器(container)属性

        1. flex-direction
          1. 含义:容器内子元素的排列方向
          2. 属性值:row(默认) | row-reverse | column | column-reverse;
        2. flex-wrap
          1. 含义:元素放不下了是否换行
          2. 属性值:wrap(默认)| no-wrap(如果放不下,容器会按比例缩小) | wrap-reverse(第一行放在最下面)
        3. flex-flow
          1. 1和2的简写
        4. justify-content
          1. 含义:定义了项目在主轴上的对齐方式
          2. 属性值:flex-start(行头紧挨着填充)| flex-end(行尾紧挨着填充) | center(居中紧挨着填充)|space-between(项目均匀分布,两边没有间隙)| space-around(项目均匀分布,两边留有一半的间隔空间)|space-evenly(项目均匀分布,两边留有间隙)
          3. image.png
        5. align-items
          1. 含义:定义了项目在交叉轴上如何对齐
          2. 属性值:flex-start(行头紧挨着填充)| flex-end(行尾紧挨着填充) | center(居中紧挨着填充)|stretch|baseline(以第一行文字为中心进行对齐)
        6. align-content

          1. 含义:属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
          2. 属性值:flex-start:与交叉轴的起点对齐 | flex-end 与交叉轴的终点对齐

            1. |center 与交叉轴的中点对齐|space-between 交叉轴两端设有间隔,其余间隔均匀<br /> |space-around 交叉轴两端设有间隔,轴线之间的间隔比轴线与边框的间隔大一倍。 <br /> |stretch(默认值):多行占满整个交叉轴。

            项目(item)属性

        7. order: -1;

          1. 功能:定义项目的排列顺序。
          2. 含义:数值越小,排列越靠前,默认为0
        8. flex-grow: 2;
          1. 功能:定义剩余空间分配比例。
          2. 含义:
            1. 默认为0,即如果存在剩余空间,也不放大。(负数和0效果相同)
            2. 将所有正整数相加得到分母sum,每个属性的数值作为分子,然后乘以剩余空间
        9. flex-shrink
          1. 功能:为不够的控件定义缩小比例。
          2. 含义
            1. 默认为1,即如果空间不足,该项目将缩小。
            2. 将所有正整数相加得到分母sum,每个属性的数值作为分子,然后乘以超出空间
        10. align-self
          1. 功能:允许脱离团队
          2. 含义:
            1. 默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
            2. 如果定义了,就将覆盖align-items属性。
        11. flex-basis
          1. 功能:属性定义了在分配多余空间之前,项目占据的主轴空间(main size)
          2. 含义:
            1. 和width有一定的关系,大部分情况和width表现一致,如果两者同时使用flex-basis优先级会高一些。
            2. 单独使用width,正常使用。
            3. 如果单独使用flex-basis,超过会自动变大,不会限制,相当于定义一个最小宽度。
            4. 如果同时使用,实际宽度为限制flex-basis和width两者的最大者,并且会限制,内容超出直接溢出(不使用break-all);
            5. 如果有max-width和min-width,flex-basis受到这两个属性的限制,flex-basis = max-width

              grid布局

              基本点

        • 网格布局、二维布局
        • 设置:display:grid

          容器属性

        1. grid-template-columns
          1. 想要几列写几列
            1. grid-template-columns:100px 100px 100px;
            2. grid-template-columns:repeat(3, 100px);
            3. grid-template-columns:repeat(3, 1fr);
            4. grid-template-columns:1fr 2fr 1fr;
            5. grid-template-columns:repeat(auto-fill, 100px);
            6. grid-template-columns:1fr minmax(150px, 1fr);
            7. grid-template-columns:100px auto 100px;
            8. grid-template-columns:[c1]100px 100px 100px;
        2. grid-template-rows
          1. 想要几行写几行
        3. gap
          1. 间距,行和列同时设置
        4. row-gap
          1. row-gap: 20px;
        5. colum-gap
        6. grid-template-areas
          1. 作用:分区
          2. 例:
            1. grid-template-areas:’a b c’ ‘d e f’ ‘g h i’
            2. grid-template-areas:’a a a’ ‘b b b’ ‘c c c’
            3. grid-template-areas:’a . a’ ‘b . b’ ‘c . c’ //点代表该区域不能被利用
        7. grid-auto-flow
          1. 作用:先行后列放置,还是先列后行放置
          2. 例子:
            1. grid-auto-flow:row | column
        8. justify-items
          1. 作用:各区的行对齐方式
          2. 取值:start | end | center | stretch
        9. align-items
          1. 作用:各区的列对齐方式
          2. 取值:start | end | center | stretch
        10. justify-content
          1. 作用:整个内容区域的行对齐方式
          2. 取值:start | end | center | stretch | space-around | space-between | space-evenly
        11. align-content
          1. 作用:整个内容区域的列对齐方式
          2. 取值:start | end | center | stretch | space-around | space-between | space-evenly
        12. grid-auto-columns, grid-auto-rows
          1. 作用:设置多出来的项目的宽和高
          2. 取值:XXpx

        项目属性

        其它布局要点

        常见的垂直居中方法

        1. 设置line-height = height
          1. 如果是P标签,注意设置P标签的margin为0
        2. 让父元素弹性布局,并设置flex-direction为column列,并设置justify-content为center
        3. 父元素设置relative,子元素设置absolute,top:50%, tansform:translateY(-50%)
        4. 将要垂直居中的元素设置为行内元素或者行内块级元素,再在父元素上设置一个after伪元素,使它的高度和父元素的高度相等,宽度为0,且vertical-align为middle,以此调整父元素的基线,再给目标元素也设置vertical-align:middle,即可达到效果。
        5. grid??
        6. 父元素设置display:table,子元素设置display:table-cell和vertical-align:middle
          1. 弊端太多,一般不用

            BFC

        • 含义:Block formatting Context 块级格式化上下文
        • 本质
          • 是一个隔离的独立容器,容器内的元素和外部的元素不会互相影响
          • BFC属于定位方案中的普通流
        • 布局规则:
          1. BFC容器内的元素和外部的元素不会互相影响
            1. 设置两个BFC,可以避免外边距重叠现象
            2. 阻止元素被浮动元素覆盖
          2. 同一个BFC里,
            1. 可以清除浮动,避免高度塌陷:计算BFC的高度时,浮动元素也参与计算
            2. 父子元素的边距不会重叠
        • 如何触发

          1. float的值不是none。
          2. position的值是absolute或者fixed
          3. overflow的值不是visible
            1. 一般采用 {overflow:hidden}
          4. display的值是inline-block、table-cell、flex、table-caption或者inline-flex

            伪类和伪元素

            伪类

        • 功能

          • 伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的
        • 实例: ```css / 未访问的链接 / a:link { color: #FF0000; }

        / 已访问的链接 / a:visited { color: #00FF00; }

        / 鼠标悬停链接 / a:hover { color: #FF00FF; }

        / 鼠标点击状态 / a:active { color: #0000FF; }

        1. <a name="xeI0b"></a>
        2. ## 伪元素
        3. - 功能
        4. - 伪元素用于创建一些不在文档树中的元素,并为其添加样式
        5. - 实例
        6. ```css
        7. a::before{}
        8. a::after{}

        区别

        1. css规范中要求对伪元素使用双冒号,以此来区别伪元素和伪类,但大多数伪元素也支持单冒号
        2. 伪元素针对的是不在文档树中的元素的样式,伪类针对的是已有元素根据用户的行为添加对应的样式


          image.pngimage.png

          属性详解

          background属性

          background-color

        • 作用:设置元素的背景颜色,它从填充从content—->border(所以说padding本身是透明的),不包括margin。
        • 用法

          1. //1、关键字
          2. background-color: blue;
          3. //2、十六进制
          4. background-color: #ff0000;
          5. //3、RGB
          6. background-color: rgb(255,0,255);
          7. background-color: rgba(255,255,255,0.2);//a是设置透明度的alpha通道
          8. //值越小越接近全透明
          9. //3、全透明
          10. //实际上background默认的颜色就是透明的属性
          11. //不过如果您不希望某元素拥有背景色,同时又不希望用户对浏览器的颜色设置影响到您的设计,那么设 置 transparent 值还是有必要的。
          12. background-color:transparent;

          background-size

        • 作用:定义背景图片的属性

          • 第一个值为设置图片宽度,第二个值为图片的高度;但是不管是用什么值,都不能为负值。
        • 兼容性
          • 还好吧 ```html

            auto:(默认值)不调整背景图片大小,一直复制直到覆盖整个容器(容器由内容决定,自适应内容),如果不能刚好满足,图片会被咔擦

            background-size: auto auto;

        百分比

        background-size: 30% 30%;

        覆盖:按比例调整背景图片,这个属性值跟contain正好相反,背景图片会按照比如自适应铺满整个背景区域。假如背景区域不足以包含背景图片的话,那么背景图片就会被咔嚓。

        background-size: cover;

        包含:按比例调整背景图片,使得其图片宽高比自适应整个元素的背景区域的宽高比,因此假如指定的图片尺寸过大,而背景区域的整体宽高不能恰好包含背景图片的话,那么其背景某些区域可能会有空白

        background-size: contain;

        length

        background-size: 100px 100px; ```

        display属性

        • 作用:设置属性如何被展示
        • 属性值:

          • display: none; //不展示
          • display: inherit; //继承
          • display: block | inline | inline-block
          • display: flex | grid
          • display:table | table-cell

            vertical-align属性

        • 作用:为display 属性为 inline 、inline-block 和 table-cell 的元素设置垂直对齐方式

          兴趣探索

          为什么会有怪异模式啊?

        • css有两种模式,即怪异模式和标准模式(严格模式),常用的<!DOCTYPE html>就是标准模式(这一行是文档类型定义(DTD),没有DTD就是怪异模式),早期的浏览器厂商如网景公司和微软公司的Netscape4和IE4,在实现CSS机制时,并没有遵循W3C的标准,然而随着标准一致性变得越来越重要,大家都启用了W3C,而为了兼容过去的网站,就保留了曾经使用的怪异模式。

          怪异模式和标准模式有什么区别?

        • 标准模式中IE6不认识!important声明,怪异模式中IE6/7/8都不认识

        • 怪异模式的width包含padding、boder、margin
        • 怪异模式可以给行内元素设置height和weight
        • 怪异模式下,body是根节点;标准模式下,html是根节点

          待解决问题