前端CSS重点面试题(强烈安利,面试必了解)

50 篇文章 6 订阅
45 篇文章 6 订阅

目录

基本知识:

面试实例题:


基本知识:

网页三要素:

 html  网页架构的基本元素      素颜的脸
  css   给元素添样式      化妆的脸
  js    给元素绑定事件,给元素添加动态效果    会哭会笑的脸

 块级元素  :
        div(常用来进行网页架构搭建) p  ul>li ol>li
        独占一行
        默认宽度为100%,如果有父元素则默认父元素的100%宽,如果没有父元素,则为视口区的100%,如果父元素也没有设置宽,则按照定义逐级向上查询。如果自身设置了宽,以自身为先。
        元素的高由内容撑起
        块级元素可以包含块级元素/行内元素/块级+行内

行内元素
    span
        与其他元素共享一行
        行内可以包含行内,不建议包含块级这样的编码思维方式
        宽高由自身内容撑起
空元素
    br  hr

块级元素列表
<address>定义地址
<caption>定义表格标题
<dd>定义列表中定义条目
<div>定义文档中的分区或节
<dl>定义列表
<dt>定义列表中的项目
<fieldset>定义一个框架集
<form>创建 HTML 表单
<h1>定义最大的标题
<h2>定义副标题
<h3>定义标题
<h4>定义标题
<h5>定义标题
<h6>定义最小的标题
<hr>创建一条水平线
<legend>元素为 fieldset 元素定义标题
<li>标签定义列表项目
<noframes>为那些不支持框架的浏览器显示文本,于 frameset 元素内部
<noscript>定义在脚本未被执行时的替代内容
<ol>定义有序列表
<ul>定义无序列表
<p>标签定义段落
<pre>定义预格式化的文本
<table>标签定义 HTML 表格
<tbody>标签表格主体(正文)
<td>表格中的标准单元格
<tfoot>定义表格的页脚(脚注或表注)
<th>定义表头单元格
<thead>标签定义表格的表头
<tr>定义表格中的行
行内元素列表
<a>标签可定义锚
<abbr>表示一个缩写形式
<acronym>定义只取首字母缩写
<b>字体加粗
<bdo>可覆盖默认的文本方向
<big>大号字体加粗
<br>换行
<cite>引用进行定义
<code>定义计算机代码文本
<dfn>定义一个定义项目
<em>定义为强调的内容
<i>斜体文本效果
<img>向网页中嵌入一幅图像
<input>输入框
<kbd>定义键盘文本
<label>标签为 input 元素定义标注(标记)
<q>定义短的引用
<samp>定义样本文本
<select>创建单选或多选菜单
<small>呈现小号字体效果
<span>组合文档中的行内元素
<strong>语气更强的强调的内容
<sub>定义下标文本
<sup>定义上标文本
<textarea>多行的文本输入控件
<tt>打字机或者等宽的文本效果
<var>定义变量

可变元素素列表--可变元素为根据上下文语境决定该元素为块元素或者内联元素
<button>按钮
<del>定义文档中已被删除的文本
<iframe>创建包含另外一个文档的内联框架(即行内框架)
<ins>标签定义已经被插入文档中的文本
<map>客户端图像映射(即热区)
<object>object对象
<script>客户端脚本
 

http get post
get  参数携带在浏览器地址栏?后使用&拼接传递  
     get/http://39.97.96.76 HTTP1.1
     /index.php?user="zs"&age="18"
     特点:1.get的请求携带参数是直接拼接在地址栏后面的
                2.get不安全
                3.传输数据量小
post  参数携带在请求体里的
      var parmas = {
          user:'zs',
          password:'123321'
      }
      post(url,data(封装的数据携带在请求体里)).then()=>{}
      特点:1.post请求参数携带在请求体里
                 2.post相对安全
                 3.post传输数据量大

前端单位
绝对单位   px  不会根据父元素/其他元素的大小变化而变化,设置多少就是多少
相对单位   em    像素值将是em值乘以使用em单位的元素的字体大小
                 rem    转化为像素大小取决于页根元素(html)的字体大小,
                16px(html页根元素大小)*1(设置的em值) = 16px(转化后的绝对值)
 
   当使用em单位时,像素值将是em值乘以使用em单位的元素的字体大小。也就是比如当前     元素设置了font-size:20px,padding:10em(10*20=200px) 

 1.盒模型
W3C盒子(内容盒子) 默认

