2023最新HTML+css面试题

1,834 阅读9分钟

HTML面试题

1、HTML 面试题

以下是针对 HTML 相关的面试题,一般来说这地方不会出太多题,面试官也不愿意花太多时间在这上面。

1.1 如何理解 HTML 语义化?

  • 让人更容易读懂(增加代码可读性)。 -让搜索引擎更容易读懂,有助于爬虫抓取更多的有效信息,
  • 在没有 CSS 样式下,页面也能呈现出很好地内容结构、代码结构。

1.2 script 标签中 defer 和 async 的区别?

  • script :会阻碍 HTML 解析,只有下载好并执行完脚本才会继续解析 HTML。
  • async script :解析 HTML 过程中进行脚本的异步下载,下载成功立马执行,有可能会阻断 HTML 的解析。
  • defer script:完全不会阻碍 HTML 的解析,解析完成之后再按照顺序执行脚本。

可以查看另一篇文章详细关于script 标签

1.3 从浏览器地址栏输入 url 到请求返回发生了什么

  1. 输入 URL 后解析出协议、主机、端口、路径等信息,并构造一个 HTTP 请求。
  • 强缓存。
  • 协商缓存。
  1. DNS 域名解析。

  2. TCP 连接。

    总是要问:为什么需要三次握手,两次不行吗?其实这是由 TCP 的自身特点可靠传输决定的。客户端和服务端要进行可靠传输,那么就需要确认双方的接收和发送能力。第一次握手可以确认客服端的发送能力,第二次握手,确认了服务端的发送能力和接收能力,所以第三次握手才可以确认客户端的接收能力。不然容易出现丢包的现象。

  3. http 请求。

  4. 服务器处理请求并返回 HTTP 报文。

  5. 浏览器渲染页面。

image.png

  1. 断开 TCP 连接。

1.4html5有哪些新特性、移除了那些元素 新特性?

  • 拖拽释放(Drag and drop) API
  • 语义化更好的内容标签(header,nav,footer,aside,article,section)
  • 音频、视频API(audio,video)
  • 画布(Canvas) API
  • 地理(Geolocation) API
  • 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
  • sessionStorage 的数据在浏览器关闭后自动删除
  • 表单控件,calendar、date、time、email、url、search
  • 新的技术webworker, websocket, Geolocation 移除的元素:
  • 纯表现的元素:basefont,big,center,font, s,strike,tt,u;
  • 对可用性产生负面影响的元素:frame,frameset,noframes;

1.5请描述一下cookies,sessionStorage 和localStorage的区别

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密) cookie数据始终在同源的http请求中携带(即使不需要),即会在浏览器和服务器间来回传递 sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存 存储大小: cookie数据大小不能超过4k sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大 有期时间: localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据 sessionStorage 数据在当前浏览器窗口关闭后自动删除 cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

1.6简述一下src与href的区别

src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。 src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求 src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。

<script src =”js.js”></script>
  • 浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片 和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头 部。 href是Hypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链 接)之间的链接,如果我们在文档中添加
<link href="common.css" rel="stylesheet"/>
  • 那么浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么 建议使用link方式来加载css,而不是使用@import方式。

基础知识点

1.7字符编辑

<!-- 一字符=2个字节
    w3c公布了标准的字符吗UTF-8,字符为存储的最小的单位
    gbk:中文编码
    gb2312简体中文
    big5繁体中文
    iso8895-1西欧字母 -->
1.8html 网站logo
<link rel="icon" type="image/png" href=""> 
<link rel="icon" type="image/x-icon" href=""> 
<link rel="icon" type="image/jpeg" href=""> 
<link rel="icon" type="image/gif" href="">

<ul>
  <li>link:引用外部文件</li>
  <li>rel:定义当前文档与被链接文档的关系</li>
  <li>type:定义被链接文档的mine类型</li>
  <li>定义链接文档的路径</li>
  </ul>
  <div>
  标题栏图标的设置:16x16像素
  <li>网站根目录下放一个favicon.ico文件。浏览器会自动显示在标题栏中</li>
  <li>使用icon图标作为标题栏的图标</li>
  <li>使用ico生成器生成图标</li>
  </div>

