前端开发面试题--htmlcss篇

Linnea ·
更新时间:2024-09-21
· 778 次阅读

1.说一下盒子模型 1.1 标准盒模型(默认值) box-sizing: content-box :宽和高代表的仅仅是盒子内容,特点是给盒子加边框和内边距会撑大盒子 盒子的总宽度= width+padding+border+margin(高度同理) 1.2 怪异盒模型(ie浏览器默认的盒子模型) box-sizing: border-box:宽和高代表的是盒子的content+padding+border,给盒子加边框和内边距不会撑大盒子(前提是内边距和边框不会超过盒子宽度) 盒子的总宽度=width+margin(高度同理) 1.3 弹性盒模型(flex布局) 是当前页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。 使用弹性盒模型的目的是:提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。 2.有哪些外边距合并问题,怎么解决? 2.1 相邻块元素垂直外边距合并 当上下两个相邻的块元素(兄弟关系)相遇时,如果上面的盒子有下外边距,下面的盒子有上外边距,则他们之间的垂直间距不是这两个上下外边距的和,而是这取这两个值中较大者,这种现象被称为相邻块元素垂直外边距的合并 2.2 嵌套块元素垂直外边距塌陷和合并

对于两个嵌套关系的块元素,父元素有上外边距同时子元素也有上外边距:

1.如果父元素的上外边距大于子元素上外边距,此时子元素在父元素中并没有上外边距而是被父元素的上外边距包含住了这个叫做嵌套关系块元素上外边距合并。

2.如果父元素的上外边距小于子元素的上外边距,此时子元素在父元素中也没有上外边距而是作用到父元素的上外边距了这个叫做嵌套关系块元素上外边距塌陷。

