css-interview

如何解决a标点击后hover事件失效的问题?

  • 调换a标签css的顺序
  • 把顺序改成 link -> visited -> hover -> active
  • link:未访问时的样式
  • visited:访问后的样式
  • hover:鼠标移入时的样式
  • active:鼠标点击后的样式

实现水平垂直居中的几种方式

  • Flex布局(子元素是块级元素)

      .box {
          display: flex;
          width: 100px;
          height: 100px;
          background-color: pink;
      }
    
      .box-center{
          margin: auto;
          background-color: greenyellow;
      }
  • Flex布局

      .box {
          display: flex;
          width: 100px;
          height: 100px;
          background-color: pink;
          justify-content: center;
          align-items: center;
      }
    
      .box-center{
          background-color: greenyellow;
      }
    
+ 绝对定位实现(定位元素定宽定高)
```css
    .box {
        position: relative;
        height: 100px;
        width: 100px;
        background-color: pink;
    }
.box-center{
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  margin: auto;
  width: 50px;
  height: 50px;
  background-color: greenyellow;
}

实现一个一直旋转的动画

<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: red;
    animation: spin 2s linear infinite;
  }
  @keyframes spin {
    from { transform: rotate(0deg) }
    to { transform: rotate(360deg) }
  }
</style>

<div class="box"></div>

animation介绍一下

    animation: name duration timing-function delay iteration-count direction;

|值|描述|
|name|绑定到选择器的 keyframe 名称|
|duration|完成动画所花费的时间,以秒或毫秒计。|
|timing-function|动画的速度曲线。(ease|linear|ease-in|cubic-bezier(n,n,n,n))|
|delay|在动画开始之前的延迟。(2s)|
|iteration-count|动画应该播放的次数。(n | infinite) n次/无限|
|direction|是否应该轮流反向播放动画。(normal | alternate) 正常/反向|

CSS选择器以及这些选择器的优先级

  • !important
  • 内联样式(1000)
  • ID选择器(0100)
  • 类选择器/属性选择器/伪类选择器(0010)
  • 元素选择器/关系选择器/伪元素选择器(0001)
  • 通配符选择器(0000)

什么是BFC

盒模型

w3c盒模型

  • box-sizing: content-box。元素的宽高大小为内容的大小。

IE盒模型

  • box-sizing: border-box。元素的宽高大小为内容+内边距+边框大小。

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

  • dom结构

    <div class="box">
    <div class="box-left"></div>
    <div class="box-right"></div>
    </div>
  • 利用float + margin实现

    .box {
    height: 200px;
    }
    

.box > div {
height: 100%;
}

.box-left {
width: 200px;
float: left;
background-color: blue;
}

.box-right {
margin-left: 200px;
background-color: red;
}


+ 利用calc计算宽度
```css
.box {
 height: 200px;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  float: left;
  background-color: blue;
}

.box-right {
  width: calc(100% - 200px);
  float: right;
  background-color: red;
}
  • 利用float + overflow实现
    .box {
    height: 200px;
    }
    

.box > div {
height: 100%;
}

.box-left {
width: 200px;
float: left;
background-color: blue;
}

.box-right {
overflow: hidden;
background-color: red;
}


+ 利用flex实现
```css
.box {
  height: 200px;
  display: flex;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  background-color: blue;
}

.box-right {
  flex: 1; // 设置flex-grow属性为1,默认为0
  overflow: hidden;
  background-color: red;
}

盒模型

标准盒模型

  • width = content
  • width不包括border和padding
  • css设置:box-sizing:content-box

IE盒模型

  • width = content + padding + border
  • css设置:box-sizing:border-box

   转载规则


《css-interview》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录