前端面试题目整理——css篇

10 篇文章 0 订阅

1.css选择器
一般而言,选择器越特殊,它的优先级越高。也就是选择器指向的越准确,它的优先级就越高。
!important >行内样式> ID > 类 > 标签 | 伪类 | 属性选择 > 伪元素 > 继承 > 通配符。

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

css选择器之组合选择器

选择器含义作用
E,F多元素选择器同时匹配元素E或元素F
E F后代选择器匹配E元素所有的后代(不只是子元素、子元素向下递归)元素F
E>F子元素选择器匹配E元素的所有直接子元素
E+F直接相邻选择器匹配E元素之后的相邻的同级元素F
E~F普通相邻选择器(弟弟选择器)匹配E元素之后的同级元素F(无论直接相邻与否)

css选择器之伪类选择器

伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档数外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素。

选择器示例示例说明
:focusinput:focus选择元素输入后具有焦点
:checkedinput:checked选择所有选中的表单元素
:read-onlyinput:read-only选择只读属性的元素属性
:read-writeinput:read-write选择没有只读属性的元素属性
:disabledinput:checked选择所有禁用的表单元素
:enabledinput:enabled选择所有启用的表单元素
:in-rangeinput:in-range选择元素指定范围内的值
:out-of-rangeinput:out-of-range选择指定范围以外的值的元素属性
:validinput:valid选择所有有效值的属性
:invalidinput:invalid选择所有无效的元素
:requiredinput:required选择有"required"属性指定的元素属性
:optionalinput:optional选择没有"required"的元素属性
:emptyp:empty选择所有没有子元素的p元素
:first-of-typep:first-of-type选择每个父元素是p元素的第一个p子元素
:last-of-typep:first-of-type选择每个p元素是其父元素的最后一个p元素
:first-childp:first-child匹配第一个p元素
:last-childp:last-child匹配最后一个p元素
:not:not(p)选择所有p以外的元素
:only-childp:only-child选择所有仅有一个子元素的p元素
:nth-childp:nth-child(2)选择所有p元素的第二个子元素
:nth-last-childp:nth-last-child(2)选择所有p元素倒数的第二个子元素
:only-of-typep:only-of-type选择所有仅有一个子元素为p的元素
:nth-of-typep:nth-of-type(2)选择所有p元素第二个为p的子元素
:nth-last-of-typep:nth-last-of-type(2)选择所有p元素倒数的第二个为p的子元素
:linka:link选择所有未访问链接
:visiteda:visited选择所有访问过的链接
:hovera:hover把鼠标放在链接上的状态
:activea:active选择正在活动链接
:target#news:target选择当前活动#news元素(点击URL包含锚的名字)
:rootroot选择文档的根元素
:langq:lang(no){quotes: “~” “~”}为不同的语言匹配特殊的规则

css选择器之伪元素选择器

选择器作用说明
::before/:before在被选元素前插入内容。需要使用 content 属性来指定要插入的内容。被插入的内容实际上不在文档树中。
::after/:after在选被元素后插入内容其用法和特性与:before相似。
::first-letter/:first-letter匹配元素中文本的首字母。被修饰的首字母不在文档树中。
::first-line/:first-line匹配元素中第一行的文本。这个伪元素只能用在块元素中,不能用在内联元素中。
::selection::selection匹配用户被用户选中或者处于高亮状态的部分在火狐浏览器使用时需要添加-moz前缀。该伪元素只支持双冒号的形式。
::placeholder::placeholder匹配占位符的文本,只有元素设置了placeholder属性时,该伪元素才能生效。该伪元素不是CSS的标准,它的实现可能在将来会有所改变,所以要决定使用时必须谨慎。在一些浏览器中(IE10和Firefox18及其以下版本)会使用单冒号的形式。
::backdrop(处于试验阶段)::backdrop用于改变全屏模式下的背景颜色,全屏模式的默认颜色为黑色该伪元素只支持双冒号的形式

css选择器之属性选择器

