HTML&&CSS面试题收集

2020-09-29  本文已影响0人  瑞破破

1. 怎么让一个不定宽高的 DIV,垂直水平居中?

/*
* flex 方法
*/
display: flex;
align-items: center;
justify-cotent: center;
/*
* 知道盒子宽高 margin负值配合定位
*/
.son1{
    width: 200px;
    height: 200px;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -100px;
    margin-left: -100px;
}
.son2{
    width: 200px;
    height: 200px;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}
/*
* CSS3 transform
*/
position: absolute;
top: 50%;
left: 50%;
transform: translate( -50%, -50%);
/*
*使用display:table-cell方法
*/
.parent{
    display:table-cell;
    text-align:center;
    vertical-align:middle;
}
.son{
    display:inline-block;
    vertical-align:middle;
}


2.position 几个属性的作用?

static -- 默认值 没有定位
fixed  -- 绝对定位 相对于浏览器窗口
absolute -- 绝对定位 相对于 static 定位以外的第一个父元素进行定位。
relative -- 相对定位 相对于其正常位置进行定位。
inherit -- 规定应该从父元素继承 position 属性的值。

3. px,em,rem 的区别?

4. 什么是 BFC?

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

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

更详细解释

5. CSS 引入的方式有哪些? link 和@import 的区别是?

6. 描述 css reset 的作用和用途?

HTML标签在浏览器中都有默认的样式,不同的浏览器的默认样式之间存在差别。例如ul默认带有缩进样式,在IE下,它的缩进是由margin实现的,而在Firefox下却是由padding实现的。开发时浏览器的默认样式可能会给我们带来多浏览器兼容性问题,影响开发效率。所以解决的方法就是一开始就将浏览器的默认样式全部去掉,更准确说就是通过重新定义标签样式。“覆盖”浏览器的CSS默认属性。最最简单的说法就是把浏览器提供的默认样式覆盖掉!这就是CSS reset。

css-reset文件地址

7. 解释 css sprites,如何使用?

精灵图:简单来说就是把一些图标汇集到一张png上 通过像素点来显示不同位置的图片

8. 清除浮动的几种方式?

  1. 额外标签法:给谁清除浮动,就在其后额外添加一个空白标签 。

    .clear{
     clear: both;
    }
    
  1. 父级添加overflow方法: 可以通过触发BFC的方式,实现清楚浮动效果。

    .parent{
     overflow: hidden;
    }
    
  2. 使用after伪元素清除浮动: :after方式为空元素的升级版,好处是不用单独加标签了。(较常用)

    .clearfix:after {
        content: '';
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }
    .clearfix {
        *zoom: 1
    }
    
  3. 使用before和after双伪元素清除浮动: (较常用)

    .clearfix:before, .clearfix:after {
     content: '';
        display:table;
    }
    .clearfix:after{
        clear: both;
    }
    .clearfix{
        *zoom:1;
    }
    

9. 能否简述一下如何使一套设计方案,适应不同的分辨率,有哪些方法可以实现?

10. 你能描述一下渐进增强和优雅降级之间的不同吗?

渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。