1.9头部关键字与描述与页面自动跳转

<meta name="keywords" content="美团,京东,生活,服务">
<meta name="description" content="">
<meta http-equiv="refresh" content="5;url=https://www.jd.com/#ns">
<div>
        关键字与描述: 
        关键字与描述不是给人看的,是供搜索引擎使用
        关键字与描述是网站优化很重要的部分
        关键字:
        meta标签
        name="keywords"
        content="可以使用多个,建议不要超过5个,用英文逗号分隔"
        描述:
        meta标签
        name="description"
        content="建议不要超过100字"
    </div>

<div>10秒后跳转至百度首页</div>

CSS 基础知识点-面试题

基础知识点

1.css三大特性

 css就是层叠样式表
    三大特性:
    1继承性
    只能继承:
    color,text-开头的,font-开头的,line-开头的,
    宽度会继承,高度不会继承

2选择器优先级

权重/权重值
    由弱到强选择器的优先级
                            0           1       10             100      1000    99999
    继承性-浏览器自带的样式-通用选择器-标签选择器/-class选择器-id选择器-行内样式-!import.
    选择器越精确,优先级越高
    同一级别选择器,越在后面优先级越高

3序列选择器

first-child{
            color: red;
        }
last-child{
            color: blueviolet;
        }
nth-child(-3+n){
            background: #adc549;
        }

4.伪元素

::after{
            content: '111';
            display: block;
            /* border-bottom: 1px #cccccc solid; */
        }
::before{
            content: '111';
            display: block;
        }

5.动态伪类

a:hover{
            color: #000000;
            font-size: 18px;
            text-decoration: none;
        }
        a:active{
            color: green;
        }
        input:focus{
            color: green;
        }

6.选择器

>:第一子元素
    +:向下找相邻子元素
    ~:向下找相邻兄弟元素
    span[class='test']    =>匹配所有带有class类名testspan标签
​
    span[class *='test']  =>匹配所有包含了test字符串的class类名的span标签
​
    span[class]               =>匹配所有带有class属性的span标签
​
    [class='all']               =>匹配页面上所有带有class='all'的标签
​
    [class *='as']             =>匹配页面上所有class类且类名带有as字符串的类的标签

7.字体

 <!-- 多个字体样式用逗号隔开,解析时会从前往后识别字体样式,没有的会是浏览器自带字体样式 -->
    <!-- 如果中间有空格或者是中文字体需要用引号包裹 -->
    <div style="font-family: '宋体', '楷体';">胖墩墩1</div>
-------------
<div style="font-weight: 100;">冰墩墩</div>
    <div style="font-weight: 400;">冰墩墩</div>
    <div style="font-weight: bold;">冰墩墩11</div>
    <div style="font-weight: bolder;">冰墩墩22</div>
    <div style="font-weight: normal;">冰墩墩</div>
​
------------
@font-face {
            font-family: "myfont";
            src: url("../../../fonts/徐静蕾字体.ttf");
            /* url("../../../fonts/徐静蕾字体.wotf"); */
        }
        *{
            font-family: "myfont";
        }
        div{
            font-style: initial;
            font-style: italic;
            font-style: oblique;
            font-family: "myfont";
        }
​
​
 字体的引用技术:
    为了保证网站字体的特殊显示,我们需要使用css把自己的字体引用到浏览器中
    格式(ttf,wotf,otf)
    <div>
        我要学前端
    </div>
​
--------
text-decoration: underline;
            text-decoration: overline;
            text-decoration: none;
​
​
---------
超过显示...
.pp{
            text-overflow: ellipsis;
            width: 80px;
            white-space:nowrap;
        }

8.背景简写

/* background:#ccc url("https://b.appsimg.com/upload/momin/2020/06/16/82/1592278113502.png") repeat 定位/200px 100px  scroll; */

9.弹性盒子

