css面试题总结(持续更新。。。)

主流浏览器内核私有属性CSS前缀

  1. mozilla内核 (firefox,flock等) -moz-
  2. webkit内核(safari,chrome28以前版本等) -webkit-
  3. opera内核(opera浏览器) -o-
  4. trident内核(ie浏览器) -ms-
  5. blink内核(chrome28及以后版本) -webkit-

CSS选择器优先级

  1. 选择器的针对性越强,它的优先级别就越高。
  2. 选择器的权值:
    • * :0
    • 标签:1
    • 类:10
    • 伪类:10
    • id:100
    • important:1000
  3. 原则:选择器的权值加一起,大的优先,如果权值相同,后定义的优先。
  4. 优先级排序:
    !important > 行内样式 > ID选择器 > 类选择器 > 元素 > 通配符 > 继承 > 浏览器默认属性

BFC

BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。
点击这里了解更多

清除浮动的几种方式

清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度无法撑起的问题。
清除浮动的方法(最常用的4种):

  1. 额外标签法(不推荐)
    在最后一个浮动标签后,新加一个标签,给其设置样式clear: both;
    优点:通俗易懂,方便
    缺点:添加无意义标签,语义化差
  2. 父级添加overflow属性 (不推荐)
    父元素添加overflow:hidden;通过触发BFC方式,实现清除浮动。
    优点:代码简洁
    缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素
  3. 使用after伪元素清除浮动(推荐使用)
.clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
        content: "";
        display: block;
        height: 0;
        clear:both;
        visibility: hidden;
    }
    .clearfix{
        *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
    }

优点:符合闭合浮动思想,结构语义化正确
缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.

  1. 使用before和after双伪元素清除浮动 (推荐使用)
.clearfix:after,.clearfix:before{
        content: "";
        display: table;
    }
    .clearfix:after{
        clear: both;
    }
    .clearfix{
        *zoom: 1;
}

盒子模型

盒模型的组成,由里向外content,padding,border,margin.

  • 在IE盒子模型中,width、height表示content+padding+border这三个部分的宽度、高度;
  • 在标准的盒子模型中,width、height指content部分的宽度、高度。

使用box-sizing来设置盒子模型

 box-sizing: content-box;  /*是W3C盒子模型*/
 box-sizing: border-box;   /*是IE盒子模型*/

画一条0.5px的直线

利用transform的scale(缩放)属性来实现。

<div clsss="main"></div>
<style>
    .main{
        width: 400px;
        height: 1px;
        background-color: #000;
        transform: scale(1, 0.5);
    }
</style>

1rem、1em、1vh、1px各自代表的含义

  • rem
    rem是全部的长度都相对于根元素<html>元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。
  • em
    子元素字体大小的em是相对于父元素字体大小
    元素的width/height/padding/margin用em的话是相对于该元素的font-size
  • vh/vw
    全称是 Viewport Width 和 Viewport Height,视窗(可视区域)的宽度和高度,相当于 屏幕宽度和高度的 1%,不过,处理宽度的时候%单位更合适,处理高度的 话 vh 单位更好。
    .vmin:选取vw和vh中最小的那个。
    vmax:选取vw和vh中最大的那个
  • px
    px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。
    一般电脑的分辨率有{1920*1024}等不同的分辨率
    1920*1024 前者是屏幕宽度总共有1920个像素,后者则是高度为1024个像素

伪类伪元素

  • 伪类- pseudo classes
    css伪类用于向某些选择器添加特殊的效果,
    伪类的语法:
selector : pseudo-class {property: value}

常见的伪类::link, :visited, :hover, :focus, :active, :first-child, :lang
a:link /* 未访问的链接 */
a:visited /* 已访问的链接 */
a:hover /* 鼠标划过链接 */
a:active /* 已选中的链接 */
:first-child  --第一个子元素
:lang     --伪类使你有能力为不同的语言定义特殊的规则
更多

  • 伪元素 pseudo element
    CSS伪元素是用来添加一些选择器的特殊效果。
    伪元素的语法:
selector:pseudo-element {property:value;}

常见伪元素:
:before  --可以在元素的内容前面插入新内容。
:after  --在元素的内容之后插入新内容。
:first-line(只能用于块级元素) --向文本的首行设置特殊样式。
:first-letter(只能用于块级元素) --向文本的首字母设置特殊样式
更多

实现水平垂直居中

<div class="md-warp">
    <span class="md-main"></span>