优雅降级(Graceful Degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。

11. 合理的页面布局中常听过结构与表现分离,那么结构是什么?表现是什么?

结构:HTML ( 骨架 )

表现:CSS

12. 简述对 Web 语义化的理解?

13. CSS 都有哪些选择器?CSS 选择器的优先级是怎么样定义的?

14. display: none;与 visibility: hidden 的区别是什么?

15. 用 CSS 定义 p 标签,要求实现以下效果:字体颜色在 IE6 下为黑色(#000000);IE7下为红色(#ff0000);而其他浏览器下为绿色(#00ff00)

p {
    color: green;
    *color: blue;
    _color: black;
}

16. HTML 与 XHTML——二者有什么区别

17. Doctype 作用? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

  • Doctype: <!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。<!DOCTYPE>声明必须在 HTML 文档的第一行,这并不是一个 HTML 标签

  • 严格模式:又称标准模式,是指浏览器按照 W3C 标准解析代码。

    混杂模式:又称怪异模式或兼容模式,是指浏览器用自己的方式解析代码。

    如何区分:浏览器解析时到底使用严格模式还是混杂模式,与网页中的 DTD 直接相关。

18. 盒模型:

W3C 标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在 Quirks 模式下,IE 的宽度和高度还包含了 padding 和 border。

19. Css Hack?ie6,7,8 的 hack 分别是什么?

针对不同的浏览器写不同的CSS code的过程,就是CSS hack。

 background-color:blue;      /*firefox*/

background-color:red\9;      /*all ie*/

background-color:yellow;    /*ie8*/

+background-color:pink;        /*ie7*/

_background-color:orange;       /*ie6*/    } 

:root #test { background-color:purple\9; }  /*ie9*/

@media all and (min-width:0px){ #test {background-color:black;} }  /*opera*/

@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }       /*chrome and safari*/

20. 请用 div+css 写出左侧固定(width:200px;),右侧自适应页面宽度.

<style>
    .container{
        padding: 10px;
        border: 1px solid #ffa200;
        margin-bottom: 40px;
    }
    .container .left{
        background-color: #4b83e2;
    }
    .container .right {
        background-color: #ff3b30;
    }
    /*左浮动固定宽度,右边盒子overflow:hidden触发bfc,使其不与浮动盒子区域重叠,因此会重新计算宽度。*/
    .container1 .left{
        float: left;
        width: 200px;
    }
    .container1 .right {
        overflow: hidden;
    }
    /*清除浮动*/
    .container1:after{
        content: "";
        height: 0;
        line-height: 0;
        display: block;
        visibility: hidden;
        clear: both;
    }
    /*左浮动固定宽度,右边margin-left*/
    .container2 .left{
        float: left;
        width: 200px;
    }
    .container2 .right{
        margin-left: 200px;
    }
    /*清除浮动*/
    .container2:after{
        content: "";
        height: 0;
        line-height: 0;
        display: block;
        visibility: hidden;
        clear: both;
    }
    /*左边绝对定位,右边设置margin-left,缺点:当左边高于右边时,左边会超出父元素,需要使用js补救。*/
    .container3 {
        position: relative;
    }
    .container3 .left{
        position: absolute;
        left: 10px;
        top: 10px;
        width: 200px;
    }
    .container3 .right{
        margin-left: 200px;
    }
    /*双display:inline-block*/
    .container4{
        font-size: 0;
    }
    .container4 .left{
        width: 200px;
    }
    .container4 .left,.container4 .right{
        display: inline-block;
        font-size: 16px;
        vertical-align: top;
    }
    .container4 .right{
        width: calc(100% - 200px);
    }
    /*table*/
    .container5{
        display: table;
    }
    .container5 .left,.container5 .right{
        display: table-cell;
    }
    /*flex*/
    .container6{
        display: flex;
    }
    .container6 .right{
        flex-grow: 1;
    }
    /*grid*/
    .container7{
        display: grid;
    }
    .container7 .left{
        grid-column:1;
    }   
    .container7 .right{
        grid-column:2;
    }
</style>
<div class="container container1">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container2">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container3">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container4">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container5">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container6">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>
<div class="container container7">
    <div class="left">左边左边左边左边左边左边左边左边左边左边</div>
    <div class="right">右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边右边</div>
</div>

21. display:inline-block 什么时候会显示间隙?

间隙产生的原因是因为,换行或空格会占据一定的位置

解决:夫元素设置:

font-size:0;
letter-spaceing:-4px;

22. overflow 有哪些属性值?

23. css 去掉 iPhone、iPad 默认按钮样式

input[type="button"],
input[type="submit"],
input[type="reset"] {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
}

24. CSS 样式初始化的目的

  • CSS初始化是指重设浏览器的样式。不同的浏览器默认的样式可能不尽相同,所以开发时的第一件事可能就是如何把它们统一。如果没对CSS初始化往往会出现浏览器之间的页面差异。

  • 每次新开发网站或新网页时候通过初始化CSS样式的属性,为我们将用到的CSS或html标签更加方便准确,使得我们开发网页内容时更加方便简洁,同时减少CSS代码量,节约网页下载时间。

  • 初始化CSS为我们节约网页代码,节约网页下载时间;还会使得我们开发网页内容时更加方便简洁,不用考虑很多。

  • 如果不初始化,整个页面做完会很糟糕,重复的css样式很多。

25. 用 div+css 网站布局的好处

26. 用表格 table 对 seo 的影响

待补充。。。。。。

27. console 有哪些常用方法?(答出三种并说出它的用法即可,想考察你有没有工作经验)

28. 为什么利用多个域名来存储网站资源会更有效?

29. 网页的重绘与重排以及重构

30. 谈谈以前端角度出发做好 SEO 需要考虑什么

31. rgba()和 opacity 的透明效果有什么不同?

32. Sass、LESS 是什么?大家为什么要使用他们?

CSS 预处理器。他是 CSS 上的一种抽象层。他们是一种特殊的语法/语言编译成 CSS。

33. 行内元素有哪些?块级元素有哪些?空(void)元素有那些?样式之间的转换

强制转换成块元素
display:block
强制转换成行内元素
display:inline
强制转换成行内扩张元素
display:inline-block

34. CSS3 新特性有哪些?

35. CSS3 选择器有哪些?

36. 移动端优先使用弹性布局(flex)来解决布局问题,请列出弹性布局的相关属性,并说明属性用途

flex-direction属性决定主轴的方向(即项目的排列方向)。

  • row(默认值):主轴为水平方向,起点在左端。

  • row-reverse:主轴为水平方向,起点在右端。

  • column:主轴为垂直方向,起点在上沿。

  • column-reverse:主轴为垂直方向,起点在下沿。

flex-wrap属性定义,如果一条轴线排不下,如何换行。

  • nowrap(默认):不换行。
  • wrap:换行,第一行在上方。
  • wrap-reverse:换行,第一行在下方。

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

justify-content属性定义了项目在主轴上的对齐方式。

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

align-items属性定义项目在交叉轴上如何对齐。

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

37. CSS3 的兼容问题怎么处理?

-moz-border-radius: 2px; /* Firefox */
-webkit-border-radius: 2px; /* Safari 和 Chrome */
border-radius: 2px; /* Opera 10.5+, 以及使用了IE-CSS3的IE浏览器 */
-o-border-radius:2px;
-khtml-border-radius: 2px;   /* 针对Konqueror浏览器 */

38. CSS3 动画和 JS 动画主要的不同点是什么?

优点:

浏览器可以对动画进行优化。

浏览器使用与 requestAnimationFrame 类似的机制,requestAnimationFrame比起setTimeout,setInterval设置动画的优势主要是:

  • requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。
  • 在隐藏或不可见的元素中requestAnimationFrame不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。

强制使用硬件加速 (通过 GPU 来提高动画性能)

缺点:

  • 运行过程控制较弱,无法附加事件绑定回调函数。CSS动画只能暂停,不能在动画中寻找一个特定的时间点,不能在半路反转动画,不能变换时间尺度,不能在特定的位置添加回调函数或是绑定回放事件,无进度报告
  • 代码冗长。想用 CSS 实现稍微复杂一点动画,最后CSS代码都会变得非常笨重。

优点:

  • JavaScript动画控制能力很强, 可以在动画播放过程中对动画进行控制:开始、暂停、回放、终止、取消都是可以做到的。
  • JS动画的效果比css3动画丰富,有些动画效果,比如曲线运动,冲击闪烁,视差滚动效果,只有JavaScript动画才能完成
  • CSS3有兼容性问题,而JS大多时候没有兼容性问题

缺点:

  • JavaScript在浏览器的主线程中运行,而主线程中还有其它需要运行的JavaScript脚本、样式计算、布局、绘制任务等,对其干扰导致线程可能出现阻塞,从而造成丢帧的情况。
  • JS动画代码的复杂度高于CSS动画

39. 请用 Css 写一个简单的幻灯片效果页面

.......

40. Rem 的使用方法

41. 用 css 画一个三角形,圆,椭圆?

......

42. html5 有哪些新特性、移除了那些元素?如何处理 HTML5 新标签的浏览器兼容问题?

html5 新增

新元素

移除的元素

43. HTML5 中新增的操作 DOM 的方法?

box.classList.add("active");
box.classList.remove("active");
box.classList.contains("active"); >>>>返回值是一个布尔值,true or false
box.classList.toggle("active");

44. image 和 canvas 在处理图片的时候有什么区别?

......

45. HTML5 中的本地存储概念是什么?生命周期有多长?

html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。

sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁,因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

cookie是网站为了标示用户身份而储存在用户本地终端上的数据(通常经过加密)。

上一篇 下一篇

猜你喜欢

热点阅读