.box{
            width: 400px;
            height: 400px;
            background: bisque;
            margin: 50px auto;
            overflow: hidden;
            padding-left: 0;
            display: flex;
            /* 水平正向,默认值。 */
            flex-direction: row;
            /* 水平反向排列 */
            /* flex-direction: row-reverse; */
            /* 表示垂直正向,交叉轴为水平正向 */
            /* flex-direction: column; */
            /* 表示垂直反向反向 */
            /* flex-direction: column-reverse; */
​
            /* 换行 */
            /* 默认值,不换行 */
            flex-wrap: nowrap;
            /* 交叉轴正向换行 */
            /* flex-wrap: wrap; */
            /* 交叉轴反向换行 */
            /* flex-wrap: wrap-reverse; */
​
            /* 主轴方向的对齐方式 */
            /* 默认值,开始方向对齐 */
            /* justify-content: flex-start; */
            /* 结束方向对齐 */
            /* justify-content: flex-end; */
            /* 居中对齐 */
            /* justify-content: center; */
            /* 两端对齐 */
            /* justify-content: space-between; */
            /* 左右等间距对齐 */
            /* justify-content: space-around; */
            /* 等间距对齐 */
            justify-content: space-evenly;
            /* 单行交叉轴对齐方式 */
            /* 交叉轴开始方向对齐  */
            /* align-items: flex-start; */
            /* 结束方向对齐 */
            /* align-items: flex-end; */
            /* 居中方向对齐 */
            /* align-items: center; */
            /* 文字基线对齐,略微往上了 */
            /* align-items: baseline; */
            /* 如果项目元素没有设置高度,将占满整个容器高度,默认值 */
            /* align-items: stretch; */
            
            /* 多行内容在交叉轴对齐方式 */
            
            /* 交叉轴开始方向对齐  */
            /* align-content: flex-start; */
            /* 结束方向对齐 */
            /* align-content: flex-end; */
            /* 居中方向对齐 */
            /* align-content: center; */
            /* 两端对齐 */
            /* align-content: space-between; */
            /* 左右等间距对齐 */
            /* align-content: space-around; */
            
            /* 默认值,每一项元素会占满容器 */
            /* align-content: stretch; */
​
            
        }
        .q{
            /* width: 120px; */
            width: 240px;
            height: 50px;
            line-height: 50px;
            background: red;
            text-align: center;
            /* margin-top: 10px; */
            margin: 10px;
            list-style: none;
        }
        /* 调整每一个元素在弹性盒子中的顺序,默认为0, */
        /* 弹性盒子的扩展比例 */
        /* 弹性盒子收缩的比例 */

10.盒子模型

块级元素相邻的上下设置外边距时,会选取最大的一个外边距
    行级元素只有左右有外边距,上下没有外边距
    行内块级元素跟块级元素一样
    盒子背景会包括边框与里面内容
    没有设置怪异盒子时,实际宽高等于设置的宽高加上内边距加上边框
    内间距padding:三值时:上 左右 下
    外边距margin:
    盒子与盒子的间距兄弟关系
    重叠性当两个盒子为兄弟结点时,margin在垂直方向

11.浮动

<!-- 浮动:让块级元素能够待在一行 文字没有浮动时,会围绕浮动周围-->
​
    <!-- 浮动特点:
    1浮动元素会脱离正常文档流,浮动元素会像浮云一样浮起来。
    2浮动元素后面正常元素会自动补位。
    3浮动元素会被父元素所约束,所以浮动没有完全脱离文档流。 -->
    
    <!-- 动的特点:
    当浮动元素上一行是正常元素,这个浮动元素只能待在当前行,不能跑到上一行。
    左浮动:元素会向左跑,会从上一行最右边跑出来,直到遇到有浮动的元素,才会停止。
    右浮动:元素会向右跑,会从上一行最左边跑出来,直到遇到有浮动的元素,才会停止。 -->
​
    <!-- 清除浮动:
    清除元素哪一侧不能右浮动。
    文档加载顺序,从上往下加载,样式与元素内容一起加载. -->
    <!-- 高度塌陷:由于元素中子元素设置了浮动,会造成父元素高度塌陷 -->
    <!-- 防止高度塌陷: -->
    <!-- 直接给父元素设置高度 -->
    <!-- 用伪元素加上清除浮动 -->