选择器示例示例说明
[attribute]a[target]用于选择具有指定属性的元素
[attribute=“value”]a[target="_blank"]用于选择具有指定属性和值的元素
[attribute~=“value”][title~=“flower”]于选择包含指定单词的属性值的元素
[attribute|=“value”][class|=“top”]用于选取带有以指定值(此处top-)开头的属性值的元素
[attribute^=“value”][class^=“top”]用于选择属性值以指定值(此处top)开始的元素
[attribute$=“value”][class$=“test”]用于选择属性值以指定值结束的元素
[attribute*=“value”][class*=“te”]用于选择属性值包含指定值的元素
  1. 清除浮动
    父元素没有设置高度,子元素浮动会导致父元素坍塌,清除浮动可以解决。
  • 父级 div 定义 height
    原理:父级 div 手动定义 height,就解决了父级 div 无法自动获取到高度的问题。
    优点:简单、代码少、容易掌握
    缺点:只适合高度固定的布局

  • 在浮动元素后添加一个空标签<div class="clear"></div>,并且在CSS中设置.clear{clear:both;},即可清理浮动。
    这里写图片描述
    原理:添加一个空标签,利用CSS提高的clear:both清除浮动,让父元素可以自动获取到高度
    优点:简单,代码少,兼容所有浏览器
    缺点:增加页面的标签,造成结构的混乱
    建议:不推荐使用,此方法已经过时

  • 父级元素定义:overflow:auto; zoom:1

  • :after伪元素===>给浮动元素的容器添加一个clearfix的class,然后给这个class添加一个:after伪元素实现元素之后添加一个看不见的块元素(Block element)清理浮动。
    这里写图片描述
    原理:通过CSS伪元素在容器的内部元素之后添加一个看不见的空格“\20”或点“.” ,并且设置clear属性清除浮动。IE8 以上和非 IE 浏览器才支持:after,原理和方法 2 有点类似,zoom(IE 转有属性)可解决ie6,ie7 浮动问题 ,推荐使用,建议定义公共类,以减少 CSS 代码
    优点:浏览器支持较好
    缺点:clearfix这个class需要添加zoom: 1(触发haslayout,当一个元素的hasLayout属性值为true时,它负责对自己和可能的子孙元素进行尺寸计算和定位),才能支持IE6和IE7浏览器
    建议:推荐使用,设置公共类,减少CSS代码

  1. 盒子模型
    标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin
    低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin

  2. css中可以继承的样式
    可继承的属性:font-size, font-family, color
    不可继承的样式:border, padding, margin, width, height

  3. 优先级
    优先级(就近原则):!important > [ id > class = 伪类 > tag ]
    !important比内联样式优先级还高,继承得到的样式优先

  4. display有哪些值?说明他们的作用?
    inline(默认)–内联
    none–隐藏
    block–块显示
    table–表格显示
    list-item–项目列表
    inline-block

  5. 当margin-top、padding-top的值是百分比时,分别是如何计算的?
    对元素的margin设置百分数,是相对于父元素width计算的,不管是margin-top/margin-bottom/margin-left还是margin-right。(padding同理)

  6. 固定左右侧宽度,中间自适应布局

  7. css3,html5,es6的新特性
    css3新特性
    html5的新特性
    es6的新特性
    let/const、class、扩展运算符、rest参数、模板字符串、Set、变量的解构赋值、Symbol(一种新的原始数据类型,表示独一无二的ID,它通过Symbol函数生成)

  8. display:none与visibility:hidden的区别?
    display:none 不显示对应的元素,在文档布局中不再分配空间(重排+重绘)
    visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间(重绘)

  9. 重排和重绘
    重绘是一个元素外观的改变所触发的浏览器行为,例如改变 visibility、outline、背景色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。重绘不会带来重新布局,并不一定伴随重排。
    重排是更明显的一种改变,可以理解为渲染树需要重新计算。下面是常见的触发重排的操作:
    1)DOM 元素的几何属性变化
    2)DOM 树的结构变化
    3)获取某些属性
    4)此外,改变元素的一些样式,调整浏览器窗口大小等等也都将触发重排。
    注:重排对性能有很大的影响。

  10. CSS优化、提高性能的方法有哪些?

