前端面试知识点【CSS篇】

CSS

1、垂直水平居中方式

知道元素的宽高:

absolute + 左上定位50% + margin:负的尺寸的一半

absolute+四周定位0+margin:auto

absolute+左上calc定位

元素宽高未知:

absolute+左上定位50% + transform:-50%

flex布局:

flex布局+justify-content+align-items

<div class="father">
    <div class="son">

    </div>
</div>
知道居中元素的宽高

1、父元素:relative,子元素:absolute,top:50%,left:50%,margin-left:-width/2px,margin-top:-height/2px

(absolute+左上定位50%+margin:负的尺寸的一半)

.father{
    position: relative;
    width: 500px;
    height: 500px;
    background-color: red;
}
.son{
    position: absolute;
    width: 200px;
    height: 200px;
    top: 50%;
    left:50%;
    margin-top: -100px;
    margin-left:-100px;
    background-color: yellow;
}

2、父元素:relative 子元素:absolute,top:0px,right:0px,bottom:0px,left:0px,margin:auto

(absolute+四周定位0+margin:auto)

.father{
    position: relative;
    width: 500px;
    height: 500px;
    background-color: red;
  }
  .son{
    position: absolute;
    width: 200px;
    height: 200px;
    top: 0px;
    right: 0px;
    bottom: 0px;
    left: 0px;
    margin: auto;
    background-color: yellow;
  }

3、父元素:relative 子元素:absoulte,top:calc(50% - 高度的一半),left:calc(50% - 宽度的一半)

(absolute+左上calc定位)

  .father{
    position: relative;
    width: 500px;
    height: 500px;
    background-color: red;
  }
  .son{
    position: absolute;
    width: 200px;
    height: 200px;
    top:calc(50% - 100px);
    left:calc(50% - 100px);
    background-color: yellow;
  }
居中元素的宽高未知

1、父元素:relative 子元素:absolute,top:50%,left:50%,transform:translate(-50%,-50%)

(absolute+左上定位50%+transfrom(负的50%))

  .father{
    position: relative;
    width: 500px;
    height: 500px;
    background-color: red;
  }
  .son{
    position: absolute;
    width: 200px;
    height: 200px;
    top:50%;
    left:50%;
    transform: translate(-50%,-50%);
    background-color: yellow;
  }
flex布局

父元素:display:flex justify-content:center,align-items:center,不需要对子元素进行任何的设置

(flex布局、justify-content、align-items)

  .father{
    display: flex;
    width: 500px;
    height: 500px;
    align-items: center;
    justify-content: center;
    background-color: red;
  }
  .son{
    width: 200px;
    height: 200px;
    background-color: yellow;
  }
table-cell布局

父元素:display:table-cell,vertical-align:center,text-align:center 子元素:display:inline-block

.father{
    display: table-cell;
    width: 500px;
    height: 500px;
    vertical-align: middle;
    text-align: center;
    background-color: red;
  }
  .son{
    display: inline-block;
    width: 200px;
    height: 200px;
    background-color: yellow;
  }

2、伪元素选择器

::first-line 伪元素

::first-line 伪元素用于向文本的首行添加特殊样式。

::first-letter 伪元素

::first-letter 伪元素用于向文本的首字母添加特殊样式。

CSS - ::before 伪元素

::before 伪元素可用于在元素内容之前插入一些内容。

CSS - ::after 伪元素

::after 伪元素可用于在元素内容之后插入一些内容。

CSS - ::selection 伪元素

::selection 伪元素使鼠标选中的元素展示对应的样式。

3:flex布局都有什么属性

flex布局主要有6个属性:

