前端面试必备八股文——HTMLCSS

HTML

src和href的区别

srchref都是用来加载外部资源,区别如下

src当浏览器解析到该元素时,会暂停其他资源的加载和处理,直到该资源加载完成。 它会将资源内容嵌入到当前标签所在的位置,将其指向的资源下载应用到文档内,如js脚本等。常用在imgscriptiframe等标签。

href指向外部资源所在的位置,和当前元素位置建立链接,当浏览器解识别到它指向的位置,将其下载的时候不会阻止其他资源的加载解析。常用在alink标签。

HTML5新增特性

  • 新增语义化标签,headfooternavmainsection
  • 新增表单类型属性,emailnumber时间控件color颜色拾取器placeholderautofocus自动获取焦点...
  • 新增音视频标签,videoaudio
  • 新增canvas画布、websocket通信、拖拽等
  • 新增本地存储localStoragesessionStorage

对HTML语义化理解

根据内容来选择合适的标签

  • 方便浏览器爬虫更好的识别内容。
  • 有利于代码可读性,开发者能清晰的看出网页的结构,便于团队的开发与维护。

DOCTYPE(⽂档类型) 的作⽤

DOCTYPE是HTML5中一种标准通用标记语言的文档类型声明,是用来告诉浏览器的解析器,该用什么样的方式去加载识别文档。

iframe 有那些优点和缺点?

iframe通常用来加载外部链接,不会影响网页内容的加载。

优点

  • 可以将网页原封不动的加载进来
  • 增加代码的可用性
  • 用来加载显示较慢的内容,如广告、视频等

缺点

  • 加载的内容无法被浏览器引擎识别,对SEO不友好
  • 会阻塞onload事件加载
  • 会产生很多页面,不利于管理

Canvas和SVG的区别

  • canvas画布,是通过javascript来绘制2d图,是逐像素进行渲染。
  • SVG矢量图,是基于XML描述的2D图形语言,每个元素都是可用的,可以为其添加事件。

script标签中defer和async的区别

他俩都是表示异步加载外部JS脚本,不会阻碍页面的加载解析。 区别

  • 执行顺序:有多个async标签不能保证先后加载顺序,而多个defer标签可以按先后顺序加载。
  • 是否立即执行:async加载完脚本后会立即执行defer是要等文档解析完成后才执行

行内元素、块级元素、空(void)

  • 行内abspaninputimgselectstrong
  • pdivh1ulollidldtdd
  • <hr><br><img><input><link><meta>

怎样添加、移除、移动、复制、创建和查找节点

  • 添加节点document.appendChild(dom)
  • 移除节点document.removeChild(dom)
  • 移动节点document.appendChild(targetDom)
  • 复制节点dom.cloneNode(true),参数true表示是否复制子节点
  • 创建节点document.createElement(dom)
  • 查找节点:
    • document.getElementById("elementId")
    • document.getElementsByClassName("className")
    • document.getElementsByTagName("tagName")
    • document.querySelector("selector")
    • document.querySelectorAll("selector")

CSS

CSS3新增特性

  • 新增CSS选择器、伪类
  • 特效:text-shadowbox-shadow
  • 线性渐变: gradient
  • 旋转过渡:transformtranstion
  • 动画: animation
  • 圆角: border-radius

盒模型

img

img

盒模型都是由四个部分组成的,分别是marginborderpaddingcontent

标准盒模型和IE盒模型的区别在于设置widthheight时,对应的范围不同。

  • 标准盒模型widthheight只包含了content
  • IE盒模型的widthheight除了content本身,还包含了borderpadding

通过修改元素的box-sizing属性来改变元素的盒模型

  • box-sizeing: content-box表示标准盒模型(默认值)
  • box-sizeing: border-box表示IE盒模型(IE盒模型)

CSS选择器和优先级

选择器

选择器权重
id选择器 #id100
类选择器 .classname10
属性选择器 div[class="foo"]10
伪类选择器 div::last-child10
标签选择器 div1
伪元素选择器 div:after1
兄弟选择器 div+span0
子选择器 ui>li0
后代选择器 div span0
通配符选择器0