避免过度约束
避免后代选择符
避免链式选择符
使用紧凑的语法
避免不必要的命名空间
避免不必要的重复
最好使用表示语义的名字。一个好的类名应该是描述他是什么而不是像什么
避免!important,可以选择其他选择器
尽可能的精简规则,你可以合并不同类里的重复规则

  1. 什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?
    响应式网站设计(Responsive Web design)是一个网站能够兼容多个终端,而不是为每一个终端做一个特定的版本。

实现方法:

  • 媒体查询media,基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理。pc端和移动端使用同一个项目,使用媒体查询实现响应式。缺点是要写很多样式,十分复杂。

  • rem,pc端使用固定布局,移动端使用rem等比缩放布局。可用media做微调。

  • flex。

  • vh/vw,视口的百分比。百分比布局。

  • 响应式网页设计之viewport
    Viewport 是用户网页的可视区域。
    Viewport 随设备而异,在移动手机上比在电脑屏幕上要小。
    在平板电脑和移动手机之前,网页只为电脑屏幕设计,网页的静态设计和固定大小是很常见的。
    然后,当我们开始使用平板电脑和手机上网的时候,固定大小的网页太大了,不适合观看。为了解决这个问题,这些设备上的浏览器缩小了整个网页以适应屏幕。
    这并不完美!但可快速修复。

    <meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1,user-scalable=no"/>
    

    <meta> 窗口元素为浏览器提供了如何控制页面尺寸和缩放的说明。
    width=device-width 部分将页面的宽度设置为跟随设备的屏幕宽度(其将根据设备变化而变化)。
    initial-scale=1.0 部分设置浏览器首次加载页面时的初始缩放级别。

  • 网格视图
    前端使用过bootstrap框架的朋友们应该很清除介个东西,所谓网格视图,是把网页分割为n列,通常是 12 列,宽度为100%,平分下来每列为8.33%,在浏览器窗口大小调整时会自动伸缩。

  • 媒体查询
    网格视图可以很好的做到同缩同放,但是,当屏幕变得很小的时候,网页缩得很小,一个小屏幕一行挤入那么多内容,对用户显得很不友好。
    我们想有重点地显示,怎么做呢?
    使用媒体查询可以做到: 假设一个网页分为左右两面,如图(左侧导航右侧内容)
    在这里插入图片描述

手机屏幕下,全部显示会显得很拥挤,如果左侧导航不显示就好了,像这样
在这里插入图片描述
是不是好多了~简单实现如下:

