HTML与CSS
HTML
src和href的区别
- src用于替换当前元素,href 用于在当前文档和引用资源之间确立联系。
HTML语义化的理解
语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化)。通俗来讲就是用正确的标签做正确的事情。
语义化的优点如下:
对机器友好,带有语义的文字表现力丰富,更适合搜索引擎的爬虫爬取有效信息,有利于SEO。除此之外,语义类还支持读屏软件,根据文章可以自动生成目录;
对开发者友好,使用语义类标签增强了可读性,结构更加清晰,开发者能清晰的看出网页的结构,便于团队的开发与维护。
常见的语义化标签:
<header></header> 头部
<nav></nav> 导航栏
<section></section> 区块(有语义化的div)
<main></main> 主要区域
<article></article> 主要内容
<aside></aside> 侧边栏
<footer></footer> 底部
js defer和async的区别
defer与async的区别是:前者要等到整个页面正常渲染结束,才会执行;后者一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。defer是“渲染完再执行”,async是“下载完就执行”。另外,如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本是不能保证加载顺序的。
行内元素有哪些?块级元素有哪些?空(void)元素有那些
- 行内元素有:a b span img input select strong
- 块级元素有:div ul ol li dl dt dd h1 h2 h3 h4 h5 h6 p
- 空元素,即没有内容的HTML元素。空元素是在开始标签中关闭的,也就是空元素没有闭合标签。常见的有:
<br>、<hr> 、<img>、<input> 、<link>
title与h1的区别、b与strong的区别、i与em的区别?
- strong标签有语义,是起到加重语气的效果,而b标签是没有的, b标签只是一个简单加粗标签。b标签之间的字符都设为粗体,strong标签加强字符的语气都是通过粗体来实现的,而搜索引擎更侧重strong标签。
- title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取有很大的影响
- i内容展示为斜体,em表示强调的文本
页面导入样式时,使用link和@import有什么区别?
- 区别一:link兼容性比@import好
- 区别二:link会异步加载css,而@import会在页面加载完成后才开始加载,会出现页面初始无样式也就是白屏问题。
iframe有哪些优缺点
优点:
用来加载速度较慢的内容(如广告)
可以使脚本可以并行下载
可以实现跨子域通信
缺点:
iframe 会阻塞主页面的 onload 事件
无法被一些搜索引擎索识别
会产生很多页面,不容易管理
img是行内元素为什么可以设置宽高
因为img、input等行内元素他是一个可替换元素,他的展示效果不受css来控制的,浏览器会根据元素的标签和属性,来决定可替换元素的具体显示内容
head标签有什么作用,其中什么标签必不可少?
- head标签用于定义文档的头部,它是所有头部元素的容器。
<head>
中的元素可以引用脚本、指示浏览器在哪里找到样式表、提供元信息等。 - 文档的头部描述了文档的各种属性和信息,包括文档的标题、在Web中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会真正作为内容显示给读者。
- 下面这些标签可用在head部分:
<base>,<link>,<meta>, <script>,<style>, <title>
。 - 其中
<title>
定义文档的标题,它是head部分中唯一必需的元素。
CSS
选择器优先级
优先级比较:!important > 内联样式 > id > class = 属性 = 伪类 > 标签 = 伪元素 > 通配 = 子、后代选择器
10k 1k 100 10 1 0
伪元素和伪类
伪类
- :th-child/first-child
元素:nth-of-type()
:只计算符合前面元素类型的元素- :hover/:focus等
伪元素
- ::before和::after
- ::first-line(了解):可以针对首行文本设置属性
- ::first-letter(了解):可以针对首字母/首字设置属性
CSS选择符有哪些?哪些属性可以继承?
CSS选择符:
通配(*)
id选择器(#)
类选择器(.)
标签选择器(div、p、h1...)
相邻选择器(+)
后代选择器(ul li)
子元素选择器( > )
属性选择器(a[href])
CSS属性哪些可以继承:
文字系列:font-size、color、line-height、text-align...
***不可继承属性:border、padding、margin...
display有哪些值?说明他们的作用。
- none 隐藏元素
- block 把某某元素转换成块元素
- inline 把某某元素转换成内联元素
- inline-block 把某某元素转换成行内块元素
元素隐藏方式
- 方法一:
display:none;
- 元素不显示出来,并且也不占据位置,不占据任何空间(和不存在一样)
- 方法二:
visibility:hidden;
- 设置为hidden,虽然元素不可见,但是会占据元素应该占据的空间
- 默认为visible,元素是可见的
- 方法三:rgba设置颜色,将a的值设置为0
- rgba的a设置的是alpha值,可以设置透明度,不影响子元素
- 方法四:opacity设置透明度,设置为0
- 设置整个元素的透明度,会影响子元素
link和@import的区别
两者都是外部引用CSS的方式,它们的区别如下:
- link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
- link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
- link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
- link支持使用Javascript控制DOM去改变样式;而@import不支持。
transition和animation的区别
- transition是过渡属性,强调过度,它的实现需要触发一个事件(比如鼠标移动上去,焦点,点击等)才执行动画。它类似于flash的补间动画,设置一个开始关键帧,一个结束关键帧。
- animation是动画属性,它的实现不需要触发事件,设定好时间之后可以自己执行,且可以循环一个动画。它也类似于flash的补间动画,但是它可以设置多个关键帧(用@keyframe定义)完成动画。
display: none;与visibility: hidden;的区别
- display: none; 是不占用位置的,非继承属性
- visibility: hidden; 虽然隐藏了,但是占用位置,继承属性
盒子模型的转换
- CSS的盒子模型有哪些:标准盒子模型、IE盒子模型
- CSS的盒子模型区别:
- 标准盒子模型:margin、border、padding、content
- IE盒子模型 :margin、content( border + padding + content )
- 通过CSS如何转换盒子模型:
- box-sizing: content-box; /标准盒子模型/
- box-sizing: border-box; /IE盒子模型/
li 与 li 之间有看不见的空白间隔是什么原因引起的?如何解决?
- 浏览器会把inline内联元素间的空白字符(空格、换行、Tab等)渲染成一个空格。为了美观,通常是一个
<li>
放在一行,这导致<li>
换行后产生换行字符,它变成一个空格,占用了一个字符的宽度。
- 解决办法:
- 为
<li>
设置float:left。不足:有些容器是不能设置浮动,如左右切换的焦点图等。 - 将所有
<li>
写在同一行。不足:代码不美观。 - 将
<ul>
内的字符尺寸直接设为0,即font-size:0。不足:<ul>
中的其他字符尺寸也被设为0,需要额外重新设定其他字符尺寸,且在Safari浏览器依然会出现空白间隔。 - 消除
<ul>
的字符间隔letter-spacing:-8px,不足:这也设置了<li>
内的字符间隔,因此需要将<li>
内的字符间隔设为默认letter-spacing:normal。
- 为
CSS精灵图
是什么:把多个小图标合并成一张大图片。
优缺点
优点:减少了http请求的次数,提升了性能。
缺点:维护比较差(例如图片位置进行修改或者内容宽高修改)
line-height和heigh区别
- line-height指一行文本的高度,包含了字间距,实际上是下一行基线到上一行基线距离
- 如果一个标签没有定义height属性,那么其最终表现的高度由line-height 决定
- height就是盒子的高度
opacity 和 rgba区别
共同性:实现透明效果
- opacity 取值范围0到1之间,0表示完全透明,1表示不透明
- rgba R表示红色,G表示绿色,B表示蓝色,取值可以在正整数或者百分数。A表示透明度取值0到1之间
区别:继承的区别:opacity会继承父元素的opacity属性,而RGBA设置的元素的后代元素不会继承不透明属性。
清除浮动的方式
触发BFC:overflow:auto
多创建一个盒子,添加样式:clear: both;
after方式 ul:after或li:before
ul:after{
content: '';
display: block;
clear: both;
}
em和rem区别
- rem单位是相对于html元素的font-size来设置的
- em 根据使用它的元素的大小决定(很多人错误以为是根据父类元素,实际上是使用它的元素继承了父类的属性才会产生的错觉)
两栏布局
一般两栏布局指的是左边一栏宽度固定,右边一栏宽度自适应,两栏布局的具体实现:
- 利用浮动,将左边元素宽度设置为200px,并且设置向左浮动。将右边元素的margin-left设置为200px,宽度设置为auto (默认为auto,撑满整个父元素)
- 利用flex布局,将左边元素设置为固定宽度200px,将右边的元素设置为flex:1
三栏布局
三栏布局一般指的是页面中一共有三栏,左右两栏宽度固定,中间自适应的布局,三栏布局的具体实现:
- 利用绝对定位,左右两栏设置为绝对定位,中间设置对应方向大小的margin的值。
- 利用flex布局,左右两栏设置固定大小,中间一栏设置为flex:1
移动端适配
- 方案一:百分比设置【因为不同属性的百分比值,相对的可能是不同参照物,所以百分比往往很难统一,所以百分比在移动端适配中使用是非常少的】
- 方案二:rem单位+动态html的font-size
- 方案三:vw单位
- 方案四:flex的弹性布局
flex
- flex-direction:用来改变主轴的方向
- flex-wrap:如果一条轴线排不下,怎么办
- flex-flow:是flex-direction属性和flex-wrap属性的简写形式
- justify-content:定义了项目在主轴上的对齐方式
- align-items:定义项目在交叉轴上如何对齐
- align-content:用于控制多行项目的对齐方式,如果项目只有一行则不会起作用
BFC的理解
BFC就是页面上一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。他的原则是如果一个元素具有BFC,那么内部元素再怎么弄,都不会影响到外面的元素。
如何触发BFC
float的值非none
overflow的值非visible
display的值为:inline-block、flex
position的值为:absoute、fixed
根元素(
<html>
)
MDN上有整理出在哪些具体的情况下会创建BFC:
- 根元素(
<html>
) - 浮动元素(元素的float不是none)
- 绝对定位元素(元素的position为 absolute或 fixed)和行内块元素(元素的display 为 inline-block)
- 表格单元格(元素的display 为table-cell,HTML表格单元格默认为该值),表格标题(元素的display 为 table-caption,HTML表格标题默认为该值)
- 匿名表格单元格元素(元素的display 为 table、table-row、table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或inline-table)
- overflow计算值(Computed)不为 visible的块元素
- 弹性元素(display为flex或 inline-flex元素的直接子元素)
- 网格元素(display为grid 或 inline-grid元素的直接子元素)
- display值为flow-root的元素
css画三角形
<style>
.box{
width: 100px;
height: 100px;
border: 100px solid red;
box-sizing: border-box;
border-top-color: transparent;
border-left-color: transparent;
border-right-color: transparent;
}
</style>
<div class="box"></div>
CSS实现固定宽高比
- padding:相对于父元素的宽度,用padding-top撑开
- aspect-ratio:2/1(长宽2:1)