IE盒子(边框盒子)
2.阿里:
实现三列布局:左右两侧固定30px 中间自适应
3.使用css绘制三角形

 浮动
1.布局方式的一种
2.普通流(标准流/文档流): 区分块级/行内/行内块级   margin/padding(标准流中)
  浮动流(float): 
    1.没有 块级/行内/行内块级 这些概念  不会与margin搭配使用
    2.全部都可以设置宽高
3.两列布局  三列布局  字围现象
4.清除浮动三种方式
5.clear: left both right
清除左浮动对元素产生的影响  右  全部(左右) 

 定位(相对定位、绝对定位、粘滞定位、静态定位、固定定位)
1.要素:

   a.定位是否脱离文档流
   b.如何使用,自身/结合其他定位

 面试实例题:

1.如何实现一个元素在另一个元素内的水平垂直居中
    1.margin移动  top、left
    2.父相对定位+子绝对定位,绝对定位top、left为50%,其余使用margin-left和margin-top        移动
    3.父相对+子绝对,且left、top、bottom、right为0,margin:auto
    4.给父元素设置display:flex,且父元素align-items:center;

代码实现:6种方法,具体看带代码内的描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <style>
        /* 1、水平居中(margin:0 auto;) */
        .box1{
            margin: 0 auto;
            width: 400px;
            height: 400px;
            border: 1px solid green;
        }
        .box2{
            width: 100px;
            height: 100px;
            margin: 0 auto;
            background: yellow;
        }
    </style> -->

    <!-- <style>
        /* 水平居中(text-align:center;) */
        .box1{
            width: 400px;
            height: 400px;
            border: 1px  solid green;
            text-align: center;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: yellow;
            display: block;
        }
        .box3{
            width: 100px;
            height: 100px;
            background: yellow;
            display: block;
        }
        .box4{
            width: 100px;
            height: 100px;
            background: yellow;
            display: inline;
        }
    </style> -->

    <!-- <style>
        /* 方法一:水平垂直居中,margin移动  top、left 
            该方法具有一定的局限性,因为其必须要知道子元素本身的宽高*/
        .box1{
            width: 400px;
            height: 400px;
            border: 1px  solid green;
            margin: 0 auto;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: yellow;
            margin: 0 auto;
            margin-top: 150px;
        }
    </style> -->

    <!-- <style>
        /* 方法二: 水平垂直居中: 子元素相对于父元素绝对定位,并且margin值减去自己宽高的一半 */
        .box1{
            width: 400px;
            height: 400px;
            border: 1px  solid green;
            position: relative;
            margin: 0 auto;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: yellow;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -50px;
            margin-left: -50px;
        }
    </style> -->

    <!-- <style>
         /* 方法三:父相对+子绝对,且left、top、bottom、right为0,margin:auto
            该方式不受元素宽高所限制,比较好用(推荐使用) */
        
         .box1{
            width: 400px;
            height: 400px;
            border: 1px  solid green;
            position: relative;
            margin: 0 auto; 
        }
        .box2{
            width: 100px;
            height: 100px;
            background: yellow;
            position: absolute;
            margin: auto;
            left: 0;
            right: 0;
            bottom: 0;
            top:0;
        }
    </style> -->

    <!-- <style>
        /*方法四: 水平垂直居中  diplay:table-cell 
        该方式是将元素转换成表格样式,再利用表格的样式来进行居中(推荐)*/
        /* 1.table-cell不感知margin,在父元素上设置table-row等属性,也会使其不感知height。
         2.设置float或position会对默认布局造成破坏,可以考虑为之增加一个父div定义float等属性。 */
       /* 而且高由元素内容撑起 */
        .box1{
            width: 400px;
            height: 400px;
            border:1px solid red;
            display: table-cell;
            vertical-align: middle;
            margin:0 auto;
        }
        .box2{
            margin:0 auto;
            width: 100px;
            height: 100x;
            background: green;
        }       
    </style> -->

    <!-- <style>
        /* 方法五:水平垂直居中(五)css3中的flex属性
        这个属性很好用,但是绝逼有兼容性问题的,用者要注意 */
        .box1{
            width: 400px;
            height: 400px;
            border:1px solid red;
            margin:0 auto;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .box2{
            width: 100px;
            height: 100px;
            background: green;
        }       
    </style> -->

    <style>
        /* 方式六:水平垂直居中(四) 绝对定位和transfrom
            该方法用最能装逼,用到了css3变形,面试者看到你代码里面有这样的 
            你的逼格瞬间就上去了,当然了  你知道的,逼格的东西是有兼容性问题的 */
        .box1{
            width: 400px;
            height: 400px;
            border:1px solid red;
            margin:0 auto;
            position: relative;
        }
        .box2{
            width: 100px;
            height: 100px;
            position: absolute;
            background: green;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }       
    </style>
    
</head>
<body>
    <div class="box1">
        <div class="box2">我是通过定位table-cell方式居中的</div>
        <div class="box3">3</div>
        <div class="box4">4</div>
    </div>
</body>
</html>

 2.说出元素分类,以及块级与行内区别
块级:div、ul、li h1~h6 p(默认margin)  table form 
行内:span i em a b img strong select 
空元素: br hr 
特殊的行内(能设置宽高): input img 

一,行内元素与块级元素的区别:

1.行内元素与块级元素直观上的区别二、行内元素与块级元素的三个区别

    行内元素会在一条直线上排列(默认宽度只与内容有关),都是同一行的,水平方向排列。

    块级元素各占据一行(默认宽度是它本身父容器的100%(和父元素的宽度一致),与内容无关),垂直方向排列。块级元素从新行开始,结束接着一个断行。

2.块级元素可以包含行内元素和块级元素。行内元素不能包含块级元素,只能包含文本或者其它行内元素。

3.行内元素与块级元素属性的不同,主要是盒模型属性上:行内元素设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效

二、行内元素和块级元素转换

        display:block; (字面意思表现形式设为块级元素)

       display:inline; (字面意思表现形式设为行内元素)

三、inline-block

inline-block 的元素(如input、img)既具有 block 元素可以设置宽高的特性,同时又具有 inline 元素默认不换行的特性。当然不仅仅是这些特性,比如 inline-block 元素也可以设置 vertical-align(因为这个垂直对齐属性只对设置了inline-block的元素有效) 属性。
HTML 中的换行符、空格符、制表符等合并为空白符,字体大小不为 0 的情况下,空白符自然占据一定的宽度,使用inline-block 会产生元素间的空隙。

3.写CSS样式有哪几种方式,优先级最高的是哪一种?
  1.行内样式 开始标签内写style属性  优先级最高
  2.link标签引入外部样式表 href
  3.<style></style>标签  可以写在head内,也可以写在html标签下,也就是可以处于文档任意位置

4.CSS盒模型有哪些  区别
   1.W3C盒子  content-box 宽高直接设置给内容区,盒子整体宽高是一直在变的
     (宽:左右border + 左右padding + 内容区宽)
   2.ie盒子   border-box  宽高直接设置给了整个盒子宽高,如若内容区发生变化,盒子整体的宽高内部构成(padding,border,content)是一直在变的
      (宽:width)

标准 W3C 盒子模型宽高:内容区宽高;

IE 盒子模型宽高: 内边距﹢边界﹢内容区;

 5.浮动以及清除浮动?
  a.脱离文档流/标准流,与原本的标准流已经不在一个层面里
  b.可以使不在一行的元素(块级)到一行排列,块级行内化显示
  清除浮动: 
      父子级:

           1.给被浮动影响的元素设置overflow:hidden
           2.给设置了浮动的元素的后面同级追加一个空元素(br/没有内容的块级元素),给其设置clear:both
           3.伪元素清除浮动法,给被浮动影响的元素设置其伪元素为以下属性
            ::after{
              (给它内部的内容后追加内容)
              content:'';
              display:block;
              clear:both
            }
      兄弟级:
           给被浮动影响的元素设置clear:both(left right both)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动</title>
</head>
<body>
   <!-- 由于father的三个子元素全部都浮动起来了,不处于普通文档流中了,所以内部没有元素来撑起父元素的内容 -->
   <!-- 面试题:father是块级元素 宽100%  高内容决定  浮动——>0(浮动带来的高度塌陷) -->
   <!--面试题 清除浮动对父元素以及兄弟元素带来的影响  clean -->
   <!-- 方法1.overflow:hidden  建议使用
    2.给被影响的元素后面添加一个空元素,给其设置clean:both  不建议使用给文档添加无意义的元素结构
    3.伪对象选择器结合content来使用,给选中元素添加内容 -->
    <div class="father">
        <div class="first">元素一</div>
        <div class="second">元素二</div>
        <div class="third">元素三</div>
        <div class="clean"></div>
    </div>
    <div class="brother">father的兄弟元素</div>
</body>
</html>
<style>
    .first{
        width: 100px;
        height: 100px;
        background-color: red;
        float: left;
        /* 设置浮动,脱离文档流,元素处于一个漂浮状态,已经跟普通文档流不在同一层面上了 */
        /* 漂浮层在上面 */
        /* opacity: 0.5; */
    }
    .second{
        width: 100px;
        height: 100px;
        background-color: rgb(115, 255, 0);
        float: left;
        /* opacity: 0.2; */
    }
    .third{
        width: 100px;
        height: 100px;
        background-color: rgb(183, 0, 255);
        float: left;
    }
    .father{
        border: 2px solid black;
        /* 第一种方法:在父元素清除浮动   */
        /* overflow: hidden; */
    }
    .father::after{
        /* 第三种方法 
        3.伪对象选择器结合content来使用,(给它内部的内容后追加内容) */
        content: '';
        display: block;
        clear: both;
    }
    .brother{
        width: 200px;
        height: 200px;
        background-color:green;
    }
    /* 第二种方法 */
    /* .clean{
        clear: both;
    } */
</style>

6.说说你常见的布局方式 (定位)
   浮动、定位
     相对、绝对、粘滞、固定
   应用:二列、三列(阿里一面、二面)
       float + 中间设置margin
       左右定宽+中间 calc(100% - 左右固定值)
       父元素flex布局 + 左右定宽 + 中间元素flex:1

 float + 中间设置margin:

两列布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="left"></div>
    <div class="center"></div>
    <div class="right"></div>
</body>
</html>
<style>
    .left{
        width: 200px;
        height: 200px;
        float: left;
        background: pink;
    }
    .center{
        height: 200px;
        margin:auto;
        background: red;
    }
    /* .right{
        width: 200px;
        height: 200px;
        float: right;
        background: pink;
    } */
</style>

左右定宽+中间 calc(100% - 左右固定值):

三列布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="left">左边定宽</div><div class="center">中间自适应</div><div class="right">右边定宽</div>
</body>
</html>
<style>
    .left{
        width: 300px;
        height: 800px;
        background-color: pink;
        display: inline-block;
    }
    .center{
        width: calc(100% - 600px);
        height: 800px;
        background-color: rgb(192, 198, 255);
        /* 将设置行内块级显示之后,与其他元素共享一行,但是宽高只是可以设置 */
        display: inline-block;
    }
    .right{
        width: 300px;
        height: 800px;
        background-color: rgb(255, 192, 216);
        display: inline-block;
    }
</style>

两列布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="left">左边元素</div>
    <div class="right">右边元素</div>
</body>
</html>
<style>
    .left{
        width: 100px;
        height: 100px;
        background-color: green;
        float: left;
    }
    .right{
        width: calc(100%-100px);
        height: 100px;
        background-color: red;
    }
</style>

父元素flex布局 + 左右定宽 + 中间元素flex:1

三列布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="parent">
        <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
    </div>
</body>
</html>
<style>
    .parent{
        display: flex;
    }
    .left{ 
        width: 200px;
        height: 200px;
        float: left;
        background: pink;
    }
    .right{
        width: 200px;
        height: 200px;
        float: right;
        background: pink;
    }
    .center{
       flex: 1;
       background: red;
    }

</style>

两列布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="parent">
        <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
    </div>
</body>
</html>
<style>
    .parent{
        display: flex;
    }
    .left{ 
        width: 200px;
        height: 200px;
        float: left;
        background: pink;
    }
    /* .right{
        width: 200px;
        height: 200px;
        float: right;
        background: pink;
    } */
    .center{
       flex: 1;
       background: red;
    }

</style>

7.flex布局?
   也可以理解为块级元素行内显示的方法,主轴交叉轴概念来去设置
   flex-direction
   justify-content  主轴对齐方式
   align-items  交叉轴对齐方式    等等...........

8.如何实现两列布局或三列布局?
  
9.display:none和visiblity:hidden 的区别

注意:回流必将引起重绘,而重绘不一定会引起回流。

回流与重绘

1. 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程成为重绘。

2. 当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

   display:none 不占页面空间,visiblity:hidden 占据原先页面空间。
   display:none 引起页面重绘和回流, visiblity:hidden 只引起页面重绘。
   display:none元素及其子元素都将隐藏,而visiblity:hidden元素的子元素却可设         置      visibility: visible 显示出来

10.布局原则:从上到下,从外到内
header
content/middle
footer
定位优于浮动
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值