(45)css面试题集锦二

31.怎么让Chrome支持小于12px 的文字?

  1、用图片:如果是内容固定不变情况下,使用将小于12px文字内容切出做图片,这样不影响兼容也不影响美观。

  2、使用12px及12px以上字体大小:为了兼容各大主流浏览器,建议设计美工图时候设置大于或等于12px的字体大小,如果是接单的这个时候就需要给客户讲解小于12px浏览器不兼容等事宜。

  3、继续使用小于12px字体大小样式设置:如果不考虑chrome可以不用考虑兼容,同时在设置小于12px对象设置-webkit-text-size-adjust:none,做到最大兼容考虑。

  4、使用12px以上字体:为了兼容、为了代码更简单 从新考虑权重下兼容性。

32.position:fixed;在android下无效怎么处理?

  fixed的元素是相对整个页面固定位置的,你在屏幕上滑动只是在移动这个所谓的viewport,

  原来的网页还好好的在那,fixed的内容也没有变过位置,

  所以说并不是iOS不支持fixed,只是fixed的元素不是相对手机屏幕固定的。

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

33.如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

 多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

34.display:inline-block 什么时候会显示间隙?(携程)

 移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing

35.有哪项方式可以对一个DOM设置它的CSS样式?

外部样式表,引入一个外部css文件

内部样式表,将css代码放在 <head> 标签内部

内联样式,将css样式直接定义在 HTML 元素内部

36.超链接访问过后hover样式就不出现的问题是什么?如何解决?

被点击访问过的超链接样式不再具有hover和active了,解决方法是改变CSS属性的排列顺序: L-V-H-A(link,visited,hover,active)

37.什么是Css Hack?ie6,7,8的hack分别是什么?

针对不同的浏览器写不同的CSS code的过程,就是CSS hack。

示例如下:

   #test{   

        background-color:yellow;    /*ie8*/

        +background-color:pink;        /*ie7*/

        _background-color:orange;       /*ie6*/    }  

更好的方式是使用IE条件判断语句:

<!–[if lte IE 6]>

内容

<![endif]–>

38.什么是外边距重叠?重叠的结果是什么?

外边距重叠就是margin-collapse。

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

折叠结果遵循下列计算规则:

两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。

两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。

两个外边距一正一负时,折叠结果是两者的相加的和。

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

rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度,

而rgba()只作用于元素的颜色或其背景色。(设置rgba透明的元素的子元素不会继承透明效果!)

40.如何垂直居中一个浮动元素?

    // 方法一:已知元素的高宽

#div1{

    background-color:#6699FF;

    width:200px;

    height:200px;

    position: absolute;        /*父元素需要相对定位*/

    top: 50%;

    left: 50%;

    margin-top:-100px ;   /*二分之一的height,width*/

    margin-left: -100px;

    }

//方法二:未知元素的高宽

  #div1{

    width: 200px;

    height: 200px;

    background-color: #6699FF;

    margin:auto;

    position: absolute;        /*父元素需要相对定位*/

    left: 0;

    top: 0;

    right: 0;

    bottom: 0;

    }

/*如何垂直居中一个<img>?(用更简便的方法。)*/

#container     /*<img>的容器设置如下*/

{

    display:table-cell;

    text-align:center;

    vertical-align:middle;

}

41.px和em的区别

px和em都是长度单位,区别是:

px值固定,容易计算。

em值不固定,是相对单位,其相对应父级元素的字体大小会调整

42.描述一个”reset”的CSS文件并如何使用它。知道normalize.css吗?你了解他们的不同之处?

Reset样式的目的是清除浏览器某些默认样式,方便css书写,例如:

*{margin:0;padding:0;list-style:none;}

Normalize的理念与reset不同,它并不清除浏览器默认样式,而是尽量将所有浏览器的默认样式统一。

43.Sass、LESS是什么?大家为什么要使用他们?

他们是CSS预处理器。他是CSS上的一种抽象层。他们是一种特殊的语法/语言编译成CSS。

例如Less是一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)。

为什么要使用它们?

结构清晰,便于扩展。

