css题

266 阅读6分钟

1.css和js两种方式实现div右移1000px动画

css

 <div class="conatiner"></div>
.conatiner {
    width: 100px;
    height: 100px;
    background-color: pink;
    transform: translateX(0);
    animation: move 1s;
}
@keyframes move {
    0% {
        transform: translateX(0);
    }
    100% {
        transform: translateX(1000px);
    }
}

js

2. visibility、display、opacity的区别

  1. 三者都是可以隐藏元素
  2. 设置了visibility: hidden 的元素,dom结构不会消失,只是不可见, 不能触发点击事件, 会引起重绘,性能消耗相对较少
  3. 设置了display: none的元素,dom结构会页面上被移除,会造成回流重绘,性能消耗大
  4. opacity 设置透明度的,如果设置了为0 就不可见, 但是可以触发点击事件,引起重绘,性能消耗相对较少

3. 单行截断css

.text {
  width: 100px;
  overflow: hidden;
  white-space: nowrap; //规定段落中的文本不进行换行
  text-overflow: ellipsis;
}

4. transition transform translate

  1. transform是指变换,变形, 是css3的一个属性
  2. tranlate是transform的属性值,指元素进行2D变换,transform:translate(0,100%) 表示从元素的当前位置延y轴方向,向下移动整个元素高度的距离,transform:translate(-20px,0) 表示从元素的当前位置延x轴方向,向左移动20px
  3. transform还有很多其他的属性值如 scale, translate3D, rotate等
  4. transition: 在一定时间内,一组css属性变化到另一组属性的动画展示过程。
div {
  width:100px;
  transition: width 2s;
  -webkit-transition: width 2s;
  /* Safari */
 }
 div:hover {
   width:300px;
 }

5. 画一条0.5px的边框

 .container {
    width: 300px;
    height: 1px;
    transform: scale(0.5);
    background-color: red;
    transform-origin: 50% 100%;
}

传送门:如何画一条0.5px的边框

6. BFC

在将BFC之前先认识一下css的三种布局模型:

  • 流动布局模型
  1. 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度为100%
  2. 内联元素都会在所处的包含元素内从左到右水平分布显示
  • 浮动模型
  1. 给元素设置float属性
  • 层模型
  1. 绝对定位:position: absolute 将元素从文档流中拖出来
  2. 相对定位:position: relative 通过设置 left top right bottom等值设置元素相对文档流的偏移位置
  3. 固定定位:position: fixed
  • BFC
  1. BFC就是块状格式化上下文,属于上述的流动布局模型
  2. BFC决定了如何对其内容进行定位,以及与其他元素的关系和相互作用
  3. 具有BFC特性的元素可以看做是隔离的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且BFC具有普通容器所没有的特性
  4. 可以把BFC理解为一个封闭的大箱子,箱子里面如何翻江倒海都不会影响到箱子外面
  • 形成BFC的条件
  1. body根元素
  2. 浮动元素,float除了none以外的值
  3. 绝对定位元素, position: absolute/fixed
  4. display: inline-block, table-cells, flex
  5. overflow: 除了visible以外的值, hidden/ auto/scroll
  • BFC的常见作用
  1. 阻止外边距折叠 在标准文档流中,块级标签竖直方向的margin,会以大的为准,这就是margin塌陷现象。
.div1 {
    width: 100px;
    height: 100px;
    background-color: red;
    margin-bottom: 20px;
}
.div2 {
    width: 100px;
    height: 100px;
    background-color: blue;
    margin-top: 30px;
}
<body>
  <div class="div1"></div>
  <div class="div2"></div>
</body>
你会发现div1与div2之间在竖直方向上的距离是30,而不是30+20

因为这两个div处于同一个BFC容器下,这里就是body下面,所以div1的下边距与div2的上边距产生了重叠,这不是个Bug,我们可以理解为这是一种规范。 如果不想要这种重叠的话,我们就可以把这两个div放在不同的BFC中。

.container {
   overflow: hidden;
}
.div1 {
    width: 100px;
    height: 100px;
    background-color: red;
    margin-bottom: 20px;
}
.div2 {
    width: 100px;
    height: 100px;
    background-color: blue;
    margin-top: 30px;
}
 <div class="container"><div class="div1"></div></div>
 <div class="div2"></div>

把两个div放在不同的BFC中,间距就变成了50了

  1. 高度塌陷 通常情况下,父元素的高度会被子元素撑开,但是如果子元素为浮动元素的时候,父元素就会发生高度坍塌,上下边界重合,这时候就需要BFC来清除浮动
.container {
    border: 1px solid blue;
    overflow: hidden; //通过这个来触发BFC

}
.div1 {
    width: 100px;
    height: 200px;
    background-color: red;
    float: left;
}
 <div class="container">
   <div class="div1"></div>
</div>

7. 垂直居中

  1. dispay: flex; align-items: center
  2. 父元素设置position:relative,子元素:position: absolute,top: 50%, margin-top: -(子元素高度的一半)
  3. 父元素设置position:relative,子元素:position: absolute,top: 50%, transform: translate(0, -50%)
  4. 父元素设置position:relative,子元素:position: absolute,top: 0, bottom: 0; margin: auto
  5. 利用line-height对文本进行居中

8. 伪元素和伪类的区别-传送门

引入伪类和伪元素是用来修饰不在文档树中的内容

  • 伪类 用于当已有元素处于某个状态时,为其添加对应的样式 ,这个状态是根据用户行为而动态变化的,比如说悬停在某个元素上,可以用:hover来描述这个状态,其他还有:visited, :active, :focus
  • 伪元素 伪元素是用来创建一些不在文档树中的元素并为其添加样式

li:first-child: 伪类 :first-letter: 伪元素

  1. 伪类操作的对象是文档树中已有的元素
  2. 伪元素则创建了一个文档树之外的元素
  3. 伪元素可以用单双冒号
  4. 伪类用单冒号

9. 盒模型

  1. IE盒模型: box-sizing: border-box;属性width包含了boder,padding,content 也就是说 width = border+padding+content。比如css中给一个div写了width: 100px; 那么整个盒子的区域加起来是100px的宽,分配给内容的宽度是小于100的

  2. 标准盒模型: box-sizing: content-box;属性width只是内容content的宽度,不会包含padding和boder的,我们写了width:100px,那也仅仅是content的宽,整个盒子的宽是大于100的。

  3. 我们尽量是使用标准盒模型

10. 响应式布局方案

  1. 响应式布局,就是同一个页面在不同屏幕尺寸下有不同的布局。 传统的就是pc端开发一套,手机端开发一套。而响应式布局就是只要开发一套就够了,缺点就是css就比较重。
  2. 通过检测视口分辨率,针对不同的客户端,在客户端做代码处理,来展现不同的布局和内容 响应式布局方案: 响应式布局方案
  3. 媒体查询 css3媒体查询可以让我们针对不同的媒体类型定义不同的样式,当重置浏览器窗口大小的过程中,页面也会根据浏览器的宽度和高度重新渲染。
@media screen and(max-width: 320px) {
  body{
    font-size: 24px
  }
}
  1. rem布局 rem是css3新增的单位,并且移动端的支持度很高。

11. 三栏式布局方案

12. 提高动画性能