2.3 解决方案: 1.给父元素添加:overflow: hidden; 2.给父元素设置伪类,用标签隔开防止塌陷(推荐) .div: before{ content: ""; display: table;//使用空的table标签可以隔离父子元素的外边距,阻止外边距重叠塌陷。 } 3.css引入页面的方式有几种,使用link和@import有什么区别? 3.1 有三种 行内样式 内部样式 外部样式 @import方式导入 @import ""; 3.2 link和@import有什么区别 link同时加载内容和样式,@import先加载HTML,再加载css link可以引入除css外其他内容,@import只能引入css JavaScript操作DOM只能操作link引入的css @import会增加页面的http请求 link没有兼容性,@import有兼容性(IE5以上支持) 4.介绍一下你对浏览器内核的理解? 4.1 引擎的区别

浏览器内核就是渲染引擎。
主要有两种引擎:

渲染引擎(layout engineer或Rendering Engine)负责对页面语法的解释并渲染,决定了浏览器如何显示网页的内容和格式,但是不同内核的浏览器对于网页的语法解释会有不同,所以渲染效果也不相同 js引擎是用来解析和执行js,来实现网页的动态效果。 4.2 常见浏览器内核
浏览器 内核 备注
ie Trident
Chrome blink 以前是webkit,现在是blink,blink是webkit的分支,国产浏览器新版本是blink内核
firefox Gecko
Safari webkit webkit的鼻祖是Safari
Opera blink 最初是自己的Presto内核,后来是webkit,现在跟随谷歌用bink
4.3 另外其他浏览器内核
浏览器 内核
2345浏览器,360浏览器,猎豹浏览器 ie + Chrome双内核
百度,世界之窗 ie内核
搜狗浏览器,遨游,qq浏览器 Triend(兼容模式) + webkit(高速模式)
5.image的 alt 和 title 有什么区别 alt:是当图片加载不出来时用文字来代替。 title:是当鼠标悬浮在图片上后的提示文字 6.iframe有哪些缺点 样式难调,还会有滚动条 浏览器的返回按钮不生效 会增加服务器的http请求 不会被一些搜索引擎搜索到 在一些较小的移动设备上无法完全显示框架 不容易打印。 7.使用css让一个元素消失在视野中的方法 1.设置元素的css属性为:display: none; 2.设置元素的css属性为:visibility: hidden; 3.设置元素的css属性为:opacity: 0; 4.可以使用定位把元素定位到边缘并裁减掉。 8.display: none; 和 visibility: hidden; 和 opacity: 0; 的区别:

特别注意:在form表单中,被display: none; 或 被 visibility: hidden;设置的表单里面有值依然可以被提交

8.1 占用空间问题 display: none; 是彻底消失,不再文档流中占位,浏览器不会解析该元素。 visibility: hidden; 是隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间,在文档流中占位,浏览器会解析该元素,仍然会影响布局。 opacity: 0; 和visibility: hidden; 一样还是会占用页面空间的。 8.2 子元素是否显示问题 display: none; 被设置后的元素的子元素也不会被显示出来。 visibility: hidden; 被设置后的元素的子元素可以设置visibility: visible; 显示出来。 opacity: 0; 被设置后和display一样子元素是完全透明。 8.3 是否产生回流问题 display: none; 切换显示时,页面产生回流(当页面中的一部分元素需要改变规模尺寸、布局、显示隐藏等,页面重新构建,此时就是回流。所有页面第一次加载时需要产生一次回流) visibility: hidden; 不会引起回流。 opacity: 0; 不会引起回流。 8.4 是否可以相应事件 display: none:不会被绑定到事件的,因为它不占用任何空间,不显示在文档流中。 visibility: hidden:无法触发自身绑定的事件,但可以在冒泡阶段响应事件。 opacity: 0; 可以给元素绑定事件。 8.5 遮挡住其他元素,是否影响其他元素事件触发 display: none:不会影响其他元素事件,因为完全不在页面中存在了。 visibility: hidden:不会影响其他元素事件,因为元素已经设置为完全不可见了,所以也没有影响。 opacity: 0:会影响其他元素事件,因为元素只是被设置为透明的了,但是并没有消失。 9.常见浏览器兼容问题

浏览器的兼容性问题,通常是因为不同的浏览器对同一段代码有不同的解析,造成页面显示不统一的情况

9.1 CSS Hack

我们为了让页面形成统一的效果,要针对不同的浏览器或不同版本写出对应可解析的CSS样式,所以我们就把这个针对不同浏览器/版本而写CSS的过程叫做 CSS hack。
CSS hack主要有三种:IE条件注释法、CSS属性前缀法、选择器前缀法。

9.2 IE条件注释法

即在正常代码之外添加判别IE浏览器或对应版本的条件注释,符合条件的浏览器或者版本号才会执行里边的代码

你想要执行的代码 你想要执行的代码 你想要执行的代码 9.3 CSS属性前缀法

给css的属性添加前缀。比如 * 可以被IE6/IE7识别,但 _ 只能被IE6识别,IE6-IE10都可以识别 “\9”,IE6不能识别!important,FireFox不能识别 * _ \9。
可以先使用“\9"标记,将IE分离出来,再用”*"分离出IE6/IE7,最后可以用“_”分离出IE6

.type{ color: #111; /* all */ color: #222\9; /* IE */ *color: #333; /* IE6/IE7 */ _color: #444; /* IE6 */ } 所以可以按着优先级就能给特定的版本捎上特定颜色 可以先使用“\9"标记,将IE分离出来,再用”*"分离出IE6/IE7,最后可以用“_”分离出IE6 .type{ color: #111; /* all */ color: #222\9; /* IE */ *color: #333; /* IE6/IE7 */ _color: #444; /* IE6 */ } 说明:在标准模式中: “-″减号是IE6专有的hack “\9″ IE6/IE7/IE8/IE9/IE10都生效 “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack “\9\0″ 只对IE9/IE10生效,是IE9/10的hack 9.4 选择器前缀法

1、最主要也是最常见的,就是浏览器对标签的默认支持不同,所以我们要统一,就要进行CSS reset . 最简单的初始化方法是 *{margin:0; padding:0;} 但不推荐,而且它也并不完善。

2、IE6双边距bug: 块属性标签添加了浮动float之后,若在浮动方向上也有margin值,则margin值会加倍。其实这种问题主要就是会把某些元素挤到了第二行

①.给float元素添加display:inline 即可正常显示
②就是hack处理了

3、上下margin重合问题,相邻的两个div margin-left margin-right 不会重合,但相邻的margin-top margin-bottom会重合

4、有些浏览器解析img标签也有不同,img是行内的,一般都会紧接着排放,但是在有些情况下还是会突然出现个间距,解决办法是给它来个浮动 float 。

5、很多时候可能会纳闷超链接访问过后 样式就混乱了,hover样式不出现了。其实主要是其CSS属性的排序问题。一般来说,最好按照这个顺序:L-V-H-A。

6、chrome下默认会将小于12px的文本强制按照12px来解析。解决办法是给其添加属性:
-webkit-text-size-adjust: none;

7、png24位的图片在IE6下面会出现背景,所以最好还是使用png8格式的。

10.列举IE 与其他浏览器不一样的特性? IE支持currentStyle,Firefox使用getComputStyle; IE使用innerText,FireFox使用textContent; 滤镜方面: IE:filter:alpha(opacity= num); Firefox:-moz-opacity:num; 事件方面:IE:attachEvent:火狐是addEventListener; 鼠标位置:IE是event.clientX;火狐是event.pageX; IE使用event.srcElement;Firefox使用event.target; IE中消除list的原点仅需margin:0即可达到最终效果;FIrefox需要设置margin:0;padding:0以及list-style:none; 11.cssSprite是什么 ?

CSS Sprites是一种网页图片应用处理方式,就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位。

12.有什么优缺点?

其优点在于:
1)减少网页的http请求,提高性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因;
2)减少图片的字节:多张图片合并成1张图片的字节小于多张图片的字节总和;
3)减少了命名困扰:只需对一张集合的图片命名,不需要对每一个小元素进行命名提高制作效率;
4)更换风格方便:只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变,维护起来更加方便。

