前端面试知识体系(html/CSS篇)

HTML

1、如何理解HTML语义化?

  • 让人更容易读懂(增加代码可读性)
  • 让搜索引擎更容易读懂( SEO )

2、默认情况下,哪些HTML标签是块级元素、哪些是内联元素?

  • display: block/table;有div h1 h2 table ul ol p 等
  • display: inline/inline- block;有span img input button等

3、h5新标签 / 新特性

  • 用于绘画的 canvas 元素
  • 用于媒介回放的 video 和 audio 元素
  • 对本地离线存储的更好的支持
  • 新的特殊内容元素,比如 article、footer、header、nav、section
  • 新的表单控件,比如 calendar、date、time、email、url、search

CSS

CSS3新特性

1.   CSS3实现圆角(border-radius),阴影(box-shadow),

2.    对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)

3.    transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜

4.    增加了更多的CSS选择器  多背景 rgba 

5.    在CSS3中唯一引入的伪元素是 ::selection.

6.    媒体查询,多栏布局

7.    border-image

1、盒子模型的宽度如何计算?

如下代码,请问div1的offsetWidth是多大?

<style>
    #div1 {
        width: 100px;
        padding: 10px;
        border :1px solid #cCC;
        margin: 10px;
    }
</style>
<div id="div1"></div>
<script>
    document.getElementById('div1').offsetWidth
</script>

 offsetWidth = (内容宽度+内边距+边框) ,无外边距

答案是122px。

补充:如果让offsetWidth等于100px ,该如何做?

#div1 {
    width: 100px;
    padding: 10px;
    border :1px solid #cCC;
    margin: 10px;
    box-sizing: border-box;
}

 

2、margin纵向重叠的问题

如下代码,AAA和BBB之间的距离是多少?

<style>
    p {
        font-size: 16px;
        line-height: 1;
        margin-top: 10px;
        margin-bottom: 15px;
    }
</style>
<p>AAA</p> 
<p></p>
<p></p>
<p></p>
<p>BBB</p>

需要知道

  • 相邻元素的margin-top和margin-bottom会发生重叠
  • 空白内容的<p></p>也会重叠

答案:15px。


3、margin负值的问题

对margin的top left right bottom设置负值,有何效果?

  • margin-top和margin-left负值,元素向上、向左移动
  • margin-right负值,右侧元素左移,自身不受影响
  • margin-bottom负值,下方元素上移,自身不受影响

4、BFC理解和应用

什么是BFC ?

  • Block format context,块级格式化上下文一块独立渲染区域,内部元素的渲染不会影响边界以外的元素

形成BFC的常见条件

  • float 不是none 
  • display 是flex inline-block
  • position 是absolute或fixed
  • overflow 不是visible (overflow: hidden;)等

如何应用?

  • 清除浮动

5、float布局的问题 ,以及clearfix

如何实现圣杯布局和双飞翼布局?圣杯布局和双飞翼布局的目的?

  • 三栏布局,中间一栏最先加载和渲染(内容最重要)
  • 两侧内容固定,中间内容随着宽度自适应
  • 一般用于PC网页

圣杯布局和双飞翼布局的技术总结

  • 使用float布局;
  • 两侧使用margin负值,以便和中间内容横向重叠
  • 防止中间内容被两侧覆盖,一个用padding(圣杯布局)一个用margin(双飞翼布局)

手写clearfix

/* 手写 clearfix */
.clearfix:after {
    content: '';
    display: table;
    clear: both;
}
.clearfix {
    *zoom: 1; /*兼容IE低版本*/
}

6、flex画色子

常用属性(必须熟练掌握):flex语法教程

  • flex-direction属性:决定主轴的方向(即项目的排列方向)。
flex-direction: row | row-reverse | column | column-reverse;

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
  • flex-wrap属性:默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

flex-wrap: nowrap | wrap | wrap-reverse;

nowrap(默认):不换行。
wrap:换行,第一行在上方。
wrap-reverse:换行,第一行在下方。
  • justify-content属性:justify-content属性定义了项目在主轴上的对齐方式。

justify-content: flex-start | flex-end | center | space-between | space-around;

它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。
flex-start(默认值):左对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
  • align-items属性:align-items属性定义项目在交叉轴上如何对齐。

align-items: flex-start | flex-end | center | baseline | stretch;

它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
  • align-self属性:align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

align-self: auto | flex-start | flex-end | center | baseline | stretch;

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

flex实现一个三点的色子