优先级

  • !important
  • 内联样式
  • ID选择器
  • 类选择器/伪类选择器/属性选择器
  • 标签选择器/伪元素选择器
  • 关系选择器/通配符选择器

CSS可继承属性和不可继承属性

可继承

  • font-weight
  • color
  • font-size
  • line-height
  • cursor

不可继承

  • marginpaddingborder
  • display
  • background
  • overflow
  • widthheight
  • position

dislpay的属性和作用

属性作用
block块类型。默认宽度为父元素宽度,可设置宽高,换行显示。
inline行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。
inline-block行内块级元素,默认宽度为内容宽度,可以设置宽高,同行显示
table块级表格
flexflex容器布局
none隐藏元素
inherit从父类继承display属性

隐藏元素的方式

  • display:none:元素在文档中不存在,不会占据位置。
  • visibility: hidden:元素在文档中的位置还保留,仍然占据空间。
  • opacity:0:将透明度设置为0。
  • z-index:负值:直接将元素放置在最下层,利用其他元素来遮盖。
  • position:absolute:将元素定位到可视区域以外。

单行、多行文本溢出

单行

css复制代码overflow: hidden; // 溢出隐藏
text-overflow: ellipsis; // 溢出用省略号显示
whtie-space: nowrap; //规定段落中的文本不进行换行

多行

CSS复制代码overflow:hidden
text-overflow: ellipsis;     // 溢出用省略号显示
display:-webkit-box;         // 作为弹性伸缩盒子模型显示。
-webkit-box-orient:vertical; // 设置伸缩盒子的子元素排列方式:从上到下垂直排列
-webkit-line-clamp:3;        // 显示的行数

有了使用过Sass、Less 吗?他们的区别是什么?

他们都是 CSS 预处理器,是 CSS 上的一种抽象层。他们是一种特殊的语法/语言编译成 CSS。 增加了 CSS代码的复用性,层级,mixin, 变量,循环, 函数等对编写以及开发UI组件都极为方便。 区别

  1. 编译环境不一样
    • Sass是在服务端处理的,以前是Ruby,现在是Dart-SassNode-Sass
    • Less是需要引入less.js来处理Less代码输出CSS到浏览器,也可以在开发服务器将Less语法编译成css文件,输出CSS文件到生产包目录
  2. 变量符不一样,Less是@,而Scss是$
  3. Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持

link和@import的区别

  • link是HTML提供的标签,不仅可以加载CSS文件,还可以定义RSS、rel连接属性等
  • @import是CSS提供等语法规则,只有导入样式表带作用。
  • link标签引入的CSS被同时加载,而@import引入的CSS将在页面加载完毕后被加载
  • @import是CSS2.1才有的语法,存在兼容性,而link作为HTML标签不存在兼容性问题

常见的CSS单位

  • px像素
    • CSS像素
    • 物理像素
  • 百分比%,作用于父元素, 当浏览器的宽度或者高度发生变化时,当前元素依据比例发生变化。
  • em和rem,相对长度单位,它们之间的区别:em相对于父元素,rem相对于根元素。
  • vw/vh是与视图窗口有关的单位,代表视图窗口的宽高。

px、em、rem的区别

  • px 固定像素单位,不能随其它元素的变化而变化
  • em是相对于父元素的单位,会随着父元素变化而变化
  • rem是相对于根元素html,它会随着html元素变化而变化

两栏布局

  • 利用浮动,将左边元素宽度设置为200px,并且设置向左浮动。将右边元素的margin-left设置为200px,宽度设置为auto(默认为auto,撑满整个父元素)。
CSS复制代码.outer {height: 100px;
}
.left {float: left;width: 200px;background: tomato;
}
.right {margin-left: 200px;width: auto;background: gold;
}
  • 利用浮动,左侧元素设置固定大小,并左浮动,右侧元素设置overflow: hidden; 这样右边就触发了BFC,BFC的区域不会与浮动元素发生重叠,所以两侧就不会发生重叠。