可以方便地屏蔽浏览器私有语法差异。这个不用多说,封装对浏览器语法差异的重复处理,减少无意义的机械劳动。

可以轻松实现多重继承。

完全兼容 CSS 代码,可以方便地应用到老项目中。LESS 只是在 CSS 语法上做了扩展,所以老的 CSS 代码也可以与 LESS 代码一同编译。

44.为什么要初始化样式?

用于浏览器默认css样式的存在并且不同浏览器对相同HTML标签的默认样式不同,若不初始化会造成不同浏览器之间的显示差异。

45.IE的双边距BUG:块级元素float后设置横向margin,ie6显示的margin比设置的较大。

解决:加入_display:inline

46.html常见兼容性问题?

1.双边距BUG float引起的  使用display

2.3像素问题 使用float引起的 使用dislpay:inline -3px  

3.超链接hover 点击后失效  使用正确的书写顺序 link visited hover active

4.IE z-index问题 给父级添加position:relative

5.Png 透明 使用js代码 改

6.Min-height 最小高度 !Important 解决’

7.select 在ie6下遮盖 使用iframe嵌套

8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

9.IE5-8不支持opacity,解决办法:

.opacity {

    opacity: 0.4

    filter: alpha(opacity=60); /* for IE5-7 */

    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/

}

10. IE6不支持PNG透明背景,解决办法: IE6下使用gif图片

47.对WEB标准以及W3C的理解与认识

标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性。

48.行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?

块级元素(block)特性:

总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示;

宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;

内联元素(inline)特性:

和相邻的内联元素在同一行;

宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变(也就是padding和margin的left和right是可以设置的),就是里面文字或图片的大小。

那么问题来了,浏览器还有默认的天生inline-block元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些?

答案:<input> 、<img> 、<button> 、<textarea> 、<label>

49.什么是外边距重叠?重叠的结果是什么?

答案:

外边距重叠就是margin-collapse。

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

折叠结果遵循下列计算规则:

两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。

两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。

两个外边距一正一负时,折叠结果是两者的相加的和。

50.知道css有个content属性吗?有什么作用?有什么应用?

知道。css的content属性专门应用在 before/after 伪元素上,用来插入生成内容。最常见的应用是利用伪类清除浮动。

//一种常见利用伪类清除浮动的代码

.clearfix:after {

    content:"."; //这里利用到了content属性

    display:block;

    height:0;

    visibility:hidden;

    clear:both; }

.clearfix {

    *zoom:1;

}

after伪元素通过 content 在元素的后面生成了内容为一个点的块级素,再利用clear:both清除浮动。

  那么问题继续还有,知道css计数器(序列数字字符自动递增)吗?如何通过css content属性实现css计数器?

答案:css计数器是通过设置counter-reset 、counter-increment 两个属性 、及 counter()/counters()一个方法配合after / before 伪类实现。

51.介绍下 BFC 及其应用

  1. 内部box会在垂直方向,一个接一个地放置。
  1. Box垂直方向的距离由margin决定,在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠。
  1. 在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)
  1. 形成了BFC的区域不会与float box重叠
  1. 计算BFC高度时,浮动元素也参与计算

生成BFC除了 @webproblem 童鞋所说的还有:行内块元素、网格布局、contain值为layout、content或 strict的元素等。

BFC作用:

  1. 利用特性4可实现左图右文之类的效果:

HTML

<img src='image.png'>

<p>我是超长的文字<p>

img {

    float:left

}

p {

    overflow:hidden

}

  1. 利用特性5可以解决浮动元素造成的父元素高度塌陷问题:

C#

<div class='parent'>

    <div class='float'>浮动元素</div>

</div>

.parent {

    overflow:hidden;

}

.float {

    float:left;

}

51.怎么让一个 div 水平垂直居中

  1. 定宽高 使用定位 + margin

SCSS

element.style {

    position: absolute;

    left: 50%;

    top: 50%;

    margin-left: -250px;

    margin-top: -250px;

    width: 500px;

    height: 500px;

    background: yellow;

    z-index: 1;

}

  1. 使用定位 + trnsfrom

SCSS