//决定主轴的方向(项目的排列方向)
flex-direction:  row | row-reverse | column | column-reverse;		//(默认值:row)主轴为水平方向,起点在左端,column:主轴为垂直方向
//定义如果一条轴线排不下,如何换行
flex-wrap:	nowrap | wrap | wrap-reverse;	//(默认值:nowrap)不换行,wrap:换行,第一行在上方
//flex-direction和flex-wrap的简写形式
flex-flow:row nowrap
//定义项目在主轴上的对齐方式
justify-content:flex-start | flex-end | center | space-between | space-around;	
//(默认值:flex-start)左对齐,右对齐,居中对齐,两端对齐,每个项目两侧的间隔相等。
//定义项目在交叉轴上如何对齐
align-items:flex-start | flex-end | center| basline | stretch
//起点对齐,终点对齐,中点对齐,基于第一行文字的基线对齐,(默认值:streth)若项目未设置高度或设为auto,则占满整个容器的高度。
//定义多根轴线的对齐方式,如果只有一根轴线,则该属性不起作用
align-content:flex-start | flex-end | center | space-between | space-around | stretch
//起点对齐,终点对齐,中点对齐,与交叉轴两端对齐,每根轴线两侧间隔相等,(默认值:stretch)轴线占满每个交叉轴

3、flex: 1是什么

flex实际上是flex-grow、flex-shrink和flex-basis三个属性的缩写。

flex-grow:元素的放大比例,默认为0,不放大

flex-shrink:元素的缩小比例,默认为0,不缩小

flex-basis:元素占据的主轴空间,默认为auto,是项目的实际尺寸。也可以根据需要自己设置宽高。

flex的默认值为flex:0 0 auto。

flex:1相当于设置了flex:1 1 auto。

flex-grow属性为1,该元素将会占据容器中所有的剩余空间,所以可以轻易地做到footer元素一直保持在底部的效果。

<html lang="en">
  <body>
    <header></header>
    <div class="content"></div>
    <footer></footer>
  </body>
  <style>
    html,body{
      margin: 0;
      padding: 0;
      height: 100%;
      width: 100%;
    }
    body{
      display: flex;
      flex-direction: column;
    }
    header{
      flex: 0 0 auto;	//将header和footer的flex都设置为0,content的flex设置为1,则content会占用所有的剩余空间,以此实现footer一直在底部。
      height: 60px;
      background-color: skyblue;
    }
    .content{
      flex: 1 1 auto;
      border: 1px solid red;
    }
    footer{
      flex: 0 0 auto;
      height: 70px;
      background-color: orange;
    }
  </style>
</html>

在这里插入图片描述

4、实现两栏布局的方法

1、浮动方法

将左边元素的width设置为200px,并设置其向左浮动

将右边元素的margin-left设置为200px

2、利用 flex布局

设置右边元素的放大比例(flex-grow)为1

3、利用绝对定位

将父元素设置为相对定位(relative)

左边的元素设置为绝对定位(absolute)

右边元素的 margin-left 设置为 200px

5、盒模型用什么属性改变成IE盒模型?

标准盒模型,包括外边距(margin)、边界(border)、内边距(padding)、内容(content)
请添加图片描述

盒模型由内到外的顺序:content<padding<border<margin

盒模型使用box-sizing属性变成IE盒模型

box-sizing有两个属性,设置为border-box时是标准盒模型,设置为content-box是怪异盒模型。

6、position:absolute和transform的区别

依赖的基准不同

绝对定位(absolute)元素的基准点是其有定位元素的祖先元素,祖先都没有,就以body为基准

transform做偏移是相对于自身的中心点而言的。

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

7、position的属性,realitive与absolute都是以什么为中心的

position的属性:

​ static:静态定位,是position属性的默认值

​ fixed:绝对定位,相对于浏览器左上角进行定位

​ relative:相对定位,相对于自身定位

​ absolute:绝对定位,,相对于其有relative的父元素左上角,如果父元素没有设置relative,则一直追溯祖辈元素,一直到body。

8、BFC块级格式化上下文(重点)

定义:

BFC (Block Formatting Context) 块级格式化上下文,它产生一个独立的渲染区域。

BFC基本概念:BFC是CSS布局的一个概念,是一块独立的渲染区域,是一个环境,里面的元素不会影响到外部的元素 。

BFC 特性(功能)
  1. 使 BFC 内部浮动元素不会到处乱跑;
  2. 和浮动元素产生边界。

如何触发BFC:

满足以下任一条件,才会触发BFC

**根元素:**body(最大的一个BFC)