诚然CSS Sprites是如此的强大,但是也存在一些不可忽视的缺点:
1)图片合成比较麻烦;
2)背景设置时,需要得到每一个背景单元的精确位置,;
3)维护合成图片时,最好只是往下加图片,而不要更改已有图片,这样图片字节数就会增加。

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

分成:

结构层 结构层(structural layer)由 HTML 或 XHTML之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P标签表达了这样一种语义:“这是一个文本段。” 表示层 表示层(presentation layer)由 CSS 负责创建。 CSS对“如何显示有关内容”的问题做出了回答。 行为层 行为层(behaviorlayer)负责回答“内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM主宰的领域。 14.css选择符有哪些?哪些属性可以继承?优先级算法如何计算?css3新增的伪类有哪些? 14.1 css选择器有哪些 标签选择器 id选择器 类选择器 相邻兄弟选择器(h1+p) 子代选择器(ul>li) 后代选择器(li a) 属性选择器(a[rel=“external”]) 伪类选择器(a:hover,li:nth-child) 全局选择器(*) 14.2 哪些属性可以继承 可以继承的样式:font-size, font-family, color, text-indent(等字体类样式) 不可继承的样式:border, padding, margin, width, height 14.3 优先级算法如何计算 在同权重性的选择器下 优先级就近原则; 有多个相同的选择器,后面的会覆盖掉前面的。 选择器权限
选择器 选择器权重
继承 ,* ,子选择器,相邻选择器 0,0,0,0
标签选择器,伪元素选择器 0,0,0,1
类选择器,伪类选择器(包括结构伪类),属性选择器 0,0,1,0
id选择器 0,1,0,0
行内样式选择器 1,0,0,0
!important 重要的 无穷大
14.4css3新增伪类------------------------------------------------ p:last-of-type 选择其父元素的最后的一个P元素
p:last-child 选择其父元素的最后子元素(一定是P才行)
p:first-of-type 选择其父元素的首个P元素
p:first-child 选择其父元素的首个p元素(一定是p才行)
p:only-child    选择其父元素的只有一个元素(而且这个元素只能是p元素,不能有其他元素)
p:only-of-type   选择其父元素的只有一个p元素(不能有第二个P元素,其他元素可以有) 
p:nth-child(n)   选择其父元素的第N个 刚好是p的元素
Enabled input:enabled 选择每个启用的 元素。
:disabled input:disabled 选择每个禁用的 元素
:checked input:checked 选择每个被选中的 元素。
:not(selector) :not§ 选择非

元素的每个元素。
::selection ::selection 选择被用户选取的元素部分
:empty p:empty 选择没有子元素的每个

