一 CSS面试部分

404 阅读9分钟

### HTML5和 CSS3的新特性:

新增的语义化标签

<header>:头部标签 <nav>:导航标签 <article>:内容标签 
<section>:定义文档某个区域 <aside>:侧边栏标签 <footer>:尾部标签

一 手机端如何做适配的 lib-flexible 

移动端:采用淘宝无限适配方案 flexible.js + 布局单位采用rem

在页面变化时,检测页面宽度,除以10份,动态的赋值给font-size 属性;
rem是相对于<html>标签的font-size,所以就可以适配所有的移动端设备了
(http://caibaojian.com/t/flexible-js "View all posts in flexible.js"),

使用 lib-flexible
动态设置 REM 基准值(html 标签的字体大小) 然后在 `main.js` 中加载执行该模块

rem和em vh vm区别:

rem和em都是相对单位,主要参考的标签不同:
rem是相对于<html>标签的font-size,浏览器默认字号是font-size:16px
em:是相对于父级的字号,和百分比%类似,%也是相对于父级的,只不过是%相对于父级宽度的

vh 和 vm 分别是相对于浏览器可视区域的高和宽

一 (补充)响应式 采用媒体查询

使用媒体查询(响应式)
@mediamax-width500){ // 在屏幕宽度小于500px才会生效
   body{
        background:green;
    }
}

@media (min-width:300px) and (max-width:500px){ // 在屏幕宽度300px500px才会生效
    body{
        background:green;
    }
}

一 (补充) 行内元素:

inputimg、select、spanstrongab
emi、s、mark、small、big
dfnabbrciteq
br、wbr、sup、sub、insdel
ruby、rt、rp
codekbdsamp、tt、var
u、nobr、label

一 (补充)块级元素:

divfooterheadersection、option、ph1...h6.form ul liol dldddt.form;h、hr、pre、htmlbody
blockquoteaddressfieldsetlegend optgroup、


空元素:br、hr...

任何标签设置了position:absolute或float:left/right后会自动转换为行级块标签。

元素之间的转换问题:
display: inline;  	把某元素转换成了行内元素      ===>不独占一行的,并且不能设置宽高
display: inline-block; 	把某元素转换成了行内块元素    ===>不独占一行的,可以设置宽高
display: block;		把某元素转换成了块元素	   ===>独占一行,并且可以设置宽高

对于行内元素和块级元素,其特点如下:

1)行内元素

设置宽高无效;

可以设置水平方向的 marginpadding 属性,不能设置垂直方向的

paddingmargin;

不会自动换行;


2)块级元素

可以设置宽高;

设置 marginpadding 都有效;

可以自动换行;

多个块状,默认排列从上到下

二 如何水平居中?

方式一: display: flex;
   <div class='container'>
        <div class='main'>main</div>
   </div>

.container{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 300px;
    height: 300px;
    border:5px solid #ccc;
}
.main{
   background: red;
}

方式二:position定位

<div class='container'>
<div class='main'>main</div>
</div>

.container{
    position: relative;
    width: 300px;
    height: 300px;
    border:5px solid #ccc;
}
.main{
    position: absolute;
    left:50%;
    top:50%;
    background: red;
    transform: translate(-50%,-50%);
}

image.png

image.png

image.png

image.png

image.png

二 (补充) 多行文字垂直居中

<ul>
    <li class="item"><span class="text">多行文字多行文字</span></li>
</ul>

 父元素
    .item{
        display: table;
    }
子元素
    .item .text{
        display: table-cell;
        vertical-align: middle;
    }

三 如何写一个三角形?上下左右这些都要会

下三角形:
    width: 0;
    height: 0;
    border: 480px solid;
    border-color: transparent transparent blue transparent; // transparent 透明

三 (左中右局部 补充) 双飞翼布局

    3div都要设置 floatleft
    中间在最前面
    左边:margin-left:负100%
    右边:margin-left:负值为:自身的宽度

四 介绍一下flex布局都有哪些属性?

以下6个属性设置在父容器上:
    flex-direction属性决定主轴的方向(即项目的排列方向)row | row-reverse | column | column-reverse;
    `flex-wrap`属性定义,如果一条轴线排不下,如何换行。nowrap | wrap | wrap-reverse;
    `justify-content`属性定义了项目在主轴上的对齐方式 flex-start | flex-end | center | space-between | space-around;
    `align-items`属性定义项目在交叉轴上如何对齐。align-items: flex-start | flex-end | center | baseline | stretch;
    `flex-flow`属性是`flex-direction`属性和`flex-wrap`属性的简写形式,默认值为`row nowrap`。<flex-direction> || <flex-wrap>;
    
    `align-content`属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
     align-content: flex-start | flex-end | center | space-between | space-around | stretch;

以下6个属性设置在子容器上
     order flex-grow flex-shrink flex-basis flex  align-self  
    `order`属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。    
    `flex-grow`属性定义项目的放大比例,默认为`0`,即如果存在剩余空间,也不放大。
    `flex-shrink`属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
    `flex-basis`属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为`auto`,即项目的本来大小。
    `flex`属性是`flex-grow`, `flex-shrink` 和 `flex-basis`的简写,默认值为`0 1 auto`。后两个属性可选。
    `align-self`属性允许单个项目有与其他项目不一样的对齐方式,可覆盖`align-items`属性。默认值为`auto`,表示继承父元素的`align-items`属性,如果没有父元素,则等同于`stretch`。
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
    该属性可能取6个值,除了auto,其他都与align-items属性完全一致。
    

四(补充)flex布局 最后一行左对齐:设置伪元素的方式

 list:after{
     content:'';
     width:200px;
     height:0px; // 或者直接不设置height
 }