**浮动:**float不为none(left、right)

**定位:**position不是relative或static(absolute、fixed)

**行内块:**display为inline-block

弹性盒模型:display为flex

设置overflow,不为visible(hidden、auto)

9、常用的选择器

类选择器

ID选择器

标签选择器

分组选择器

后代选择器

兄弟选择器

通用选择器

10、id和class的区别?

1、id在页面结构中是唯一的,class是重复可用的。

2、id的优先级要比class的优先级要高。

3、id可以作为锚点,搭配a标签做页面内目录的跳转

11、display与visibility区别

相同点:display和visibility都有元素隐藏的意思

不同点:display是元素隐藏,隐藏的元素不占文档流,而visibility隐藏的元素仍然占文档流

12、有哪些属性会脱离文档流

文档流:当前可显示元素在排列时所占的位置。

​ 一共有三个属性会使元素脱离文档流:

​ (1)浮动

​ (2)绝对定位

​ (3)固定定位

​ 元素脱离文档流会导致父元素高度塌陷,要修复高度塌陷问题,可以将子元素与父元素放在同一个BFC中

13、rem

rem表示与根元素的比例

  <body>
    <div class="test1">123</div>
    <div class="test2">456</div>
  </body>
  <style>
    html{
      font-size: 30px;
    }
    .test1{
      font-size: 2rem;	//2rem表示2倍的根元素尺寸
    }
    .test2{
      font-size: 30px;
    }
  </style>

在这里插入图片描述

14、行内元素和块元素有什么区别

块元素

常见的块元素:div、h1~h6、hr、p、ul、ol、li、header、footer

行内元素

常见的行内元素:a、i、em、strong、b、br

行内元素和块元素的区别

1、块级元素可以独占一行,行内元素不能独占一行,多个行内元素共享一行。

2、块级元素可以设置对应的宽高和内外边距,而行内元素不能设置宽高(由内容撑开)而且只能设置水平方向的内外边距。

3、块级元素可以嵌套块级元素和行内元素。行内元素不能嵌套块级元素。

行内元素和块元素转换

通过display进行转换:

display:block //块元素

display:inline //行内元素

display:inline-block //行内块元素,既可以获得行内元素的属性,又具有块元素的属性

15、盒子塌陷的解决方法

盒子塌陷:本该是盒子内部的元素跑到了盒子外部。

为什么会出现盒子塌陷?

当父元素没设置足够大小的时候,而子元素设置了浮动的属性,子元素就会跳出父元素的边界(脱离文档流),尤其是当父元素的高度为auto时,而父元素中又没有其它非浮动的可见元素时,父盒子的高度就会直接塌陷为零, 我们称这是CSS高度塌陷

盒子塌陷的解决方法

1、简单粗暴一点:盒子大小写死,给每个盒子设置固定的宽高。但不能自适应。

2、给父元素也设置浮动,让父元素也脱离文档流。但不易维护。

3、使用BFC布局

4、给父元素添加border

5、给父元素设置padding-top

16、伪类和伪元素的区别

伪类是用来为选择器添加一些特殊的效果,它不存在于文档中。比如:hover :active :visited :link :focus

伪元素是用来创建不存在于文档中的元素。比如::before ::after

总结:

  1. 伪类和伪元素都是存在于文档之外的元素,不出现在DOM树中。
  2. 伪类用单冒号表示,伪元素用双冒号表示

17、实现三栏布局的方法

在这里插入图片描述

1、浮动布局(流体布局)

div注意先写左右,再写中间。否则布局会出错

  • 左栏,左浮动
  • 右栏,右浮动
  • 中间栏,margin-left:margin-right:间距超过两侧的宽度
.left {
    float: left;
    width: 200px;
    height: 200px;
    background-color: aqua;
  }
  .right { 
    float: right;
    width: 200px;
    height: 200px;
    background-color: aquamarine;
  }
  .mid {
    background-color: cadetblue;
    height: 200px;
    margin: 0 220px;
  } 
2、BFC布局

