当前位置: 首页 > Web前端 > CSS

2019校招前端面试题——HTML,CSS

时间:2023-03-31 11:47:21 CSS

前言2019校招陆续开始,整理了一些高频面试题。HTML第1部分。什么是?DOCTYPE是html5标准的网页声明,必须声明在HTML文档的第一行。告诉浏览器的解析器使用什么文档标准来解析这个文档。文档解析类型有:BackCompat:怪异模式,浏览器使用自己的怪异模式来解析和渲染页面。(如果不声明DOCTYPE,默认为这种模式)CSS1Compat:标准模式,浏览器使用W3C标准来解析和渲染页面。2.Meta标签为页面提供一些元信息(名称/值对),对SEO有帮助。属性值:名称:名称/值对中的名称。作者、描述、关键字、生成器、修订版、其他。将内容属性与名称相关联。http-equiv:当没有名称时,将使用该属性的值。内容类型、过期、刷新、设置cookie。将content属性与http头内容相关联:名称/值对中的值,可以是任何有效的字符串。Alwaysuseschemewiththenameattributeorthehttp-equivattribute:用于指定用于翻译属性值的方案3。HTML语义用正确的标签做正确的事。HTML语义使页面内容结构化、清晰,便于浏览器和搜索引擎解析;即使没有样式CSS,也以文档格式显示,易于阅读;搜索引擎爬虫还依赖于根据HTML标签确定每个关键字的上下文和权重,这有利于SEO;方便阅读源代码的人将网站分块,便于阅读、维护和理解。4、常用浏览器内核Trident内核:IE、MaxThon、TT、TheWord、360、搜狗浏览器等Gecko内核:Netscape6及以上、FF、MozillaSuite/SeaMonkey等;Presto内核:Opera7及以上。【目前:Blink】Webkit内核:Safari、Chrome等【Chrome:Blink(Webkit分支)】五、简介对浏览器内核的理解主要分为两部分:渲染引擎??和JS引擎。渲染引擎:将代码转换成页面。负责获取网页内容(HTML、XML、图片等),整理信息(如添加CSS等),并计算网页的显示方式,然后输出到监视器或打印机。不同的浏览器内核对网页的语法解释不同,因此呈现的效果也不同。所有Web浏览器、电子邮件客户端和其他编辑和显示Web内容的应用程序都需要内核。JS引擎:解析执行javascript,实现网页动态效果。起初,渲染引擎和JS引擎并没有明确区分。后来JS引擎越来越独立,内核趋向于只指渲染引擎。6.HTML5有哪些新特性,删除了哪些元素?如何处理HTML5新标签的浏览器兼容性问题?新功能:(1)用于绘画的画布元素;(2)用于媒体播放的视频和音频元素;(3)更好地支持本地离线存储,localStorage长期存储数据,关闭浏览器后数据不丢失;sessionStorage数据在浏览器关闭后自动删除;(4)语义较好的内容元素,如header、nav、section、article、footer;(5)新增表单控件:日历、日期、时间、邮箱、url、搜索;(6)新技术webworker、websockt、Geolocation;去除元素:(1)纯表达元素:basefont,big,center,font,s,strike,tt,u;(2)对可用性有负面影响的元素:frame、frameset、noframes;兼容性问题:IE8/IE7/IE6支持document.createElement方法生成的标签,可以利用这个特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认样式。7.哪些HTML5标签可以针对SEO进行优化?标题、元数据、页眉、页脚、导航、文章、aside8。src和href的区别src指向外部资源的位置,指向的内容会嵌入到文档中当前标签的位置,请求src资源时会把指向的资源下载并应用到文档中,比如js脚本,img图片,frame元素。浏览器在解析这个元素时,会暂停其他资源的下载和处理,直到该资源加载、编译、执行完毕,所以一般js脚本都会放在底部而不是头部。href是指网络资源的位置,与当前元素(锚点)或当前文档(链接)建立链接,用于超链接。9、渐进增强和优雅降级渐进增强:为低版本浏览器构建页面,保证最基本的功能,然后为高级浏览器改进和添加效果、交互等功能,以达到更好的用户体验。优雅降级:从一开始就构建完整的功能,然后使其兼容低版本的浏览器。10、defer和asyncdefer的区别直到整个页面在内存中正常渲染后才会执行(DOM结构完全生成,其他脚本执行完毕)。多个延迟脚本将按照它们在页面上出现的顺序加载。=="Executeafterrendering"==一旦下载了async,渲染引擎就会中断渲染。执行此脚本后,渲染将继续。无法保证多个异步脚本的加载顺序。=="下载后执行"==11.如何实现浏览器中多个标签页之间的通信?方法一:调用localstorge标签页一:Tab2:$(function(){window.addEventListener("storage",function(event){console.log(event.key+"="+event.newValue);});//使用storage事件监听增、改、删的动作});方法二:使用cookie+setInterval将要传输的信息存储在cookie中,每隔一定时间读取cookie信息,随时获取要传输的信息。选项卡1:$(function(){$("#btn").click(function(){varname=$("#name").val();document.cookie="name="+name;});});选项卡2:$(function(){functiongetCookie(key){returnJSON.parse("{\""+document.cookie.replace(/;\s+/gim,"\",\"").replace(/=/gim,"\":\"")+"\"}")[key];}setInterval(function(){console.log("name="+getCookie("name"));},10000);});CSSpart1.cssboxmodelIEboxmodelbox-sizing:border-box;(奇怪的模式);W3C标准盒子模型box-sizing:content-box;(标准型号)。应用场景:(1)表单:表单中的一些input元素实际展示的是传统的IE盒子模型,带有一些默认的样式,在不同的平台或者浏览器上表现不一样,导致表单展示的差异。此时,我们可以使用box-sizing属性来构建一个样式统一的表单元素。(2)在设置子类元素的边距或边框时,可能会破坏父层元素的尺寸。这时候就需要使用box-sizing:border-box将边框包含到元素的尺寸中,这样就不会出现父层元素被破坏的情况。2、行内元素和块级元素有什么区别?内联块级元素的兼容性使用?(IE8以下)块级元素:div、p、h1、form、ul、li(1)各占一行,垂直排列;(2)可以包含其他块级或行内元素;(3)高度、行高和外边距和内边距都可以控制;(4)默认宽度为其父容器的100%(与父元素的宽度一致),与内容无关。行内元素:span、a、label、input、img、strong、em(1)水平排列,不自动换行;(2)不能包含块级元素,但可以包含其他行内元素或文本;(3)行内元素的宽高无效(可以设置line-height),margin和padding无效;(4)宽度为其文字和图片的宽度,不可更改。IE8以下内联块级元素的兼容性(块元素模拟inline-block)div{display:inline-block;缩放:1;//触发hasLayoutdisplay:inlineunderIE;//一旦hasLayout被触发就设置显示:inline和display:block有类似的效果。}haslayout是IE7浏览器独有的属性。hasLayout是一个只读属性,有两种状态:true或false。当为真时,表示该元素有自己的布局,否则表示该元素的布局继承自父元素。注意:当前元素的hasLayout可以通过element.currentStyle.hasLayout获取。3.导入页面样式时,使用link和@import有什么区别?(1)link是一个XHTML标签。除了加载CSS,它还可以定义RSS等其他东西;@import属于CSS的范畴,只能加载CSS。(2)当链接引用CSS时,在页面加载时同时加载;@import需要在页面完全加载后加载。(3)link是一个XHTML标签,没有兼容性问题;@import是CSS2.1提出的,低版本浏览器(IE5以下)不支持。(4)link支持使用Javascript控制DOM改变样式;而@import不支持它。4、清除浮动的方法有哪些?(1)在浮动元素下方添加一个非浮动元素

父容器现在必须考虑非浮动子元素的位置,后者必须出现在浮动元素下方,所以显示出来,父容器包含了所有的子元素。这种方法比较简单,但是在页面中添加冗余标签违反了语义网的原则。(2)父容器也改为浮动定位
这种方法不需要修改html代码,但缺点是父容器浮动后会影响后面元素的定位,并且有时,父容器被定位为Dead,无法成为float。(3)在父容器中设置overflow:hidden或auto。(打开BFC)>缺点:一是IE6不支持,二是子元素的大小一旦超过父容器的大小,就会出现显示问题。(4)使用:after伪选择器在父容器末尾自动创建子元素==(推荐)==.clearfix:after{content:"";显示:块;clear:both;}//兼容ie6:激活父元素的“hasLayout”属性,让父元素有自己的布局。clearfix{缩放:1;//orheight:1%;}5.简单介绍BFC和IFCBFC——块级格式化上下文(1)BFC触发条件:根元素或其他包含它的元素浮动元素float:left/rightposition:absolute/fixeddisplay:inline-block,table-cell,table-captionoverflow不可见Elasticbox:display:flexorinline-flex(2)BFC特性内部的Boxes会在垂直方向依次放置;垂直方向的距离由margin决定(属于同一个BFC的两个相邻Boxes的margin会重叠,与方向无关);每个元素的边距框的左侧触及包含块边框的左侧;框(用于从左到右的格式,否则)。即使有浮动也是如此;BFC区域不会与浮动元素区域重叠;在计算BFC的高度时,浮动的子元素也参与计算,可以解决父元素高度塌陷的问题;BFC是页面上一个隔离的独立容器。容器内部的子元素不会影响外部元素,反之亦然;文档流中的BFC元素,当width为auto时,会占据当前行的剩余宽度。(3)应用防止相邻两个普通流中块元素垂直方向的marginfolding;BFC可以包含浮动元素和展开父元素;BFC可以防止元素被浮动元素覆盖。(4)BFC和hasLayoutIE6-7不支持BFC,而是使用私有属性hasLayout,需要使用zoom:1来触发hasLayout属性。Zoom用于设置或获取元素的缩放比例,值为“1”即使用元素的实际大小。IFC-InlineFormattingContext(一)创建方式:与BFC相比,其创建方式是被动隐式的,由被包含的子元素创建:仅在一个区域内只能水平排列生成为子元素的元素,可以是文本、行内元素或行内块级元素。(2)特点:IFC内部的元素按照从左到右、从上到下的顺序排列;IFC内部的每个元素都可以通过设置vertical-align属性在垂直方向进行调整;包含这些内部元素的矩形区域,形成每一行,称为行框(linebox)。6.选择者优先!important>inlinestyle>idselector>classselector>labelselector>wildcard>inheritanceweightalgorithm:(0,0,0,0)——>第一个0对应重要的个数,第二个0对应重要的个数id选择器,第三个0对应类选择器的个数,第四个0对应标签选择器的个数,它们合起来就是当前选择器的权重。比较:从第一个0开始比较,如果第一个0大,说明选择器的权重高。如果第一个相同,则比较第二个,依此类推。7、如何实现水平和垂直居中(1)行内元素水平居中text-align:center;行高:100px;(2)块级元素水平居中margin:0auto;(3)水平已知高度和宽度的元素垂直居中使用绝对定位和负margins.container{width:600px;高度:600px;位置:相对;}.center{宽度:300px;高度:300px;位置:绝对;左:50%;顶部:50%;margin:-150px00-150px;}使用绝对定位和margin.container{width:600px;高度:600px;位置:相对;}.center{宽度:300px;高度:300px;位置:绝对;顶部:0;左:0;右:0;底部:0;margin:auto;}(4)未知高度和宽度元素的水平和垂直居中要居中的元素是inline或inline-blockelement.container{width:600px;高度:600px;显示:表格单元格;文本对齐:居中;vertical-align:middle;}css3transformproperty.container{width:100%;高度:600px;位置:相对;}.center{位置:绝对;:50%;左:50%;transform:translate(-50%,-50%);}flexlayout.container{宽度:100%;高度:600px;显示:弹性;证明合法-内容:中心;align-items:center;}最简单的写法:.container{display:flex;height:600px;}.center{margin:auto;}8.实现左边固定宽度,右边自适应布局(1)左框向左浮动,右框width=100%(2)左框向左浮动,向右浮动boxmargin-left=leftboxwidth(3)leftbox向左浮动,rightbox向右浮动,设置width:calc(100%-leftBoxwidth)(4)父容器设置display:flex,rightboxflex:19.实现中间宽度自适应,左右栏定宽布局,两招搞定三栏布局——圣杯布局,双飞翼布局10.脱离文档流(1)浮出文档flow:当使用float脱离文档流时,其他box会忽略这个元素,但是其他box中的文字还是会让位给这个元素并环绕它(2)脱离文档流的绝对定位:使用absolute:position|fixed文档流外的元素,其他框和其他框内的文本将忽略它。11.CSS3新特性Color:NewRGBA,HSLAmode文字阴影(text-shadow)边框:圆角(border-radius)边框阴影:box-shadow盒子模型:box-sizing背景:background-size设置背景图片大小,background-origin设置背景图片的原点,background-clip设置背景图片的裁剪区域,以“,”分隔可以设置多个背景进行自适应布局Gradient:linear-gradient,radial-gradientTransition:过渡可以实现AnimationCSS3中自定义动画引入的伪元素只有::selection多媒体查询,多列布局border-image2D变换:transform:translate(x,y)rotate(x,y)skew(x,y)scale(x,y)3D变换12.display:none;有什么区别?和可见性:隐藏?(1)显示:无;HTML元素(对象)的宽、高、高度等属性值会“丢失”,视为不存在,不加载。(2)可见性:隐藏;HTML元素(对象)只是视觉上不可见(完全透明),它所占据的空间仍然存在,也就是说它仍然有高度和宽度等属性值。13、响应式布局原理媒体查询,查询当前屏幕(media媒体)的宽度,针对不同的屏幕宽度设置不同的样式,以适应不同的屏幕。14.Flex布局Flex布局可以看阮一峰老师的这两篇文章:FlexLayoutTutorial:Grammar,FlexLayoutTutorial:Examples,写的很详细。(1)容器上设置的属性flex-direction:row|行反转|栏目|column-reverse项目的排列方向flex-wrap:nowrap|包装|wrap-reverse是否包裹flex-flow:||flex-direction和flex-wrapjustify-content的简写:flex-start|弹性端|中心|间隔|space-around水平方向对齐align-items:flex-start|弹性端|中心|基线|stretch定义垂直方向的对齐方式align-content:flex-start|弹性端|中心|间隔|环绕空间|stretch定义了多轴的对齐方式,如果item只有一个轴,则该属性不起作用(当item有多行时)(2)item上设置的属性order:定义了item的排列顺序item在容器中排列,值越小越好排列越靠前,默认值为0flex-basis:|auto定义item在分配多余空间前占用的主轴空间,浏览器根据这个属性计算主轴是否有多余空间flex-grow:定义item的放大比例。默认值为0,即如果有剩余空间,则不放大flex-shrink:定义item的收缩比例。默认值:1,即如果没有足够的空间,项目将收缩,负值对此属性没有影响。弹性:无|[<'flex-grow'><'flex-shrink'>?||<'flex-basis'>]flex-grow,flex-shrink和flex-basis的简写默认值:01auto,即可以缩小而不放大,大小为item本身的大小。对齐自我:自动|弹性启动|弹性端|中心|基线|stretch允许单个item与其他item有不同的对齐方式,会持续更新...HTTP的相关知识可以看我的总结这篇文章:HTTP协议知识点总结JavaScript相关的基础知识可以查看在这两本思维导图中:你所不知道的JavaScript(第一卷)、你所不知道的JavaScript(第二卷)Part1Part2和下册还在整理中。