第一章 面试题基础篇(HTML+CSS)

1.1 HTML面试题

1. 行内元素有哪些?块级元素有哪些? 空(void)元素有哪些?

行内元素:span、img、input...
块级元素:div、footer、header、section、p、h1...h6...
空元素:br、hr...


元素之间的转换问题:
display: inline;  			把某元素转换成了行内元素      ===>不独占一行的,并且不能设置宽高
display: inline-block; 	把某元素转换成了行内块元素		 ===>不独占一行的,可以设置宽高
display: block;					把某元素转换成了块元素			   ===>独占一行,并且可以设置宽高

2. 页面导入样式时,使用link和@import有什么区别?

区别一:link先有,后有@import(兼容性link比@import兼容);
区别二:加载顺序差别,浏览器先加载的标签link,后加载@import

3. title与h1的区别、b与strong的区别、i与em的区别?

title与h1的区别:

定义:
    title:概括了网站信息,可以告诉搜索引擎或者用户关于这个网站的内容主题是什么
    h1:文章主题内容,告诉蜘蛛我们的网站内容最主要是什么
区别:
    title他是显示在网页标题上、h1是显示在网页内容上
    title比h1添加的重要 (title > h1 ) ==》对于seo的了解
场景:
    网站的logo都是用h1标签包裹的	
b与strong的区别:

定义:
    b:实体标签,用来给文字加粗的。
    strong:逻辑标签,用来加强字符语气的。
区别:
    b标签只有加粗的样式,没有实际含义。
    strong表示标签内字符比较重要,用以强调的。
题外话:为了符合css3的规范,b尽量少用改用strong就行了。
i与em的区别:

定义:
    i:实体标签,用来做文字倾斜的。
    em:是逻辑标签,用来强调文字内容的
区别:
    i只是一个倾斜标签,没有实际含义。
    em表示标签内字符重要,用以强调的。
场景:
    i更多的用在字体图标,em术语上(医药,生物)。

4. img标签的title和alt有什么区别?

区别一:
    title : 鼠标移入到图片显示的值
    alt   : 图片无法加载时显示的值
区别二:
    在seo的层面上,蜘蛛抓取不到图片的内容,所以前端在写img标签的时候为了增加seo效果要加入alt属性来描述这张图是什么内容或者关键词。

5. png、jpg、gif 这些图片格式解释一下,分别什么时候用?

png:无损压缩,尺寸体积要比jpg/jpeg的大,适合做小图标。
jpg:采用压缩算法,有一点失真,比png体积要小,适合做中大图片。
gif:一般是做动图的。
webp:同时支持有损或者无损压缩,相同质量的图片,webp具有更小的体积。兼容性不是特别好。

6. 前端页面有哪三层构成,分别是什么?作用是什么?

前端页面主要由三层构成,分别是结构层、表示层和行为层。这三层各自的作用如下:

1. HTML(HyperText Markup Language):结构层,它是网页的基础,用于定义网页的内容结构,如标题、段落、列表、图像等元素。HTML标签告诉浏览器如何组织和呈现这些内容。

2. CSS(Cascading Style Sheets):样式层,CSS负责为HTML元素添加样式,如颜色、字体、布局、间距等,使得内容具有视觉吸引力并适应不同的设备和屏幕尺寸。通过媒体查询,可以实现响应式设计。

3. JavaScript(JS):行为层,JavaScript是动态交互的核心,它使网页能够响应用户的操作,执行复杂的逻辑,比如表单验证、动画效果、数据绑定等。现代前端开发还可能用到框架和库(如React、Vue或Angular)来简化开发过程。

7. 怎么解决2个行内块元素中间的空白