12.定位

<!-- 定位:规定元素的位置 -->
    <!-- 定位用于没有规律的元素而布局 -->
    <!-- 定位的三种类型:相对定位,绝对定位,固定定位 -->
    <!-- 相对定位: 脱离文档流 但没完全脱离文档流 原来的位置还会保留 相对于自己原来的位置定位-->
    <!-- 绝定定位:会完全脱离文档流,以最近含相对定位的父级元素为参考,进行定位,原来的位置不会保留,如果父级元素没有含相对定位,会相对于浏览器进行定位 -->
    固定定位:
    <!-- 层级z-index:默认为0,最高为999. -->

13.进阶

1过渡

.box{
            width: 200px;
            height: 200px;
            background: pink;
            transition-property: all;
            transition-duration: 3s;
            transition-timing-function: linear;
            transition-delay: 200ms;
            transition: all 2s ease-in 500ms;
        }
        .box:hover{
            width: 400px;
            height: 400px;
            transform: translate(50px,50px);
        }
        <div class="box"></div>

2位移

.container{
            width: 100%;
            height: 500px;
            background: red;
        }
        .box{
            width: 200px;
            height: 200px;
            background: tomato;
            transition: all 3s;
        }
        .container:hover .box{
            /* transform: translate(50px,50px); */
            /* transform: rotate(90deg); */
            /* transform: rotateX(45deg); */
            transform: rotateY(60deg);
            /* transform: scale(0.5); */
            /* transform: scaleX(1.5); */
            /* transform: skewX(45deg); */
        }

3渐变

.box{
            width: 300px;
            height: 30px;
            border: 1px solid red;
            margin: 50px auto;
            background: linear-gradient(135deg,#ddcc54,red,#aaff88);
            background: linear-gradient(315deg,#ddcc54,#aaff88);
            background: linear-gradient(270deg,#ddcc54 20%,#aaff88 45%,green 60%,blue);
        }
        .box2{
            width: 600px;
            height: 40px;
            border: 1px solid red;
            margin: 20px auto;
            /* background: linear-gradient(90deg,rgba(241,132,22,1) 15%,rgba(233,199,144,0) 30%,rgba(152,168,177,0) 60%,rgba(22,33,11,1)); */
            /* 重复渐变 */
            background: repeating-linear-gradient(90deg,green,red 50%);
        }
        .box1{
            width: 400px;
            height: 400px;
            border: 1px solid red;
            margin: 50px auto;
            border-radius: 50%;
            /* 圆形渐变 */
            background: radial-gradient(circle,#711ebe,#00fff2,red,blue);
            /* 椭圆形渐变 */
            /* background: radial-gradient(ellipse,#711ebe,#00fff2,red); */
        }
        
        
        <div class="box1">
​
    </div>
    <div class="box2">
​
    </div>

4动画

<style>
        .container{
            /* animation: name(名称) duration(动画完成的时间) timing-function (完成的速率ease/linear/ease-in/ease-out) delay (启动时延迟的时间)
            iteation-count(播放的次数n/infinite) direction(是否反向播放normal/reverse反向播放/alternate/正反交替播放) fill-mode (forwards结束后停的状态)play-state;
            animation-play-state: paused|running;指定暂停的动画 */
            /* animation: name duration timing-function delay iteration-count direction fill-mode; */
            width: 200px;
            height: 200px;
            background: tomato;
            animation: move 3s  alternate  backwards;
        }
        @keyframes move{
            form{
                transform: translateX(0);
            }
            to{
                transform: translateX(100px);
            }
        }
    </style>
    
    <!-- js动画
    动画软件flash
    标签自带动画marquee
    绘画canvas配合js脚本
    animation -->
    <!-- 动画
    帧一秒钟切换图片的数量,每张图片代表一帧
    关键帧 在每一段动画过程中,都需要设置一个特别的帧来区分前后动画的关系 -->
    <div class="container"></div>
    <div class="x">xxxxxx</div>