<style type="text/css">
.box {
    width: 200px;
    height: 200px;
    border: 2px solid #ccc;
    border-radius: 10px;
    padding: 20px;

    display: flex;
    justify-content: space-between;
}
.item {
    display: block;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: #666;
}
.item:nth-child(2) {
    align-self: center;
}
.item:nth-child(3) {
    align-self: flex-end;
}
</style>
<body>
    <div class="box">
        <span class="item"></span>
        <span class="item"></span>
        <span class="item"></span>
    </div>
</body>

实现效果:

 

7、absolute和relative分别依据什么定位?

relative:依据自身定位,对外界元素不会有任何的影响。
absolute:依据最近一层的定位元素定位(向上找父元素)。

定位元素有:absolute、relative、fixed 或者 body。

<body>
    <p>absolute 和 relative 定位问题</p>
    <div class="relative">
        <div class="absolute">
            this is absolute
        </div>
    </div>
</body>
<style type="text/css">
    body {
        margin: 20px;
    }
    .relative {
        position: relative;
        width: 400px;
        height: 200px;
        border: 1px solid #ccc;
        top: 20px;
        left: 50px;
    }
    .absolute {
        position: absolute;
        width: 200px;
        height: 100px;
        border: 1px solid blue;
        top: 20px;
        left: 50px;
    }
</style>

8、居中对齐有哪些实现方式?

  • 水平居中

inline元素: text-align: center

block元素: margin: auto

absolute元素: left: 50% + margin-left负值

  • 垂直居中

inline元素: line-height的值等于height值

absolute元素: top: 50% + margin-top负值(必须要知道子元素的尺寸才行)

absolute元素: transform(-50%, -50%)(不知道尺寸的情况下)

absolute元素: top, left, bottom, right = 0 + margin: auto(不知道尺寸的情况下)

9、line-height的继承问题

以下代码,p标签的行高会是多少?

<style type="text/css">
    body {
        font-size: 20px;
        line-height: 200%;
    }
    p {
        background-color: #ccc;
        font-size: 16px;
    }
</style>
<body>
    <p>这是一行文字</p>
</body>

答案是40px。(body的font-size20px * 200% = 40px,然后p标签直接继承过来body的行高40px)

那么line-height如何继承呢?

  • 写具体数值,如30px,则继承该值(比较好理解)。

则行高继承30px,此处p标签行高为30px。

  • 写比例,如2 / 1.5 ,则继承该比例(比较好理解)

比如line-height:1.5; 则p标签行高为24px(font-size的16px * 1.5 = 24px)。

  • 写百分比,如200%, 则继承计算出来的值(考点)

body的font-size20px * 200% = 40px,然后p标签直接继承过来body的行高40px

10、rem是什么?

rem是一个长度单位

  • px,绝对长度单位,最常用
  • em,相对长度单位,相对于父元素,不常用
  • rem,相对长度单位,相对于根元素,常用于响应式布局

如下代码 ,div的font-size是多少呢?

<style type="text/css">
    html {
        font-size: 100px;
    }
    div {
        background-color: #ccc;
        margin-top: 10px;
        font-size: 0.16rem;
    }
</style>

答案是16px(0.16rem * body的font-size100px = 16px)。

补充:如果给div设置width: 1rem;的话,div的宽度是100px(1rem * body的font-size100px)。

11、如何实现响应式?

响应式布局的常用方案:media-query(根据不同的屏幕宽度设置根元素font-size)

<style type="text/css">
    @media only screen and (max-width: 374px) {
        /* iphone5 或者更小的尺寸,以 iphone5 的宽度(320px)比例设置 font-size */
        html {
            font-size: 86px;
        }
    }
    @media only screen and (min-width: 375px) and (max-width: 413px) {
        /* iphone6/7/8 和 iphone x */
        html {
            font-size: 100px;
        }
    }
    @media only screen and (min-width: 414px) {
        /* iphone6p 或者更大的尺寸,以 iphone6p 的宽度(414px)比例设置 font-size */
        html {
            font-size: 110px;
        }
    }
    body {
        font-size: 0.16rem;
    }
    #div1 {
        width: 1rem;
        background-color: #ccc;
    }
</style>
<body>
    <div id="div1">
        this is div
    </div>
</body>

从上面可以看出rem的弊端:“阶梯”性

接下来看一下网页视口尺寸

  • window.screen.height // 屏幕高度

  • window.innerHeight // 网页视口高度

  • document.body.clientHeight // body高度

什么是vw/vh?

  • vh:网页视口高度的1/100
  • vw:网页视口宽度的1/100
  • vmax:取两者最大值;vmin:取两者最小值
#container {
    width: 10vw;
    height: 10vh;
}
/*
    window.innerHeight === 100vh
    window.innerWidth === 100vw 
*/

OK先到这......

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值