五 (补充)absolute 和 relative定位

 relative 不脱离文档流 、absolute脱离文档流
 absolute 定位:是相对于最近的一层 父级定位元素定位
 relative 定位:相对于自身定位
 

六 你平时都是怎么写css的?用过css预处理器吗?

答:一般咱们说我平时写css用less,可以定义变量,嵌套,混入等功能,
sass语法和less类似都是css预处理器,方便开发人员写快速高效写css

七 c3写一个无限旋转动画

1.body写一个<div class="turn"></div>
2.css设置 animation
  turn : 定义的动画名称
  1s : 动画时间
  linear : 动画以何种运行轨迹完成一个周期
  infinite :规定动画应该无限次播放
 
    <style>
    .turn {
        width: 100px;
        height: 100px;
        background: aqua;
        animation: turn 1s linear infinite;
        margin: 100px auto;
    }

 
    @keyframes turn {
        0% {
            -webkit-transform: rotate(0deg);
        }

        25% {
            -webkit-transform: rotate(90deg);
        }

        50% {
            -webkit-transform: rotate(180deg);
        }

        75% {
            -webkit-transform: rotate(270deg);
        }

        100% {
            -webkit-transform: rotate(360deg);
        }
    }

八 合模型 标准合子模型 和 ie合子模型

CSS的盒子模型有哪些:标准盒子模型、IE盒子模型
CSS的盒子模型区别:
        标准盒子模型:margincontent borderpadding、
        IE盒子模型 :margincontentborder +  padding)
通过CSS如何转换盒子模型:
        box-sizing: content-box;	/*标准盒子模型*/
        box-sizing: border-box;	  /*IE盒子模型*/

九 null 和 underfinder区别:

具体区别:
null是一个表示"无"的对象(空对象指针),转为数值时为0undefined是一个表示"无"的原始值,转为数值时为NaNnull == undefined 返回true 都表示 一个无效的值,所以他们是相等的

image.png

十 == 和 === 的区别

== :  比较的是值
	
string == number || boolean || number ....都会隐式转换
通过valueOf转换(valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。)

===: 除了比较值,还比较类型

十一 选择器的优先级:

优先级比较:!important > 内联样式 > id > class > 标签 > 通配

十二 选择器有哪些?

CSS选择符:
    通配(*)
    id选择器(#)
    类选择器(.)
        **类选择器、属性选择器和伪类选择器** 具有相同的权重
    标签选择器(divph1...)
    相邻选择器(+)
    后代选择器(ul li)
    子元素选择器( > )
    属性选择器(a[href])

CSS属性哪些可以继承:
   文字系列:font-sizecolorline-heighttext-align...
  不可继承属性:borderpaddingmargin...

十三 清除浮动方式

一: 利用clear属性清除浮动
1. 清除浮动的方式:**添加新的元素对其应用 clear:both**

//对添加的元素使用 clear:both
.clear{clear:both;}
<div class="box">
    <div class="red" style="float:left;">1</div>
    <div class="sienna" style="float:left;">2</div>
    <div class="blue" style="float:left;">3</div>
    //添加一个新元素
    <div class="clear"></div>
</div>

2. 清除浮动 使用伪元素
.clearfix:after{
    content:"";  /*设置内容为空*/
    height:0;  /*高度为0*/
    line-height:0;  /*行高为0*/
    display:block;  /*将文本转为块级元素*/
    visibility:hidden;  /*将元素隐藏*/
    clear:both;  /*清除浮动*/
}
.clearfix{
    zoom:1;  /*为了兼容IE*/
}

二: 利用bfc原理包容浮动

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

1. 了解BFC : 块级格式化上下文。
2. BFC的原则:如果一个元素具有BFC,那么内部元素再怎么弄,都不会影响到外面的元素。
3. 在父元素上何触发BFC:
                float的值非none
                overflow的值非visible
                display的值为:inline-block、table-cell...
                position的值为:absoute、fixed
                
                
1.**父级div定义overflow:hidden** 浏览器会自动检查浮动区域的高度
.over-flow{ overflow:hidden; zoom: 1;}/*zoom1; 是在处理兼容性问题*/
<div class="box over-flow">
    <div class="red">1</div>
    <div class="sienna">2</div>
    <div class="blue">3</div>
</div>

2、父级div定义overflow:auto** 浏览器会自动检查浮动区域的高度
.over-flow{ overflow:auto; zoom: 1;}/*zoom1; 是在处理兼容性问题*/
<div class="box over-flow">
    <div class="red">1</div>
    <div class="sienna">2</div>
    <div class="blue">3</div>
</div>

十三 (补充)float 和 absolute 区别:

    float 只是脱离了文档流的dom空间但是还占据着文字空间
    absolut 是绝对脱离,不会对其他的元素产生任何影响
    
    比如有2div合子,分别设置背景色和内容,在第一个合子上设置 float属性,可以看到,背景色脱离文档流,但是文字还是占据着空间的,没有往上顶。
    
    设置 absolut 属性,就是文字和颜色都完全脱离文档流
    

十四 line-height继承的坑

当父元素的 line-height值为:具体的值10px 或者 1.5 ,子元素都是直接继承的
(坑在这):子元素继承父元素line-htight 为 百分比的时候,是先用百分比乘以父元素的font-size 得出的结果才是 子元素的line-henght的值

十五 margin合并

AB两个div分别都有 margin-top 10pxmargin-bottom 50px 
AB 之间的距离是 50px 而不是60px

十六 margin 负值

margin-top:负值 元素向上拖拽
margin-left:负值 元素向左拖拽
margin-bottom:负值 元素本身不动 下边元素上移
margin-right:负值 元素本身不动 右边元素左移