CSS复制代码.left{width: 100px;height: 200px;background: red;float: left;}.right{height: 300px;background: blue;overflow: hidden;}
  • 利用flex布局,将左边元素设置为固定宽度200px,将右边的元素设置为flex:1。
CSS复制代码.outer {display: flex;height: 100px;
}
.left {width: 200px;background: tomato;
}
.right {flex: 1;background: gold;
}
  • 利用绝对定位,将父级元素设置为相对定位。左边元素设置为absolute定位,并且宽度设置为200px。将右边元素的margin-left的值设置为200px。
CSS复制代码.outer {position: relative;height: 100px;
}
.left {position: absolute;width: 200px;height: 100px;background: tomato;
}
.right {margin-left: 200px;background: gold;
}

三栏布局

  • 利用绝对定位,左右两栏设置为绝对定位,中间设置对应方向大小的margin的值。
  • 利用flex布局,左右两栏设置固定大小,中间一栏设置为flex:1
  • 利用浮动,左右两栏设置固定大小,并设置对应方向的浮动。中间一栏设置左右两个方向的margin值,注意这种方式,中间一栏必须放到最后:
  • 圣杯布局,利用浮动和负边距来实现。父级元素设置左右的 padding,三列均设置向左浮动,中间一列放在最前面,宽度设置为父级元素的宽度,因此后面两列都被挤到了下一行,通过设置 margin 负值将其移动到上一行,再利用相对定位,定位到两边。
  • 双飞翼布局,双飞翼布局相对于圣杯布局来说,左右位置的保留是通过中间列的 margin 值来实现的,而不是通过父元素的 padding 来实现的。本质上来说,也是通过浮动和外边距负值来实现的。

水平垂直居中

  • 利用绝对定位,先将元素的左上角通过top:50%left:50%定位到页面的中心,然后再通过translate来调整元素的中心点到页面的中心。该方法需要考虑浏览器兼容问题。
CSS复制代码.parent {position: relative;
}.child {position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);
}
  • 利用绝对定位,设置四个方向的值都为0,并将margin设置为auto,由于宽高固定,因此对应方向实现平分,可以实现水平和垂直方向上的居中。该方法适用于盒子有宽高的情况:
CSS复制代码.parent {position: relative;
}.child {position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;
}
  • 利用绝对定位,先将元素的左上角通过top:50%left:50%定位到页面的中心,然后再通过margin负值来调整元素的中心点到页面的中心。该方法适用于盒子宽高已知的情况。
CSS复制代码.parent {position: relative;
}.child {position: absolute;top: 50%;left: 50%;margin-top: -50px;     /* 自身 height 的一半 */margin-left: -50px;    /* 自身 width 的一半 */
}
  • 使用flex布局,通过align-items:centerjustify-content:center设置容器的垂直和水平方向上为居中对齐,然后它的子元素也可以实现垂直和水平的居中。该方法要考虑兼容的问题,该方法在移动端用的较多:
CSS复制代码.parent {display: flex;justify-content:center;align-items:center;
}

flex布局理解

flex布局是CSS3新增的一种布局方式,能够根据不同屏幕尺寸的变化来自适应大小。

常用的属性:

  • flex-direction属性决定主轴的方向(即项目的排列方向)。
  • flex-wrap属性定义,如果一条轴线排不下,如何换行。
  • flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
  • justify-content属性定义了项目在主轴上的对齐方式。
  • align-items属性定义项目在交叉轴上如何对齐。
  • align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

flex: 1表示什么

flex: 1flex-growflex-shrinkflex-basis的缩写,默认值是0 1 autoflex:1也表示flex: 1 1 auto

  1. flex-grow定义项目发大比例,默认为0,即存在剩余空间,也不放大。
  2. flex-shrink定义项目收缩比例,默认为1,即空间不足,也会进行缩小。
  3. flex-basis定义项目给上面两个属性分配多余空间之前, 计算项目是否有多余空间, 默认值为 auto, 即项目本身的大小。