div布局:左右中

  • 左栏:左浮动
  • 右栏:右浮动
  • 中间栏:开启BFC(overflow:hidden或display:flex)
 .left {
    float: left;
    width: 200px;
    height: 200px;
    background-color: aqua;
     
  }
  .right { 
    float: right;
    width: 200px;
    height: 200px;
    background-color: aquamarine;
    
  }
  .mid {
    background-color: cadetblue;
    height: 200px;
    overflow: hidden 
    /* display: flex */
  } 
3、flex布局

div布局:左中右

  • 父容器设置flex布局

  • 左栏:flex:0 0 auto

  • 右栏:flex:0 0 auto

  • 中间栏:flex:1 1 auto

  .container{
    display: flex;
  }
 .left {
    flex:0 0 auto;
    width: 200px;
    background-color: aqua;
    margin-right: 20px;
  }
  .right {
    flex: 0 0 auto;
    width: 200px;
    background-color: aquamarine;
    margin-left: 20px;
  }
  .mid {
    flex: 1 1 auto;	/*该元素将会占据容器中所有的剩余空间*/
    background-color: cadetblue;
    height: 200px;
  } 
4、定位

div布局:不限制

  • 父容器,定位relative
  • 左栏:定位absolute,top:0,left:0
  • 右栏:定位absolute,top:0,right:0
  • 中间栏:不设定位,设置margin-left,margin-right大于两侧宽度
  .container {
    position: relative;
  }
  .left {
    position: absolute;
    top: 0;
    left: 0;
    width: 200px;
    height: 200px;
    background-color: aqua;
  }

  .right {
    position: absolute;
    top: 0;
    right: 0;
    width: 200px;
    height: 200px;
    background-color: aquamarine;
  }

  .mid {
    background-color: cadetblue;
    height: 200px;
    margin: 0 220px;
  }
5、表格布局

div布局:不限制

  • 父容器:display:table,width:100%
  • 左栏:display:table-cell,设置宽、高
  • 右栏:display:table-cell,设置宽、高
  • 中间栏:display:table-cell,设置高度
  .container {
    display: table;
    width: 100%;
  }
  .left,.right,.mid{
    display: table-cell;
  }
  .left {
    width: 200px;
    height: 200px;
    background-color: aqua;
  }

  .right {
    width: 200px;
    height: 200px;
    background-color: aquamarine;
  }

  .mid {
    height: 200px;
    background-color: cadetblue;
  }

18、什么是标准盒模型?什么是怪异盒模型?

首先,盒模型由外到内是由外边距、边界、内边距、内容组成的。其中标准盒模型与怪异盒模型的区别就是,在标准盒模型中,他的宽度表示的内容区域的宽度,然后怪异盒模型中,宽度表示的是内容区+border+padding的总共宽度。然后编写代码的过程中,只要在html文档首部添加了doctype声明,所使用的就是一个标准的盒模型。如果不添加声明的话,就由浏览器自己决定使用哪一种盒模型。(怪异盒模型:IE6以下、包括一些自适应布局的UI框架)

盒模型转换:在CSS3中新增了一个属性:box-sizing:content-box(默认:标准盒模型)、border-box(怪异盒模型)、inherit(从父元素继承)

19、css3实现动画的两种方式

css3中实现动画的两种方式分别是:1、分别利用transition属性和transform属性来设置过渡和形状;2、利用动画属性animation设置动画效果。

1、transition实现渐变动画

​ transition实现动画的属性:

  1. property:填写需要变换的css属性
  2. duration:完成过渡效果需要的时间单位
  3. timing-function:完成效果的速度曲线
  4. delay:动画效果的延迟触发时间(ms)

timing-function的取值:

属性描述
linear匀速运动
ease从慢到快再到慢
ease-in慢慢变快
ease-out慢慢变慢
ease-in-out先变快再变慢,渐隐渐现效果
  <style>
    .move{
      width: 200px;
      height: 200px;
      border: 5px solid yellow;
      background-color: green;
      transition-property:width,height,background-color,border;	//	要进行变换的属性
      transition-duration: 3000ms;	//要变换的时间
      transition-timing-function: ease;		//变换的速度
    }
    .move:hover{
      width: 400px;
      height: 400px;
      background-color: yellow;
      border: 5px solid green;
    }
  </style>