// 屏幕大小小于768px时候
.left {
	display: none;
}
@media only screen and (min-width: 768px) {
	.left {
		display: block;
	}
}
  • 网格和媒体查询结合

    /* For mobile phones: */
    [class*="col-"] {
        width: 100%;
    }
    @media only screen and (min-width: 768px) {
        /* For desktop: */
        .col-1 {width: 8.33%;}
        .col-2 {width: 16.66%;}
        .col-3 {width: 25%;}
        .col-4 {width: 33.33%;}
        .col-5 {width: 41.66%;}
        .col-6 {width: 50%;}
        .col-7 {width: 58.33%;}
        .col-8 {width: 66.66%;}
        .col-9 {width: 75%;}
        .col-10 {width: 83.33%;}
        .col-11 {width: 91.66%;}
        .col-12 {width: 100%;}
    }
    
    // 结合CSS媒体查询,可以创建适应不同设备的方向(横屏landscape、竖屏portrait等)的布局
    // 如果是竖屏背景将是浅蓝色:
    @media only screen and (orientation: landscape) {
        body {
            background-color: lightblue;
        }
    }
    
  1. 使用flex布局搭配百分比很容易实现自适应的多行多列
    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

  2. 移动端web页面适配方案(经典)(将viewport的scale设为设备像素比dpr的倒数+rem)
    viewport=>缩放到合适的大小
    rem=>根据不同大小的屏幕修改内容大小(大屏东西大,小屏东西小)
    https://www.jianshu.com/p/e5ca5b78e03e
    https://segmentfault.com/a/1190000008767416
    根据设备像素比设置viewport的缩放大小(实现高清),再配合rem适配(大屏大字,小屏小字)。

  3. rem实现移动端自适应
    http://www.alloyteam.com/2016/03/mobile-web-adaptation-tool-rem/
    http://caibaojian.com/flexible-js.html

  4. 1px边框问题

  5. BFC(格式化上下文)

    只要元素满足下面任一条件即可触发 BFC 特性:
    html根元素
    浮动元素:float 除 none 以外的值
    绝对定位元素:position (absolute、fixed)
    display 为 inline-block、table-cells、flex
    overflow 除了 visible 以外的值 (hidden、auto、scroll)

  6. 子元素margin-top为何会影响父元素?
    margin合并

  7. postion几个属性的作用?
    position 的常见四个属性值: relative,absolute,fixed,static。一般都要配合"left"、“top”、"right"以及 “bottom” 属性使用。
    1)Static静态定位:默认位置,设置为 static 的元素,它始终会处于页面流给予的位置(static 元素会忽略任何 top、bottom、left 或 right 声明)。一般不常用。
    2)Relative相对定位:位置被设置为 relative 的元素,可将其移至相对于其正常位置的地方,意思就是如果设置了 relative 值,那么,它偏移的 top,right,bottom,left 的值都以它原来的位置为基准偏移,而不管其他元素会怎么样。注意 relative 移动后的元素在原来的位置仍占据空间
    3)Absolute绝对定位:位置设置为 absolute 的元素,可定位于相对于包含它的元素的指定坐标。意思就是如果它的父容器设置了 position 属性,并且 position 的属性值为 absolute 或者relative,那么就会依据父容器进行偏移。如果其父容器没有设置 position 属性,那么偏移是以 body 为依据注意设置 absolute 属性的元素在标准流中不占位置
    4)Fixed固定定位:位置被设置为 fixed 的元素,可定位于相对于浏览器窗口的指定坐标。不论窗口滚动与否,元素都会留在那个位置。它始终是以 body 为依据的。 注意设置 fixed 属性的元素在标准流中不占位置

  8. z-index属性

z-index,又称为对象的层叠顺序,它用一个整数来定义堆叠的层次,整数值越大,则被层叠在越上面,当然这是指同级元素间的堆叠,如果两个对象的此属 性具有同样的值,那么将依据它们在HTML文档中流的顺序层叠,写在后面的将会覆盖前面的。需要注意的是,父子关系是无法用z-index来设定上下关系 的,一定是子级在上父级在下。
Note:使用static 定位或无position定位的元素z-index属性是无效的。

  1. 居中布局的实现
    以下为简单总结:
  • 行内元素水平居中 text-align: center;
  • 块状元素水平居中margin: 0 auto;
  • 多个块状元素水平居中
    display: inline-block; 和text-align: center;配合使用
    flex布局
  • 已知高度宽度元素水平垂直居中
    绝对定位与负margin方法
    display: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto;
  • 未知宽度高度元素水平垂直居中
    将子元素改为inline或inline-block,然后设置父元素display: table-cell; text-align: center; vertical-align: middle;
    translate -50%方法
    flex布局
  1. px,em,rem 的区别?
    1)px 像素(Pixel)。绝对单位。像素 px 是相对于显示器屏幕分辨率而言的,是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果 px 要换算成物理长度,需要指定精度 DPI。
    2)em 是相对长度单位,相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。它会继承父级元素的字体大小,因此并不是一个固定的值。
    3)rem 是 CSS3 新增的一个相对单位(root em,根 em),使用 rem 为元素设定字体大小时,仍然是相对大小,但相对的只是 HTML 根元素。
    4)区别:IE 无法调整那些使用 px 作为单位的字体大小,而 em 和 rem 可以缩放,rem 相对的只是 HTML 根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了 IE8 及更早版本外,所有浏览器均已支持 rem。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值