对BFC的理解,如何创建BFC

BFC是块级格式上下文(Block Formatting Context,BFC),是CSS布局的一个概念,在BFC布局里面的元素不受外面元素影响。

创建BFC条件

  • 设置浮动:float有值并不为空
  • 设置绝对定位: position(absolute、fixed)
  • overfilow值为:hiddenauto、`scroll
  • display值为:inline-blocktable-celltable-captionflex

BFC作用

  • 解决margin重叠问题:由于BFC是一个独立的区域,内部元素和外部元素互不影响,将两个元素变为BFC,就解决了margin重叠问题
  • 创建自适应两栏布局:可以用来创建自适应两栏布局,左边宽高固定,右边宽度自适应。
  • 解决高度塌陷问题:在子元素设置浮动后,父元素会发生高度的塌陷,也就是父元素的高度为0解决这个问题,只需要将父元素变成一个BFC。

什么是margin重叠,如何解决

两个块级元素分别设置上下margin时可能会导致边距合并为一个边距,合并到边距取最大的那个值。需要注意的是,浮动的元素和绝对定位这种脱离文档流的元素的外边距不会折叠。重叠只会出现在垂直方向。

计算规则

  • 都是正数,取最大的。20px 40px ---> 40px
  • 一正一负,用正数减去负数后。20px -50px ---> -30px
  • 都是负数,用0减去两个中绝对值大的那个。-30px -10px ---> -20px

解决方案 对于重叠的情况,主要有两种:兄弟之间重叠(margin合并)父子之间重叠(margin塌陷)

  • 兄弟之间重叠
    • 底部元素变为行内盒子:display: inline-block
    • 底部元素设置浮动:float
    • 底部元素的position的值为absolute/fixed
  • 父子之间重叠
    • 父元素加入:overflow: hidden
    • 父元素添加透明边框:border:1px solid transparent
    • 子元素变为行内盒子:display: inline-block
    • 子元素加入浮动属性或定位

position 常用属性 默认值是什么

  • static 默认值,没有定位,元素正常在文档流中显示
  • relative 相对定位,相对于原来的位置进行定位
  • absolute 绝对定位,相对于static定位意外以外的一个父元素进行定位。
  • fixed 绝对定位,相对于浏览器窗口
  • sticky 粘性定位,基于用户滚动位置

实现一个三角形

通过设置不同方向边框来实现

CSS复制代码div {width: 0;height: 0;border-top: 50px solid red;border-right: 50px solid transparent;border-left: 50px solid transparent;
}

img

画一条0.5px的线

  • 使用transform: scale()的方式,该方法用来定义元素的2D 缩放转换:
CSS
复制代码transform: scale(0.5,0.5);
  • 采用meta viewport的方式,这样就能缩放到原来的0.5倍,如果是1px那么就会变成0.5px。viewport只针对于移动端,只在移动端上才能看到效果。

如何解决1px

1px 问题指的是:在一些 Retina屏幕 的机型上,移动端页面的 1px 会变得很粗,呈现出不止 1px 的效果。原因很简单——CSS 中的 1px 并不能和移动设备上的 1px 划等号。

  • 直接写0.5px
  • 利用伪元素,先放大再缩小
  • 使用viewport缩放来解决

作者:wakaka378
链接:https://juejin.cn/post/7269794410573512758
来源:稀土掘金
1795864)]

画一条0.5px的线

  • 使用transform: scale()的方式,该方法用来定义元素的2D 缩放转换:
CSS
复制代码transform: scale(0.5,0.5);
  • 采用meta viewport的方式,这样就能缩放到原来的0.5倍,如果是1px那么就会变成0.5px。viewport只针对于移动端,只在移动端上才能看到效果。

如何解决1px

1px 问题指的是:在一些 Retina屏幕 的机型上,移动端页面的 1px 会变得很粗,呈现出不止 1px 的效果。原因很简单——CSS 中的 1px 并不能和移动设备上的 1px 划等号。

  • 直接写0.5px
  • 利用伪元素,先放大再缩小
  • 使用viewport缩放来解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis速成(一)

文章目录 Mybatis速成&#xff08;一&#xff09;前言1. 快速入门1.1 入门程序分析1.2 入门程序实现1.2.1 准备工作1.2.1.1 创建springboot工程1.2.1.2 数据准备 1.2.2 配置Mybatis1.2.3 编写SQL语句1.2.4 单元测试 1.3 解决SQL警告与提示 2. JDBC介绍(了解)2.1 介绍2.2 代码2.…

本地个性化聊天机器人CHAT WITH RTX

英伟达推出了自家版本的ChatGPT Chat With RTX 是一款演示应用程序&#xff0c;可让您个性化连接到您自己的内容&#xff08;文档、笔记、视频或其他数据&#xff09;的 GPT 大语言模型 (LLM)。利用检索增强生成 (RAG)、TensorRT-LLM和 RTX 加速&#xff0c;您可以查询自定义聊…

django定时任务(django-crontab)

目录 一&#xff1a;安装django-crontab&#xff1a; 二&#xff1a;添加django_crontab到你的INSTALLED_APPS设置&#xff1a; 三&#xff1a;运行crontab命令来创建或更新cron作业&#xff1a; 四&#xff1a;定义你的cron作业 五&#xff1a;创建你的管理命令&#xff…

《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

史上最详细《学成在线》项目实操笔记系列【下】&#xff0c;跟视频的每一P对应&#xff0c;全系列18万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 四、课程发布模块 4.1 (课程发布)模块需求…

【leetcode】深搜、暴搜、回溯、剪枝(C++)3

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;3 一、解数独1、题目描述2、代码3、解析 二、单词搜索1、题目描述2、代码3、解析 三、黄金矿工1、题目描述2、代码3、解析 四、不同路径III1、题目描述2、代码3、解析 一、解数独 1、题目描述 leetcode链接 2、代码 class…

三组I/O复用函数的比较

目录 事件集最大支持文件描述符数工作模式实现原理一图 这三组I/O复用系统调用&#xff0c;这三组系统调用都能同时监听多个文件描述符&#xff0c;它们将等待由timeout参数指定超时时间&#xff0c;知道一个或者多个文件描述上面有事件发生时候返回&#xff0c;返回的就是就绪…

AIGC ChatGPT4 教你如何完成业务需求SQL的编写

源表字段与数据信息为&#xff1a; 需求&#xff1a;现需要统计各部门各岗位下的平均工资 &#xff0c;将员工工资大于本岗位下平均工资的员工信息显示出来。 如Prompt: 有一个某公司职员表&#xff0c;表名为Bank_emp&#xff0c;empno为员工编号&#xff0c;ename为员工姓名…

如果很穷,不妨试一下这个副业,搞钱最快的副业!

前言 相信每一位学习计算机的朋友都想利用自己所学的知识赚点生活费&#xff0c;我也不例外&#xff0c;哈哈哈&#xff0c;学了这么多年&#xff0c;总得让它发挥点价值不是吗。今天就跟大家分享一下我的真实经历&#xff0c;我是如何利用python兼职实现月收入破万的。下面是…

实战 | 使用CNN和OpenCV实现数字识别项目(步骤 + 源码)

导 读 本文主要介绍使用CNN和OpenCV实现数字识别项目,含详细步骤和源码。 前 言 在当今世界,深度学习和图像处理技术正在各个应用领域得到利用。在这篇博文中,我们将使用卷积神经网络 (CNN) 和 OpenCV 库完成数字识别项目。我们将逐步掌握该项目如何执行。 项目准…

自然语言编程系列(三):自然语言编程工具

自然语言编程工具尝试让用户以更接近日常对话的方式描述任务&#xff0c;然后将其自动转换成合适的代码。 自然语言编程工具&#xff08;Natural Language Programming, NLP&#xff09;旨在降低编程门槛&#xff0c;使得不具备传统编程技能的用户能够以他们习惯的日常对话方式…

spark sql官网优化指南

两句话概括 缓存数据调整参数 缓存数据 把数据缓存到内存,spark sql能够只扫描需要列并且会自动压缩数据,占用最小的内存和减小GC压力。这无需多言,内存远远要快于磁盘,spark效率比hive高这个就是一个主要原因。 缓存数据代码spark.catalog.cacheTable("tableName&qu…

Python实现EMV指标计算:股票技术分析的利器系列(2)

Python实现EMV指标计算&#xff1a;股票技术分析的利器系列&#xff08;2&#xff09; 介绍算法解释&#xff1a; 核心代码&#xff1a;rolling函数介绍 完整代码&#xff1a;一定要看 介绍 先看看官方介绍&#xff1a; EMV(简易波动指标&#xff09; 用法 1.EMV 由下往上穿越…

Dynamo根据几何相交对墙体进行分组——群问题整理002

你好&#xff0c;这里是 BIM 的乐趣&#xff0c;我是九哥~ 近期给大家分享一些短平快的小教程&#xff0c;基本都是来自群里面常问的问题&#xff0c;不做过多的介绍了&#xff0c;直接上截图和代码。 问题&#xff1a;002 - 根据几何相交对墙体进行分组 今天分享的&#xff0…

OpenAI取消GPT-4 Turbo每日限制,速率提升一倍;扩散模型的理论基础

&#x1f989; AI新闻 &#x1f680; OpenAI取消GPT-4 Turbo每日限制&#xff0c;速率提升一倍 摘要&#xff1a;OpenAI宣布取消GPT-4 Turbo的每日限制&#xff0c;提升速率限制1倍&#xff0c;每分钟可处理高达150万TPM的数据。 OpenAI解释速率限制对防止API滥用、确保公平访…

用例是独立的-《软件方法》自测题解析38

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《软件方法》第5章自测题2 8 [ 多选题 ] 根据以下业务序列图&#xff0c;请问属于“一卡通系统”用例的有&#xff1a;  A) 外来办事人员→登记  B) 一卡通系统→判断黑名单 …

【IDEA关闭项目一直转圈】

IDEA关闭项目一直转圈&#xff1a; IDEA启动时&#xff0c;会自动打开上次关闭时所有显示的窗口&#xff0c;如果本次工作不需要上次打开的所有窗口&#xff0c;可以基于选择窗口界面的右上角去关闭。 项目关闭失败 但是偶尔会出现窗口关闭时&#xff0c;一直显示“正在关闭项…

如何选择阿里云服务器配置?阿里云服务器CPU内存带宽攻略

阿里云服务器配置怎么选择&#xff1f;根据实际使用场景选择&#xff0c;个人搭建网站可选2核2G配置&#xff0c;访问量大的话可以选择2核4G配置&#xff0c;企业部署Java、Python等开发环境可以选择2核8G配置&#xff0c;企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

leetcode日记(31)缺失的第一个正数

挺简单的困难题 class Solution { public:int firstMissingPositive(vector<int>& nums) {sort(nums.begin(),nums.end());int nnums.size();int i0;bool b0;if(nums[0]>0) b1;int p1;for(;i<n;i){if(i1>0&&i1<nums.size()&&nums[i]<…

普中51单片机学习(六)

点亮第一个LED LED相关知识 LED,即发光二极管&#xff0c;是一种半导体固体发光器件。工作原理为&#xff1a;LED的工作是有方向性的&#xff0c;只有当正级接到LED阳极&#xff0c;负极接到LED的阴极的时候才能工作&#xff0c;如果反接LED是不能正常工作的。其原理图如下 …

【Path Intellisense插件】配置@路径提示

问题 默认情况下&#xff0c;Path Intellisense插件安装后&#xff0c;使用路径简写是不带提示的 解决办法 点击插件中的扩展设置 往下翻&#xff0c;直到找到 在 settings.json 中编辑&#xff0c;点击 将下述代码直接复制粘贴到指定位置 "path-intellisense.mappings…