元素(包括文本节点)

15.描述css reset的作用和用途 每个浏览器都有自带的默认样式,会造成一些布局上的困扰,css reset的作用就是重置这些默认样式,使样式表现一致; 为了页面的兼容性,需要重置css代码覆盖浏览器默认的样式来统一样式。 16.HTML5 存储类型有哪些,以及与他们的区别

HTML 5 支持本地存储,在之前版本中是通过 Cookie 实现的。HTML5 本地存储速度快而且安全。
有两种不同的对象可用来存储数据:

localStorage 适用于长期存储数据,浏览器关闭后数据不丢失 sessionStorage 存储的数据在浏览器关闭后自动删除 17.列举5种以上表单元素中input的type类型 text:定义单行的输入字段,用户可在其中输入文本 password:定义密码字段。该字段中的字符被掩码 file:定义输入字段和 "浏览"按钮,供文件上传 radio:定义单选按钮 checkbox:定义复选框 hidden:定义隐藏的输入字段 button:定义可点击按钮(多数情况下,用于通过JavaScript启动脚本) image:定义图像形式的提交按钮 reset:定义重置按钮。重置按钮会清除表单中的所有数据 submit:定义提交按钮。提交按钮会把表单数据发送到服务器 color:定义调色板 tel:定义包含电话号码的输入域 email:定义包含email地址的输入域 url:定义包含URL地址的输入域 search:定义搜索域 number:定义包含数值的输入域 range:定义包含一定范围内数字值的输入域 date:定义选取日、月、年的输入域 month:定义选取月、年的输入域 week:定义选取周、年的输入域 18.position的属性值都有哪些?并描述其含义及具体解释
属性 描述
absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
relative 生成相对定位的元素,相对于其正常位置进行定位。
fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。
static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
inherit 规定应该从父元素继承 position 属性的值。
19.document.write、innerHTML和innerText 的区别?

1.document.wirte
document.write是直接写入到页面的内容流,如果在写之前没有调用document.open, 浏览器会自动调用open。每次写完关闭之后重新调用该函数,会导致页面被重写。
2.document.innerHTML
innerHTML则是DOM页面元素的一个属性,可以用来读、写给定元素里的HTML内容。你可以精确到某一个具体的元素来进行更改。如果想修改document的内容,则需要修改document.documentElement.innerElement。
3.innerText
获取从起始位置到终止位置的内容,但它去除Html标签。
火狐浏览器不支持该标签,但所有浏览器都支持 innerHTML标签。

总结:
innerHTML是符合W3C标准的属性,而innerText只适用于IE浏览器(现在也适应chrome浏览器),因此,尽可能地去使用 innerHTML,而少用innerText,如果要输出不含HTML标签的内容,可以使用innerHTML取得包含HTML标签的内容后,再用正则表达式去除HTML标签。

write会导致页面重新绘制,而且性能略低于innerHTML,所有推荐使用innerHTML.

20.请说出至少三种减少页面加载时间的方法。(加载时间是指感知的时间或者实际加载的时间) 优化图片 图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方) 优化CSS(压缩合并css,如margin-top,margin-left…) 网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。) 标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。 当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。) 减少http请求(合并文件,合并图片)。 21.实现 class为test的div 在屏幕宽为400以下的宽度为200,屏幕宽为400~800的情况下宽 度为350; /*在屏幕宽为400以下的宽度为200*/ @media screen and (max-width: 400px) { .test{ width: 200px; } } /*屏幕宽为400~800的情况下宽 度为350*/ @media screen and (max-width: 800px) and (min-width: 400px) { .test{ width: 350px; } } 22.实现当屏幕宽度大于700,小于800时引用外部样式style-7-9.css 23.HTML5中input的6个新属性 color:定义调色板 tel:定义包含电话号码的输入域 email:定义包含email地址的输入域 url:定义包含URL地址的输入域 search:定义搜索域 number:定义包含数值的输入域 range:定义包含一定范围内数字值的输入域 date:定义选取日、月、年的输入域 month:定义选取月、年的输入域 week:定义选取周、年的输入域
作者:zhouxiaojie_



面试题 面试 前端 前端开发

需要 登录 后方可回复, 如果你还没有账号请 注册新账号