• css面试题


    1、如何实现左侧宽度固定,右侧宽度自适应的布局

    DOM结构

    <div class="box">
      <div class="box-left"></div>
      <div class="box-right"></div>
    </div>

    方法1:float + margin 实现

    .box{
      height: 200px;
    }
    .box div{
      height: 100%;
    }
    .box-left{
      float: left;
      width: 200px;
      background-color: gold;
    }
    .box-right{
      margin-left: 200px;
      background: red;
    }

    方法2:利用 calc 计算宽度

    .box{
      height: 200px;
    }
    .box div{
      height: 100%;
    }
    .box-left{
      float: left;
      width: 200px;
      background-color: gold;
    }
    .box-right{
      float: right;
      width: calc(100% - 200px);
      background: red;
    }

    方法3:利用 float + overflow 实现

    .box{
      height: 200px;
    }
    .box div{
      height: 100%;
    }
    .box-left{
      float: left;
      width: 200px;
      background-color: gold;
    }
    .box-right{
      overflow: hidden;
      background: red;
    }

    方法4:利用 flex 实现

    .box{
      height: 200px;
      display: flex;
    }
    .box div{
      height: 100%;
    }
    .box-left{
      width: 200px;
      background-color: gold;
    }
    .box-right{
      flex: 1;
      background: red;
    }

    2、水平居中

    • 若是行内元素,给其父元素设置text-align: center 即可实现行内元素水平居中
    • 若是块级元素,该元素设置 margin: 0 auto 即可(元素需要定宽)
    • 若是块级元素,设置父元素为 flex 布局,子元素设置 margin: 0 auto 即可(子元素不需要定宽)
    • 使用flex,父元素 display: flex    justify-content: center
    • 使用绝对定位和 transform属性,position: absolute   left: 50%   50%   height: 100%    transform: translate(-50%, 0)

    3、垂直居中

    • 若元素是单行文本,则可以设置 line-height 等于父元素高度
    • 若是块级元素,设置父元素为flex布局,子元素设置  margin: auto 0 即可(子元素不需要定宽)
    • 若元素是行内块级元素,基本思想是使用 display: inline-block,vertical-align: middle 和一个伪元素让内容块处于容器中央:
    .box{
      height: 100px;
    }
    .box::after, .child{
      display: inline-block;
      vertical-align: middle;
    }
    .box::after{
      content: '';
      height: 100%;
    }

    4、水平垂直居中

    • flex布局
    .box{
      display: flex;
      width: 100px;
      height: 100px;
      justify-content: center;
      align-items: center;
    }
    .child{
      background-color: yellow;
    }
    • 绝对定位实现(定位元素定宽定高)
    .box{
      height: 100px;
      width: 100px;
      border: 1px solid #000;
      position: relative;
    }
    .child{
      width: 20px;
      height: 20px;
      position: absolute;
      background: yellow;
      margin: auto;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
    }

    5、伪类和伪元素的区别

        伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素。下面分别对伪类和伪元素进行解释:

        伪类用于当已有元素处于每个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的元素时,我们可以通过 :hover 来描述这个元素的状态。虽然它和普通的 css 类相似,可以为已有的元素添加样式,但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。

        伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过 :before 来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

    区别:

        伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档树外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素

        CSS3规范中的要求使用双冒号(::)表示伪元素,以此来区分伪元素和伪类,比如 ::before 和 ::after 等伪元素使用双冒号, :hover 和 :active 等伪类使用单冒号。

  • 相关阅读:
    第一篇:spring+springMVC项目启动最终笔记(一web.xml)
    Mysql优化系列之查询性能优化前篇1
    Mysql优化系列之索引性能
    java设计模式系列1-- 概述
    操作系统-死锁(重要)
    Mysql优化系列之表设计规范和优化
    Mysql优化系列之数据类型优化
    git-常见问题解决
    使用 jenkins 搭建CI/CD流水线 (MAC)
    jenkins 异常
  • 原文地址:https://www.cnblogs.com/haishen/p/11935265.html
Copyright © 2020-2023  润新知