</div>
<style>
    .md-warp{
        width: 400px;
        height: 300px;
        max-width: 100%;
        border: 1px solid #000;
    }
    .md-main{
        display: block;
        width: 100px;
        height: 100px;
        background: #f00;
    }
</style>

水平居中

  1. margin法
    需要满足三个条件:
    ①元素定宽
    ②元素为块级元素(或者行内元素设置display: block)
    ③元素的margin:left和margin-right都必须设置auto
.md-main{
    margin: 0 auto
}
  1. 定位法
    ①元素定宽
    ②元素绝对定位,并设置left:50%;
    ③元素左边距margin-left为宽度的一半的负值
.md-wrap{
    position:relative;
}
.md-main{
    position:absolute;
    left:50%;
    margin-left:-50px
}

元素不定宽时:

.md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    left: 50%;
    -webkit-transform: translate(-50%,0);
    -ms-transform: translate(-50%,0);
    -o-transform: translate(-50%,0);
    transform: translate(-50%,0);
}
  1. 文字水平居中
    直接使用text-align:center即可
.md-warp{
    text-align:center;
}

垂直居中

  1. 定位法
    和水平居中类似
    定高时:
 .md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    top: 50%;
    margin-top: -50px;
}

不定高时:

.md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    top: 50%;
    -webkit-transform: translate(0,-50%);
    -ms-transform: translate(0,-50%);
    -o-transform: translate(0,-50%);
    transform: translate(0,-50%);
}
  1. 单行文本垂直居中
    将其line-height设置成和父容器height的值一样

  2. 让元素在视窗中居中,使用vh实现

.md-warp{
    position: relative;
}
.md-main{
    position: absolute;
    margin: 50vh auto 0;
    transform: translateY(-50%);
}

flexbox的实现文本的水平垂直居中

 .md-warp{
    display:flex;
}
.md-main{
    display: flex;
    align-items: center;
    justify-content: center;
    margin: auto;
}

绝对定位垂直水平

.md-wrap{
    position: relative;
}
.md-main{
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    left:0;
    margin:auto;
}

外边距合并

外边距合并指的是,当两个垂直外边距相遇时,他们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中较大者。
只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

  1. 当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。
  2. 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。
  3. 假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并.
    了解更多

calc, support, media各自的含义及用法

  • calc
    calc() 函数用于动态计算长度值,支持 "+", "-", "*", "/" 运算,使用标准的数学运算优先级规则。
    例如:width: calc(100% - 10px);

  • supprot
    CSS中的@support主要是用于检测浏览器是否支持CSS的某个属性,如果支持某个属性,就会应用对应的样式。

    • 基本语法:
      @supprot(prop: value){/* 自己的样式 */}
      例如:@supports (display: flex) { div { display: flex; }}
      注释:如果浏览器支持display:flex属性的话,那么div的样式就是display:flex。

    • 逻辑操作符:“not” 的用法
      @supports not (display: flex) { div { float: right; }}
      注释:如果浏览器不支持display:flex属性的话,那么div的样式就是display:right

    • 逻辑操作符:“and”的用法
      @supports (display: flex) and ( box-shadow: 2px 2px 2px black ) { /*自己的样式*/ }
      注释:如果浏览器支持display:flex和box-shadow的属性,就执行里面自己的样式

    • 逻辑操作符:“or” 的用法
      @supports (display: -webkit-flex) or (display: -moz-flex) or(display: flex) { /*自己的样式 */ }
      注释:如果浏览器支持其中一个就可以执行里面自己的样式

    • 混用的例子
      “or”和“and”混用,在@supports中“or”和“and”混用时,必须使用括号()来区分其优先级。

@supports ((transition-property: color) or (animation-name: foo)) and (transform: rotate(10deg)) { 
/*自己的样式 */
}
@supports (transition-property: color) or ((animation-name: foo) and (transform: rotate(10deg))) {
/*自己的样式 */
}
@supports (display: grid) and (not (transition-property: color) or (animation-name: foo)){
/*自己的样式 */
}
  • media
    使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。
    @media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。
    当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。
    基本语法:@media mediatype and|not|only (media feature) { CSS-Code; }
    示例:
    设备屏幕宽度小于等于960px时应用css样式。
@media screen and (max-width: 500px) {
    .gridmenu {
        width:100%;
    }
}

混用:
表示浏览器宽度大于等于960px且小于等于1200px时使用样式。

@media screen and (min-width:960px) and (max-width:1200px){
    body{background:yellow;}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349