element.style {

    position: absolute;

    left: 50%;

    top: 50%;

    width: 500px;

    height: 500px;

    background: yellow;

    z-index: 1;

    transform: translate3d(-50%, -50%, 0)

52.分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用场景。

结构: display:none: 会让元素完全从渲染树中消失,渲染的时候不占据任何空间, 不能点击, visibility: hidden:不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,不能点击 opacity: 0: 不会让元素从渲染树消失,渲染元素继续占据空间,只是内容不可见,可以点击

继承: display: none和opacity: 0:是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示。 visibility: hidden:是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式。

性能: displaynone : 修改元素会造成文档回流,读屏器不会读取display: none元素内容,性能消耗较大 visibility:hidden: 修改元素只会造成本元素的重绘,性能消耗较少读屏器读取visibility: hidden元素内容 opacity: 0 : 修改元素会造成重绘,性能消耗较少

联系:它们都能让元素不可见

53.已知如下代码,如何修改才能让图片宽度为 300px ?注意下面代码不可修改。

JavaScript

<img src="1.jpg" style="width:480px!important;”>

SCSS

box-sizing: border-box;

padding: 0 90px;

1.css方法 max-width:300px;覆盖其样式; transform: scale(0.625);按比例缩放图片;

2.js方法 document.getElementsByTagName("img")[0].setAttribute("style","width:300px!important;")

54.如何解决移动端 Retina 屏 1px 像素问题

伪元素 + transform scaleY(.5) 2 border-image 3 background-image 4 box-shadow

55.介绍下 BFC、IFC、GFC 和 FFC

BFC(Block formatting contexts):块级格式上下文页面上的一个隔离的渲染区域,那么他是如何产生的呢?可以触发BFC的元素有float、position、overflow、display:table-cell/ inline-block/table-caption ;BFC有什么作用呢?比如说实现多栏布局’

IFC(Inline formatting contexts):内联格式上下文IFC的line box(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的padding/margin影响)IFC中的line box一般左右都贴紧整个IFC,但是会因为float元素而扰乱。float元素会位于IFC与与line box之间,使得line box宽度缩短。 同个ifc下的多个line box高度会不同 IFC中时不可能有块级元素的,当插入块级元素时(如p中插入div)会产生两个匿名块与div分隔开,即产生两个IFC,每个IFC对外表现为块级元素,与div垂直排列。 那么IFC一般有什么用呢? 水平居中:当一个块要在环境中水平居中时,设置其为inline-block则会在外层产生IFC,通过text-align则可以使其水平居中。 垂直居中:创建一个IFC,用其中一个元素撑开父元素的高度,然后设置其vertical-align:middle,其他行内元素则可以在此父元素下垂直居中。

GFC(GrideLayout formatting contexts):网格布局格式化上下文当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。那么GFC有什么用呢,和table又有什么区别呢?首先同样是一个二维的表格,但GridLayout会有更加丰富的属性来控制行列,控制对齐以及更为精细的渲染语义和控制。

FFC(Flex formatting contexts):自适应格式上下文display值为flex或者inline-flex的元素将会生成自适应容器(flex container),可惜这个牛逼的属性只有谷歌和火狐支持,不过在移动端也足够了,至少safari和chrome还是OK的,毕竟这俩在移动端才是王道。Flex Box 由伸缩容器和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex 可以得到一个伸缩容器。设置为 flex 的容器被渲染为一个块级元素,而设置为 inline-flex 的容器则渲染为一个行内元素。伸缩容器中的每一个子元素都是一个伸缩项目。伸缩项目可以是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说,Flexbox 定义了伸缩容器内伸缩项目该如何布局。

56.如何用 css 或 js 实现多行文本溢出省略效果,考虑兼容性

单行

SCSS

width: 300px;

overflow: hidden;

text-overflow: ellip

white-space: nowrap;

多行(文本一定会溢出的情况下)

SCSS

div{

  width: 300px;

  position: relative;

  line-height: 1.4em;

  height: 4.2em;

  overflow: hidden;

}

div::after{

  content: "...";

  position: absolute;

  right: 0;

  bottom: 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泽哥ins

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值