导致原因:元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据white-space的处理方式(默认是normal,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,所以元素之间就出现了空隙。

方案一:手动取消空格和换行:

<ul>
    <li>1</li><li>2</li><li>3</li><li>4</li>

</ul>

非常不推荐,原因:
1. 部分编译器可能会代码整理的时候会强制换行
2. 代码比较臃肿,美观度不行,一点不优雅
方案二:父元素设置font-size:0px(推荐)

<style type="text/css">
    *{margin: 0;padding: 0;}
    ul{
        list-style: none;
        font-size: 0;
    }
    ul li{
        display: inline-block;
        width: 100px;
        height: 100px;
        background: red;
        font-size: 18px;
    }
</style>

<ul>
    <li>1</li>

    <li>2</li>

    <li>3</li>

    <li>4</li>

</ul>

注意:如果子盒子有文本,需要单独设置font-size

8. iframe的优点和缺点?

是什么:用于嵌入另一个 HTML 文档或外部资源(如网页、视频、地图等)到当前页面中。

优点:

1.嵌入外部内容: <iframe> 允许你在一个网页中嵌入来自不同源或服务器的内容,这有助于创建丰富多彩的页面。
2.独立性: 内嵌的内容在 <iframe> 中运行,与主页面相互隔离,这意味着它不会受到主页面的影响,保持了独立性。
3.简便性: 使用 <iframe> 非常简单,只需提供要嵌入的资源的 URL 或相对路径即可。
缺点:

1.性能问题: 如果滥用 <iframe>,在同一个页面中加载多个 <iframe> 可能会导致性能问题,因为每个 <iframe> 都需要单独加载资源。
2.可访问性问题: 内嵌内容可能导致可访问性问题,因为屏幕阅读器等辅助技术可能无法正确解释和浏览 <iframe> 内的内容。
3.安全性风险: 如果未谨慎处理来自不受信任源的内容,可能会存在安全风险,例如点击劫持(clickjacking)攻击。

防止自己的网站被别人 iframe 嵌套

if (top != self) {
    top.location = self.location;
}
//这段代码会检测页面是否被嵌套,如果是,则将页面重定向到自身。

1.2 CSS面试题

1. 介绍一下CSS的盒子模型

CSS的盒子模型有哪些:标准盒子模型、IE盒子模型
CSS的盒子模型区别:
    标准盒子模型:margin、border、padding、content
    IE盒子模型 :margin、content( border +  padding  + content )
通过CSS如何转换盒子模型:
    box-sizing: content-box;	/*标准盒子模型*/
    box-sizing: border-box;	  /*IE盒子模型*/

图例:

2. line-height和heigh区别

line-height是每一行文字的高,如果文字换行则整个盒子高度会增大(行数*行高)。
height是一个死值,就是这个盒子的高度。

3. CSS选择符有哪些?哪些属性可以继承?

CSS选择符:
    通配(*)
    id选择器(#)
    类选择器(.)
    标签选择器(div、p、h1...)
    相邻选择器(+)
    后代选择器(ul li)
    子元素选择器( > )
    属性选择器(a[href])
    
CSS属性哪些可以继承:
        文字系列:font-size、color、line-height、text-align...
***不可继承属性:border、padding、margin...

4. CSS优先级算法如何计算?

优先级比较:!important > 内联样式 > id > class > 标签 > 通配
CSS权重计算:
第一:内联样式(style)  权重值:1000
第二:id选择器  				 权重值:100
第三:类选择器 				  权重值:10
第四:标签&伪元素选择器   权重值:1
第五:通配、>、+         权重值:0

5. 用CSS画一个三角形

用边框画(border),例如:
{
        width: 0;
        height: 0;

        border-left:100px solid transparent;
        border-right:100px solid transparent;
        border-top:100px solid transparent;
        border-bottom:100px solid #ccc;
}

6. 一个盒子不给宽度和高度如何水平垂直居中?

方式一:
<div class='container'>
    <div class='main'>main</div>
</div>

.container{
        display: flex;
        justify-content: center;
        align-items: center;
        width: 300px;
        height: 300px;
        border:5px solid #ccc;
}
.main{
        background: red;
}
方式二:
<div class='container'>
    <div class='main'>main</div>

</div>

.container{
        position: relative;
        width: 300px;
        height: 300px;
        border:5px solid #ccc;
}
.main{
        position: absolute;
        left:50%;
        top:50%;
        background: red;
        transform: translate(-50%,-50%);
}

7. display有哪些值?说明它们的作用

none     			隐藏元素
block    			把某某元素转换成块元素
inline   			把某某元素转换成内联元素
inline-block 	把某某元素转换成行内块元素

8. 对BFC规范(块级格式化上下文:block formatting context)的理解?

BFC就是页面上一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。

1. 了解BFC : 块级格式化上下文。
2. BFC的原则:如果一个元素具有BFC,那么内部元素再怎么弄,都不会影响到外面的元素。
3. 如何触发BFC:
        float的值非none
        overflow的值非visible
        display的值为:inline-block、table-cell...
        position的值为:absoute、fixed

9. 清除浮动有哪些方式?

1. 触发BFC
2. 多创建一个盒子,添加样式:clear: both;
3. after方式
    ul:after{
            content: '';
            display: block;
            clear: both;
    }

10. 在网页中的应该使用奇数还是偶数的字体?为什么呢?

偶数 : 让文字在浏览器上表现更好看。

另外说明:ui给前端一般设计图都是偶数的,这样不管是布局也好,转换px也好,方便一点。

11. position有哪些值?分别是根据什么定位的?

static [默认]  没有定位
fixed  固定定位,相对于浏览器窗口进行定位。
relative  相对于自身定位,不脱离文档流。
absolute	相对于第一个有relative的父元素,脱离文档流。


relative和absolute区别
1. relative不脱离文档流 、absolute脱离文档流
2. relative相对于自身 、 absolute相对于第一个有relative的父元素
3. relative如果有left、right、top、bottom ==》left、top
   absolute如果有left、right、top、bottom ==》left、right、top、bottom

12. 有哪些css属性可以影响层级

屏幕是一个二维平面,然而 HTML 元素却是排列在三维坐标系中,x 为水平方向,y 为垂直方向,z 为屏幕由内向外方向,我们在看屏幕的时候是沿着 z 轴方向从外向内的。由此,元素在用户视角就形成了层叠的关系,某个元素可能覆盖了其他元素也可能被其他元素覆盖;

a. 层叠上下文 (Stacking Context)
层叠上下文 (堆叠上下文, Stacking Context),是 HTML 中一个三维的概念。在 CSS2.1 规范中,每个元素的位置是三维的,当元素发生层叠,这时它可能覆盖了其他元素或者被其他元素覆盖;排在 z 轴越靠上的位置,距离屏幕观察者越近。

在层叠上下文中,其子元素按照上面解释的规则进行层叠。形成层叠上下文的方法有:

1. position 值为 absolute|relative,且 z-index 值不为 auto;
2. position 值为 fixed|sticky;
3. z-index 值不为 auto 的 flex 元素,即父元素属性 display: flex|inline-flex;
4. opacity 属性值小于 1 的元素;
5. transform 属性值不为 none 的元素;
6. mix-blend-mode 属性值不为 normal 的元素;
7. filter、perspective、clip-path、mask、mask-image、mask-border、motion-path 值不为 none 的元素;
8. perspective 值不为 none 的元素;
9. isolation 属性被设置为 isolate 的元素;
10. will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值
11. -webkit-overflow-scrolling 属性设置为 touch 的元素;
b. 层叠等级

层叠等级 (层叠水平, Stacking Level) 决定了在同一个层叠上下文中,元素在 z 轴上的显示的顺序;

普通元素的层叠等级优先由其所在的层叠上下文决定;
层叠等级的比较,只有在同一个层叠上下文元素中才有意义;
在同一个层叠上下文中,层叠等级描述定义的是该层叠上下文中的元素在 z 轴上的上下顺序;

另外,层叠等级并不一定由 z-index 决定,只有定位元素的层叠等级才由 z-index 决定,其他类型元素的层叠等级由层叠顺序、他们在 HTML 中出现的顺序、他们的祖先元素的层叠等级一同决定,详细的规则见下面层叠顺序的介绍。

c. z-index
z-index 只适用于定位的元素,对非定位元素无效,它可以被设置为正整数、负整数、0、auto,如果一个定位元素没有设置 z-index,那么默认为 auto;

元素的 z-index 值只在同一个层叠上下文中有意义。如果父级层叠上下文的层叠等级低于另一个层叠上下文的,那么它 z-index 设的再高也没用。所以如果你遇到 z-index 值设了很大,但是不起作用的话,就去看看它的父级层叠上下文是否被其他层叠上下文盖住了。
d. 层叠顺序:描述的是元素在同一个层叠上下文中的顺序规则,从层叠的底部开始,共有七种层叠顺序:
1. 背景和边框:形成层叠上下文的元素的背景和边框。
2. 负 z-index 值:层叠上下文内有着负 z-index 值的定位子元素,负的越大层叠等级越低;
3. 块级盒:文档流中的块级、非定位子元素;
4. 浮动盒:非定位浮动元素;
5. 行内盒:文档流中行内、非定位子元素;
6. z-index: 0:z-index 为 0 或 auto 的定位元素, 这些元素形成了新的层叠上下文;
7. 正 z-index 值:z-index 为正的定位元素,正的越大层叠等级越高;
e. 面试中 或 写面试题 的回答
css可以影响层级的属性非常多,本身屏幕是一个二维平面,然而 HTML 元素却是排列在三维坐标系中。

x为水平方向,y为垂直方向,z为屏幕由内向外方向。

我们在看屏幕的时候是沿着 z 轴方向从外向内的,由此,元素在用户视角就形成了层叠的关系,某个元素可能覆盖了其他元素也可能被其他元素覆盖。

那么元素在同一个层叠上下文中的顺序规则,从层叠的底部开始,共有七种层叠顺序:
1. 背景和边框:形成层叠上下文的元素的背景和边框。
2. 负 z-index 值:层叠上下文内有着负 z-index 值的定位子元素,负的越大层叠等级越低;
3. 块级盒:文档流中的块级、非定位子元素;
4. 浮动盒:非定位浮动元素;
5. 行内盒:文档流中行内、非定位子元素;
6. z-index: 0:z-index 为 0 或 auto 的定位元素, 这些元素形成了新的层叠上下文;
7. 正 z-index 值:z-index 为正的定位元素,正的越大层叠等级越高;

那么这里就说几个可以影响层级的css属性吧:比如:
1. 可以给position值为absolute 或 relative的添加z-index;
2. 也可以通过transform: translateY(-100px);
3. opacity属性值小于 1 的元素;

等等好多都可以做到,这里就不一一举例了。

13. 什么是CSS reset?

reset.css   		是一个css文件,用来重置css样式的。
normalize.css 	为了增强跨浏览器渲染的一致性,一个CSS 重置样式库。

14. css sprite是什么,有什么优缺点

1. 是什么
    把多个小图标合并成一张大图片。
2. 优缺点
    优点:减少了http请求的次数,提升了性能。
    缺点:维护比较差(例如图片位置进行修改或者内容宽高修改)

15. display: none;与visibility: hidden;的区别

1. 占用位置的区别
display: none; 				是不占用位置的
visibility: hidden;   虽然隐藏了,但是占用位置

2. 重绘和回流的问题

visibility: hidden; 、 display: none;  产生重绘
display: none;     还会产生一次回流

产生回流一定会造成重绘,但是重绘不一定会造成回流。

产生回流的情况:改变元素的位置(left、top...)、显示隐藏元素....
产生重绘的情况:样式改变、换皮肤

16. opacity 和 rgba区别

共同性:实现透明效果

1. opacity 取值范围0到1之间,0表示完全透明,1表示不透明
2. rgba   R表示红色,G表示绿色,B表示蓝色,取值可以在正整数或者百分数。A表示透明度取值0到1之间

区别:继承的区别
opacity会继承父元素的opacity属性,而RGBA设置的元素的后代元素不会继承不透明属性。

17. 子元素设置margin-top父元素也会跟着移动,是怎么回事?

经典问题:垂直外边距叠加

原因:普通文档流盒子间,只要垂直外边距直接接触,就会发生合并,合并后外边距视觉高度取两个发生合并外边距中较大者。

发生这一现象的有三种情况:相邻兄弟块元素间、父元素及其首子元素和末子元素间(没有内边距或边框把外边距分隔开)、空块级元素自身的合并。

解决办法:触发BFC就可以解决。

18. 简述什么是伪元素和伪类,并列举一些自己知道的伪元素和伪类

a. 伪元素
什么是伪元素:是用于创建并操作元素的特定部分,它可以在DOM中创建一个不存在的元素,并为其添加样式。
::before:在元素内容之前插入内容
::after:在元素内容之后插入内容
::first-line:选择元素的第一个行
::first-letter:选择元素的第一个字母
b. 伪类
什么是伪类:是用于选择元素的特定状态或行为的关键词,它可以应用于已存在的元素。
:hover:当鼠标悬停在元素上时应用的样式
:active:元素正在被用户交互(如点击)时应用的样式
:focus:元素获得焦点(如键盘焦点或点击)时应用的样式
:nth-child(n):选择父元素的第n个子元素
:not(selector):选择不匹配给定选择器的元素

19. 清除浮动的方式有哪些?

1. 触发BFC
2. 多创建一个盒子,添加样式:clear: both; (不推荐使用,很老的处理方式了)
3. after方式
    ul::after{
            content: '';
            display: block;
            clear: both;
    }

20. 回流和重绘

a. 浏览器渲染流程
浏览器是向服务端发送请求,下载解析资源显示在浏览器上。将网页内容展示到浏览器上的过程,这其实就是渲染引擎完成的。渲染引擎有很多种,这里以 webkit 为例。

从上面这个图上,我们可以看到,浏览器渲染流程如下:

1. 解析 HTML Source,生成 DOM 树。
2. 解析 CSS,生成 CSSOM 树。
3. 将 DOM 树和 CSSOM 树结合,去除不可见元素,生成渲染树( Render Tree )。
4. Layout (布局):根据生成的渲染树,进行布局( Layout ),得到节点的几何信息(宽度、高度和位置等)。
5. Painting (重绘):根据渲染树以及回流得到的几何信息,将 Render Tree 的每个像素渲染到屏幕上。
b. 什么是回流和重绘
1. 回流:渲染对象在创建完成并添加到渲染树时,只是将 DOM 节点和它对应的样式结合起来,"并不包含位置和大小信息"。所以还需要 layout 这一过程计算他们的位置和大小,这一过程称为回流,有些地方也称为重排,可以理解为重新布局。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建渲染树。

2. 重绘:通过构造渲染树和回流阶段,知道了哪些节点是可见的,以及可见节点的样式和具体的几何信息(位置、大小),那么我们就可以将渲染树的每个节点都转换为屏幕上的实际像素,这个过程就叫做重绘。
c. 什么样情况会造成回流和重绘
要知道:回流一定会造成重绘,重绘不一定会造成回流。

结合上面说的:
1. 造成回流的情况有:回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流。一个 DOM 元素的几何属性变化,常见的几何属性有 width、height、padding、margin、left、top、border 等等。
2. 造成重绘的情况有:例如改变 visibility、outline、background-color 等属性,这些属性只是影响元素的外观,风格,并且没有影响几何属性的时候,会导致重绘 ( repaint )
d. 如何减少回流与重绘
开启GPU加速:开启 GPU 加速元素会被单独提升到一层。
WebKit 内核的浏览器中,CSS3 的 transform、opacity、filter 这些属性就可以实现合成的效果,浏览器会将渲染层提升为合成层。

另外需要注意的是:硬件加速不是万金油,单独创建合成层是有代价的,每创建一个合成层,就要为其分配内存,内存大小取决于复合层的数量。复合层的大小、层的管理也更为复杂,在一些低端和终端移动端设备中更为明显,滥用 GPU 加速会引起页面卡顿甚至闪退。

可以把:top left 使用 transform 代替。
e. 面试回答:
回流就是:渲染对象在创建完成并添加到渲染树时,只是将 DOM 节点和它对应的样式结合起来,并不包含位置和大小信息。所以还需要 layout 这一过程计算他们的位置和大小,这一过程称为回流,有些地方也称为重排,可理解为重新布局。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建渲染树。

造成回流就是可能改变了盒子的大小和位置。

重绘就是:通过构造渲染树和回流阶段,知道了哪些节点是可见的,以及可见节点的样式和具体的几何信息,那么我们就可以将渲染树的每个节点都转换为屏幕上的实际像素,这个过程就叫做重绘。

造成重绘就是可能改变了盒子的颜色,背景颜色等等之类的。

那么要避免回流和重绘:

css方面
 * 使用transform替代top等位移 ; 
 * 使用visibility替换display: none;
 * 避免使用table布局 ;
 * 尽可能在DOM树的最末端改变class;
 * 避免设置多层内联样式,尽量层级扁平;
 * 将动画效果应用到position属性为absolute或fxed的元素上;
 * 避免使用CSS表达式;
 * 将频繁重绘或者回流的节点设置为图层,比如 video, iframe ;
 * CSS3硬件加速(GPU加速) ,可以是transform: translateZ(0)、opacity、 flters、 Will-change提前告诉浏览器元素会发生什么变化;
 
JS方面:
* 避免频繁操作样式,合并操作;
* 避免频繁操作DOM,合并操作;
* 防抖节流控制频率;
* 避免频繁读取会引发回流/重绘的属性,比如上面的C、O、S属性
* 对具有复杂动画的元素使用绝对定位。

21. flex后面都有哪些属性?

flex属性是:flex-grow、flex-shrink、flex-basis的简写,默认值为0 1 auto。后两个属性可选。

一、flex-grow:
    1. flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
    2. 如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

二、flex-shrink
    1. flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
    2. 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
    
三、flex-basis
    1. flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
    2. 它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

22. 实现一个左边固定宽度、右边自适应布局(flex)

<style type="text/css">
    *{margin: 0;padding: 0;}
    .container{
        display: flex;
        width: 100%;
        height: 100vh;
    }
    .left{
        width: 300px;
        background: red;
    }
    .right{
        flex: 1;
        background: blue;
    }
</style>

<div class='container'>
    <div class='left'>left</div>
    <div class='right'>right</div>
</div>

23. 简述px、em、rem的区别

1. px 是绝对单位(具有固定的大小:不会随着页面或元素的缩放而改变大小)
2. em 是相对单位,相对于“父元素的字体大小来计算元素的大小”。
3. rem 是相对单位,相对于根元素(html 元素)的字体大小来计算元素的大小。

总结:px 是绝对单位,em 和 rem 是相对单位,其中 em 相对于父元素的字体大小,而 rem 相对于根元素的字体大小。

24. 移动端适配的方式有哪些?

移动端适配是指:在不同移动设备上(如手机、平板)显示网页时,保证页面内容可以适应不同屏幕大小和分辨率的技术方法。
方案一:rem单位 + 动态改变html的font-size (某宝使用的方案)

rem单位是相对于html元素的font-size来设置的,那么如果我们需要在不同的屏幕下有不同的尺寸,可以动态的修改html的 font-size尺寸。

在开发中,我们只需要考虑两个问题:

问题一:针对不同的屏幕,设置html不同的font-size
问题二:将原来要设置的尺寸,转化成rem单位
方法一:编写js代码 或 使用
方法二:flexible库
flexible库地址:https://github.com/amfe/lib-flexible

关于设计图给出的px,要转成rem可以使用:编辑器提供插件,例如:

VSCode插件:px to rem & rpx & vw (cssrem) 的插件,在编写时自动转化
方案二:vw 适配方案(某东使用的方案)

1vw等于屏幕的1%,vw我们只面临一个问题:将尺寸换算成vw的单位即可。

vw相比于rem的优势:不需要去计算html的font-size大小,也不需要给html设置这样一个font-size

关于设计图给出的px,要转成vw可以使用:编辑器提供插件,例如:

VSCode插件:px to rem & rpx & vw (cssrem),在编写时自动转化

25. 响应式布局和弹性布局区别和应用

响应式布局和弹性布局是两种常见的网页布局技术,它们有一些区别和应用场景:

a. 响应式布局(Responsive Layout):
/* 在 600 像素或更小的屏幕上,将背景色设置为橄榄色 */
@media screen and (max-width: 600px) {
  body {
    background-color: olive;
  }
}
  
/* 当页面宽度大于等于 900 像素时应用该样式 */
<link rel="stylesheet" media="screen and (min-width: 900px)" href="a.css">
/* 当页面宽度小于等于 600 像素时应用该样式 */
<link rel="stylesheet" media="screen and (max-width: 600px)" href="b.css">	
    • 响应式布局是一种设计方法,通过使用媒体查询和弹性网格等技术,使网页能够根据用户设备的不同尺寸和分辨率进行自适应调整,以提供更好的用户体验。
    • 在响应式布局中,网页会根据设备的屏幕大小和方向,调整元素的布局、大小、位置等,以确保内容在不同设备上都能够正常显示。
    • 响应式布局通常会使用百分比、媒体查询、弹性盒子等技术来实现布局的自适应性,可以让网页在桌面、平板和手机等不同设备上都有良好的显示效果。
b. 弹性布局(Flexible Layout):
    • 弹性布局是一种基于相对单位(如百分比、em、rem)的布局方式,可以让布局中的元素相对于父元素或其他元素进行伸缩和调整。
    • 在弹性布局中,元素的大小和位置可以根据父元素或其他元素的尺寸和内容动态调整,使得页面的布局更加灵活和适应不同屏幕尺寸。
    • 弹性布局通常会使用相对单位和弹性盒子等技术来实现布局的弹性性,可以方便地实现元素的自适应和伸缩。

区别:

- 响应式布局可以根据不同尺寸,展示不同样式、加载不同资源。
- 弹性布局是布局方式,可以很好的等分空间等等,但是做不到,根据不同设备加载不同资源等内容。

应用场景:

- 响应式布局适用于需要在不同设备上显示不同布局的情况,如桌面、平板和手机等。
- 弹性布局适用于需要实现元素的相对大小和位置调整的情况,比如根据父元素尺寸自适应的布局。

26. 媒体查询可以写if判断吗?

虽然媒体查询本身不支持传统的 if 判断语句,但可以通过组合不同的媒体特性和逻辑运算符(如 and、or、not)来实现类似条件判断的效果。例如,可以使用以下方式来组合不同的媒体特性:

@media screen and (min-width: 768px) and (max-width: 1024px) {
  /* 在屏幕宽度在 768px 到 1024px 之间应用的样式 */
}

通过合理组合不同的媒体特性和值,可以实现根据不同设备条件应用不同样式的效果,虽然语法上不是传统的 if 判断,但能够达到类似的效果。

27. 随着屏幕缩放,图片能够自适应保持长宽等比为16:9或者1:1,图片不能压缩

原理:让比如某div盒子具有16:9或者1:1的比例,然后通过object-fit的设置,让图片适应容器的高度与宽度。

要实现在屏幕缩放时,图片能够自适应并保持长宽比为 16:9 或 1:1,同时又不能被压缩,可以通过 CSS 的 object-fit 属性和媒体查询来实现。object-fit 属性用于指定替换元素(如 <img> 标签)的内容应该如何适应其容器。

以下是一个示例代码,展示了如何实现图片自适应并保持长宽比为 16:9 或 1:1 的效果:

<style>
  .image-container {
    width: 100%;
    max-width: 100%;
    height: 0;
    padding-bottom: 56.25%; /* 16:9 比例 */
    position: relative;
    overflow: hidden;
  }

  .image-container.square {
    padding-bottom: 100%; /* 1:1 比例 */
  }

  .image-container img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: contain; /* 图片自适应并保持长宽比 */
  }
</style>


<div class="image-container">
  <img src="path/to/your/image.jpg" alt="Image" />
</div>

<div class="image-container square">
  <img src="path/to/your/image.jpg" alt="Image" />
</div>

在上面的代码中,通过设置 .image-container 元素的 padding-bottom 属性来实现容器的高度与宽度之比为 16:9 或 1:1。图片使用绝对定位填充整个容器,并通过 object-fit: contain; 实现图片自适应并保持长宽比的效果。

通过媒体查询可以根据屏幕宽度等条件来调整图片容器的大小,从而实现在不同屏幕尺寸下图片的自适应效果。这样,无论屏幕如何缩放,图片都能保持所需的长宽比,同时不会被压缩变形。

object-fit 属性部分说明:有兼容性

object-fit 属性指定元素的内容应该如何去适应指定容器的高度与宽度。
object-fit 一般用于 img 和 video 标签,一般可以对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等。

1. object-fit: contain
    图像的大小将被调整以适应其容器的长宽比。如果图像的长宽比与容器的长宽比不一致,它就会被“黑边化”。(即图像的长宽比不变)
    
2. object-fit: cover
    图像也将被调整大小以适应其容器的长宽比,如果图像的长宽比与容器的长宽比不一致,那么它将被剪切以适应。

3. object-fit: fill
    图像将被调整大小以适应其容器的长宽比,如果图像的长宽比与容器的长宽比不一致,它将被挤压或拉伸。
    
4. object-fit: none
    图像根本不会被调整大小,既不会被拉伸也不会被挤压。它的作用与cover类似,但它不依赖于其容器的长宽比。
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值