zoukankan      html  css  js  c++  java
  • 前端面试题整理—HTML/CSS篇

    1、简述一下你对HTML语义化的理解

     1)用正确的标签做正确的事情

     2)html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析

     3)即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的

     4)搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO

     5)使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解

    2、Doctype作用?标准模式与兼容模式之间区别?

      <!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html>标签之前,告知浏览器的解析器用什么文档标准解析这个文档

      DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现

      标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行

      在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器以防止站点无法工作

    3、什么是盒模型?你是怎么理解的

      简单的说页面是由若干个盒模型(BOX)堆砌起来的,可以说每个HTML元素就是一个盒模型

      盒模型由外到内包括边距(margin)、边框(border)、填充(padding)、内容(content)

      盒子模型有两种分别是W3C标准模型和IE模型

      不同之处:

      标准模型宽高是指content,不包括padding和border

      IE模型的宽高是指content+padding+border的总宽高

    4、谈谈对BFC的理解

      BFC:块格式化上下文(Block Formatting Context)

      BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品

      BFC的特性:

      1)bfc 是一个独立的容器,容器内子元素不会影响容器外的元素

      2)bfc的区域不会与float的元素区域重叠

      3)计算bfc的高度时,浮动元素也参与计算

      4)垂直方向上的距离由margin决定

      5)内部的Box会在垂直方向上一个接一个的放置

      以下条件会形成BFC:

      1)浮动元素 float:left | right | inherit(none除外)

      2)position:absolute 或 fixed 定位

         3)display:inline-block | inline-flex | table-cell

      4)overflow:hidden | auto | scroll (visible除外)

    5、CSS选择符有哪些?哪些属性可以继承?

      id选择器( # myid)
      类选择器(.myclassname)
      标签选择器(div, h1, p)
      相邻选择器(h1 + p)
      子选择器(ul > li)
      后代选择器(li a)
      通配符选择器( * )
      属性选择器(a[rel = "external"])
      伪类选择器(a:hover, li:nth-child)

      可继承的样式: font-size font-family color, ul li dl dt dd

      不可继承的样式:border padding margin width height

    6、CSS优先级算法如何计算?

      优先级就近原则,同权重情况下样式定义最近者为准

      载入样式以最后载入的定位为准

      优先级为: !important > id > class > tag important 比 内联优先级高

    7、你理解的伪类与伪元素 

      伪类:用于向某些选择器添加特殊的效果。比如span:first-child{}
      伪元素:用于将特殊的效果添加到某些选择器。比如span:before{}

      伪类只要不是互斥可以叠加使用

      伪元素在一个选择器中只能出现一次,并且只能出现在末尾
      伪类与伪元素优先级分别与类、标签优先级相同
      它们的本质区别:是否抽象创造了新元素

    8、display有哪些值?box-sizing 常用的属性有哪些?说明他们的作用

      block 像块类型元素一样显示。
      none 缺省值。像行内元素类型一样显示。
      inline-block 像行内元素一样显示,但其内容像块类型元素一样显示。
      list-item 像块类型元素一样显示,并添加样式列表标记。
      table 此元素会作为块级表格来显示
      inherit 规定应该从父元素继承 display 属性的值 

      box-sizing: content-box; // 默认的标准(W3C)盒模型元素效果
      box-sizing: border-box; // 触发怪异(IE)盒模型元素的效果
      box-sizing: inherit; // 继承父元素 box-sizing 属性的值

    9、什么是外边距重叠? 重叠的结果是什么?

      外边距重叠就是 margin-collapse

      相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。 这种合并外边距的方式被称为折叠  

      折叠结果遵循下列计算规则:
      1)两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值
      2)两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值
      3)两个外边距一正一负时,折叠结果是两者的相加的和

    10、请列举几种隐藏元素的方法  

      1)display: none; 元素会变得不可见,并且不会再占用文档的空间
      2)visibility: hidden; 只是简单的隐藏某个元素,但是元素占用的空间还存在
      3)opacity: 0; 设置0可以使一个元素完全透明
      4)position: absolute; 设置一个很大的 left 负值定位,使元素定位在可见区域之外
      5)transform: scale(0); 将一个元素设置为缩放无限小,元素不可见 原来位置将被保留

    11、你对line-height是如何理解的?

      line-height 指一行字的高度,包含了字间距,实际上是下一行基线到上一行基线距离

      一个容器没有设置高度,那么撑开容器高度的是 line-height 而不是容器内的文字内容

      把 line-height 值设置为 height 一样大小的值可以实现单行文字的垂直居中

      line-height和height都能撑开一个高度,height会触发 haslayout,而line-height不会

    12、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

      行内元素有:a b span img input select strong

      块级元素有:div ul ol li dl dt dd h1-h6 p

      常见的空元素: <br> <hr> <img> <input> <link> <meta>

    13、position有哪些值,他们各自的区别

      absolute:生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位

      relative:生成相对定位的元素,相对于其正常位置进行定位

      fixed:生成绝对定位的元素,相对于浏览器窗口进行定位(固定定位)

      static:默认值,无定位,元素出现在正常的流中(忽略top,bottom,left,right z-index)

    14、HTML5有哪些新特性,新技术,如何区分HTML和HTML5?

       语意化更好的内容元素。比如header、footer、nav、section、article

      用于媒介回放的 video 和 audio 元素

      绘画 canvas

      拖放Drag

      表单控件,calendar、date、time、email、url、search

      存储功能localStorage和sessionStorage

      localStorage 长期存储数据,浏览器关闭后数据不丢失
      sessionStorage的数据在浏览器关闭后自动删除

      新的技术webworker, websocket(通讯协议), Geolocation(地理定位)

      区分HTML和HTML5:

      DOCTYPE声明上不同

      结构语义上不同

      添加了新的功能媒体标记标签,如audio、video

    15、SVG 与 Canvas两者间的区别

      SVG 是一种使用 XML 描述 2D 图形的语言

      Canvas 通过 JavaScript 来绘制 2D 图形

      SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的,在SVG 中,每个被绘制的图形均被视为对象

      如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形

      Canvas 是逐像素进行渲染的

      在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注

      如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象

    16、为什么要初始化CSS样式

      因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的

      如果没对CSS初始化往往会出现浏览器之间的页面显示差异

      可以使用 reset.css 或 Normalize.css 做 CSS 初始化

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

      opacity 作用于元素以及元素内的所有内容(包括文字)的透明度

      rgba() 只作用于元素自身的颜色或其背景色,子元素不会继承透明效果

    18、请描述一下 cookies,sessionStorage 和 localStorage 的区别

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

      sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存

      存储大小:

      cookie数据大小不能超过4k

      sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大

      有效时间:

      localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据

      sessionStorage 数据在当前浏览器窗口关闭后自动删除

      cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

    19、浏览器是怎么对HTML5的离线储存资源进行管理和加载的?

      1)在线的情况下,浏览器发现 html 标签有 manifest 属性,它会请求 manifest 文件

      2)如果是第一次访问app,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储

      3)如果已经访问过app且资源已经离线存储了,浏览器会对比新的 manifest 文件与旧的 manifest 文件,如果文件没有发生改变,就不做任何操作。如果文件改变了,那么就会重新下载文件中的资源并进行离线存储

      4)离线的情况下,浏览器就直接使用离线存储的资源

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

      link 属于HTML标签,除了加载CSS外,还能用于定 RSS等;@import 只能用于加载CSS

      页面加载的时,link 会同时被加载,而 @import 引用的 CSS 会等到页面被加载完再加载

      @import 只在 IE5 以上才能被识别,而 link 是HTML标签,无兼容问题

    21、列举几种清除浮动的方法

      1)给父级使用:after 伪元素

      2)末尾处添加空div标签clear:both

      3)父元素设置 overflow:hidden; (必须定义width或zoom:1)

      4)父元素也设置浮动

      5)结尾处加br标签clear:both

    22、什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

      响应式设计就是网站能够兼容多个终端(包括PC端,手机平板终端),而不是为每个终端做一个特定的版本

      基本原理是利用CSS3媒体查询,为不同尺寸的设备适配不同样式

      对于低版本的IE,可采用JS获取屏幕宽度,然后通过resize方法来实现兼容

    23、水平居中、垂直居中的方法有哪些?

      水平居中:

      1)inline-block实现水平居中(text-align:center;)

      2)margin和width实现水平居中

      3)绝对定位实现水平居中

      4)使用flex实现水平居中

      5)使用栅格布局grid实现水平居中

      垂直居中:

      1)新增 inline-block 兄弟元素,设置 vertical-align

      2)绝对定位配合 transform 位移

      3)使用flex弹性盒子display:flex

      4)未知高度的块级子元素,采用table-cell配合vertical-align

      5)已知高度的块级子元素,采用绝对定位和负边距

      6)通过css3的translate变形实现

    24、你理解的flex弹性盒子布局

      Flexbox用于不同尺寸屏幕中创建可自动扩展和收缩布局

      任何一个容器都可以指定为Flex布局

      使用弹性布局可以有效的分配一个容器的空间

      即使我们的容器元素尺寸改变,它内部的元素也可以调整它的尺寸来适应空间

      设置了flex布局后,子元素的float、clear和vertical-align属性就会失效

    25、阐述px与em、rem的区别,以及你知道的其他css单位

      px就是pixel像素的缩写,相对长度单位。常用于PC端的字体单位

      em相对于当前父元素的font-size(并不是固定的)

      rem相对于HTML根元素的font

      其他css单位:

      %百分比,一般来说就是相对于父元素

      vw是相对视口(viewport)的宽度而定的,长度等于视口宽度的1/100

      vh是相对视口(viewport)的高度而定的,长度等于视口高度的1/100

      vm css3新单位,相对于视口的宽度或高度中较小的那个

    26、实现左边固定宽度,右边自适应(不限于一种方法)

      1)浮动布局(左侧固定宽度并且左浮动,右侧使用margin-left)

      2)使用定位(左侧固定宽度并且绝对定位,右侧使用margin-left)

      3)overflow(左侧固定宽并且左浮动,右侧加overflow:hidden)

      4)flex布局(父级元素设置display:flex,左侧设置固定宽,右侧flex:1)

    27、使用css实现一个持续的动画

      

    .animat{
         width:20px;
         height:20px;
         background:red;
         position:relative;
         animation:mymove 3s infinite;        
    }
    @keyframes mymove{
         from{left:0px;}
         to{left:200px;}
    }

    28、css实现三角形

    .triangle{ 
         width:0;
         height:0;
         border-width:20px;
         border-style:solid;
         border-color:transparent transparent red transparent;
    }

    29、移动端开发中有哪些常用的布局?

      百分比流式布局

      flex布局

      媒体查询+rem布局

      固定宽度做法

    30、什么是圣杯布局和双飞翼布局,并说下实现原理

      圣杯布局:

      三列布局;中间主体内容前置,且宽度自适应;两边内容定宽

      好处:重要的内容放在文档流前面可以优先渲染

      原理:利用相对定位、浮动、负边距布局,而不添加额外标签

      双飞翼布局:

      双飞翼布局:对圣杯布局(使用相对定位对以后布局有局限性)的改进,消除相对定位

      原理:主体元素上设置左右边距,预留两翼位置。左右两栏使用浮动和负边距归位,消除相对定位

    31、align-content与align-items的区别?

      align-content:center对单行是没有效果的

      而align-items:center不管是对单行还是多行都有效果

      我们日常开发中用的比较多的就是align-items

    32、列举去除inline-block出现间距的几种方法

      1)给父级font-size:0

      2)使用margin负值

      3)使用letter-spacing

      4)使用word-spacing

      5)移除空格

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

      title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取有很大的影响

      b是一个实体标签,展示强调内容。strong是标明重点内容,有语气加强的含义

      i内容展示为斜体,em表示强调的文本

    34、<script>、<script defer>、<script async>三者之间区别

      没有defer或async属性,浏览器会立即加载并执行相应的脚本

      有了async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行

      有了defer属性,加载后续文档的过程和js脚本的加载是并行进行的
      (此时仅加载不执行)

      defer和async在网络加载过程是一致的,都是异步执行

      两者的区别在于脚本加载完成之后何时执行

      如果存在多个有defer属性的脚本,那么它们是按照加载顺序执行脚本的

      对于async,它的加载和执行是紧挨的,无论声明顺序如何,只要加载完成立刻执行

    35、data-的用法,以及他的优势

      data-代表自定义属性,可以在所有的 HTML 元素中嵌入数据

      自定义的数据可以让页面拥有更好的交互体验

      属性名不要包含大写字母,在 data- 后必须至少有一个字符

      该属性可以是任何字符串

      自定义属性前缀 "data-" 会被客户端忽略

    36、如何实现浏览器内多个标签页之间的通信?

      WebSocket、SharedWorker

      也可以调用localstorge、cookies等本地存储方式

    37、实现不使用border画出1px高的线

    注:在不同浏览器的标准模式与怪异模式下都能保持一致的效果

    <div style="height:1px;overflow:hidden;background:red"></div>

    38、怎么让Chrome支持小于12px 的文字

    .shrink{
          -webkit-transform:scale(0.8);
           -o-transform:scale(1);
           display:inline-block;
    }

    39、一个满屏 品 字布局 如何设计?

      上面的div宽100%

      下面的两个div分别宽50%

      然后用float或者inline使其不换行即可

    40、经常遇到的浏览器的兼容性有哪些?解决方法是什么?

      1)PNG24位的图片在ie6浏览器上出现背景,解决方案是做成PNG8

      2)浏览器默认的margin和padding不同。解决方案:*{margin:0;padding:0;}

      3)Chrome中文界面下默认会将小于12px的文本强制按照12px显示,可通过加入CSS属性-webkit-text-size-adjust:none解决

      4)IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义的属性

      在FireFox下,只能使用getAttribute()获取自定义属性;解决方法:统一通过getAttribute()获取自定义属性

      5)IE下,even对象有x,y属性,但是没有pageX,pageY属性

      在Firefox下,even对象有pageX,pageY属性,但是没有x,y属性

       解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数

    41、less如何定义一个函数,比如圆角

    //定义圆角
       @radius 
           .round(@radius:5px){
            border-radius:@radius;
                -webkit-border-radius: @radius;
                -moz-border-radius: @radius;
            }
            .round7{
               .round(7px);
            }

    42、如何平移放大一个元素

    transform:translateX(100px)
    transform:scale(2)

    43、CSS中动画实现的方式有几种

      transition、keyframes(animation)

    44、你知道的CSS预处理器,以及预处理器作用

      less、sass、Stylus

      作用:
      帮助更好地组织CSS代码
      提高代码复用率
      提升可维护性

    45、如何解决CSS模块化

      less sass 等CSS预处理器

      webpack处理CSS(css-loader+style-loader)

      PostCSS插件(postCSS-import/precss等)

    46、li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

      浏览器的默认行为会把inline元素间的空白字符渲染成一个空格,空格会占用一个字符的宽度

      解决方案:给父级font-sieze设置为0。或者采用letter-spacing方式

    47、描述一下你对渐进增强和优雅降级的理解

      渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验

    .transition{
        -webkit-transition: all .5s;
           -moz-transition: all .5s;
             -o-transition: all .5s;
               transition: all .5s;  
     }

      优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容

            .transition{ 
                   transition: all .5s;
                -o-transition: all .5s;
               -moz-transition: all .5s;
             -webkit-transition: all .5s;
            }    

    48、解释css sprites,如何使用

      css精灵又称雪碧图

      将多个小图片整个到一张大的背景图上,再利用repeat、position进行精准操作

      雪碧图减轻了服务器的请求次数,提高了页面性能

    49、针对移动浏览器端开发页面,不期望用户放大屏幕,且要求“视口(viewport)”宽度等于屏幕宽度,视口高度等于设备高度,如何设置?

    <meta name = "viewport" content = "width=device-width,initial-scale = 1.0,maximum-scale = 1.0">

    50、简述几个css hack

      (1) 图片间隙
      在div中插入图片,图片会将div下方撑大3px。hack1:将<div>与<img>写在同一行。hack2:给<img>添加display:block;
      dt li 中的图片间隙。hack:给<img>添加display:block;
      (2) 默认高度,IE6以下版本中,部分块元素,拥有默认高度(低于18px)
      hack1:给元素添加:font-size:0;
      hack2:声明:overflow:hidden;
      表单行高不一致
      hack1:给表单添加声明:float:left;height: ;border: 0;
      鼠标指针
      hack:若统一某一元素鼠标指针为手型:cursor:pointer;
      当li内的a转化块元素时,给a设置float,IE里面会出现阶梯状
      hack1:给a加display:inline-block;
      hack2:给li加float:left;

  • 相关阅读:
    第10章 指针(二) 首地址指针
    第10章 指针(五) 使用地址指针的引用
    第10章 指针(六) 指针小结
    C语言中的类模拟(C++编程思想)
    经典SQL语句大全
    C#ADO.NET操作数据代码汇总
    C#日期格式化
    第10章 指针(四) 地址簿指针变量
    数据库设计中的14个技巧
    第9章 预处理命令
  • 原文地址:https://www.cnblogs.com/theblogs/p/10534609.html
Copyright © 2011-2022 走看看