2、transform转变动画

transform一般是对元素进行旋转、缩放、倾斜、移动这四类操作。一般配合transition一起使用。

transform的相关属性:

  1. none:定义不进行任何转换,一般用于注销掉该变换
  2. transform-functions:
    1. (旋转)rotate:主要分为2D和3D旋转。2D旋转:rotate(angle);3D旋转:围绕原地到(x,y,z)的直线旋转,rotate(x,y,z,angle)
    2. (缩放)scale:定义倍数缩放,大于1放大,小于1缩小。scaleX()仅水平缩放,scaleY()仅垂直缩放。
    3. (倾斜)skew:主要对元素样式倾斜。skew(x-angle,y-angle),沿着x轴和y轴的2D倾斜转换。
    4. (移动)translate:移动元素。translate(x,y),在x轴和y轴上移动元素。
  <style>
    .move{
      width: 200px;
      height: 200px;
      border: 5px solid yellow;
      background-color: green;
      transform: none;
      transition-property: transform;
      transition-duration: 2000ms;
      transition-timing-function: ease;
    }
    .move:hover{
      transform: scale(0.8) rotate(45deg) translate(300px,20px) skew(30deg);
      width: 200px;
      height: 200px;
      background-color: yellow;
      border: 5px solid green;
    }
  </style>
3、animation实现自定义动画

为了实现更灵活的动画效果,css3实现了自定义动画功能。

animation的属性:

  1. name:要绑定到选择器上的keyframe名称
  2. duration:完成该动画要花费的时间,毫秒
  3. timing-function:完成动画效果的速度曲线。
  4. delay:设置动画在开始之前的延迟
  5. iteration-count:设置动画执行的次数,infinite为无限次。
  6. direction:是否轮询反向播放动画。默认为normal,正常播放;alternate,轮流反向播放。
<style>
    .move{
      width: 200px;
      height: 200px;
      border: 5px solid yellow;
      background-color: green;
      transform: none;
    }
    .move:hover{
      animation-name: bounce;
      animation-duration: 3000ms;
      animation-timing-function: linear;
      animation-iteration-count: infinite;
      background-color: yellow;
      border: 5px solid green;
    }
    @keyframes bounce{
      0%{
        top:0px;
        width: 200px;
        height:200px;
      }
      50%{
        top:200px;
        width:500px;
        height: 500px;
      }
      100%{
        top: 0px;
        width: 200px;
        height: 200px;
      }
    }
  </style>

20、响应式布局(@media媒体查询)

媒体查询语法:

@media screen and|not|only (触发条件){

}

例:当max-width小于800px时执行响应式

@media screen and (max-width:800px){
	
}

21、web中的像素单位

元素单位:px、vw、vh、%,rem

字体单位:px、em、rem

vw:view width(可视宽度)

vh:view height(可视高度)

当前页面宽高分别被分为100份,1份就是1vw/vh

eg:屏幕像素为1920*960,那么1vw就是19.2,1vh就是9.6

em是一个相对单位。相对于当前对象内文本的font-size,如果当前文本的字体尺寸没有设置,则相对于浏览器的默认字体尺寸

若父元素设置字体大小为16px,那么子元素的2em就是32px

22、rem与em的区别

rem的用法与em相同,但rem是相对于根元素进行计算。em是相对于当前元素或父元素的字体大小

rem可以用作设置元素的宽高。以html中font-size为基础计算。

em是相对于自身或父元素进行换算,当层级越深,换算就越复杂。rem是相对于根元素进行换算,避免了这个问题。

23、渐进增强与优雅降级

渐进增强:

先针对低版本浏览器进行构建页面,先满足基本的功能。然后再针对高版本浏览器进行效果、交互的改进,以达到更好的用户体验。

优雅降级:

一开始就是构建完整的功能,然后再针对低版本浏览器进行兼容。

区别:

优雅降级是从复杂的情况开始,然后试图减少用户体验的设置。渐进增强是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值