html实现自动图算术题,重整旗鼓,2019自结前端面试小册【CSS篇】

2 - 父元素中设置font-size:0, 在子元素上设置正确font-size

3 - 为子元素设置float:left

逢面必问的居中方案水平居中

行内元素:text-align:center

块级元素(宽度确定)

1. width确定,使用margin实现:margin:0 auto2. 绝对定位 + margin-left:负宽度/2 (前提父元素设置相对定位){width:100px;position:absolute;left:50%;margin-left:-50px}

块级元素(宽度未知)

1. display:table + margin左右auto2. display:inline-block + text-align:center3. 绝对定位 + transform{position: absolute;left: 50%;transform: translateX(-50%);}4. 万能flex布局(个人推荐){display:flex;justify-content:center;}

垂直居中

line-height 适合纯文字类内容居中

父元素设置 相对定位 ,子元素设置 绝对定位 ,标签通过 margin 实现自适应居中

万能flex

{display:flex;align-items:center;}

父元素设置 相对定位 ,子元素设置 绝对定位 ,通过 transform 实现居中

父元素设置 display:table + 子元素设置 vertical-align:middle

垂直水平居中

万能flex(个人推荐)

{display:flex;justify-content:center;align-items:center;}

position + transform (宽高未知)

父元素{position:relative;}子元素{position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);}

position + margin (宽高确定)

父元素{position: relative;}子元素{width: 100px;height: 100px;position: absolute;left: 50%;top: 50%;margin-left: -50px;margin-top: -50px;}

绝对定位设置各个方向为0,通过 margin:auto 实现垂直水平居中(宽高已知)

父元素{position: relative;}子元素{width: 100px;height: 100px;position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto;}

吃透定位 position

position属性共有5和属性值,分别如下

relative 相对定位,相对于自身位置进行定位

很多人不明白相对于自身位置是什么意思,其实可以这样理解:将本身当前位置固定住,以此位置进行定位

absolute 绝对定位,相对于 position 不为 static 的第一个父级元素进行定位

fixed 固定定位。 相对于浏览器窗口进行定位

inherit 继承父级元素 position 属性值

static 默认值,即没有定位,仍为文档流

对于position,需要注意的是absolute 到底是相对于哪一个父级进行定位

css3新增了一个新的定位属性 -sticky,作用类似于relative和fixed. 元素在跨越特定阈值前为相对定位,跨越之后为固定定位。

浮动布局是什么?优劣势在哪?

浮动布局- 当元素设置了浮动后,可以向左向右移动,直到它的外边缘碰到包含它的框或者另外一个浮动元素的边框为止。

浮动元素脱离了正常文档流,可以想象成浮动元素浮在了正常文档流上方,文档流不再有这个元素存在

优点

在图文混排的场景下十分适用,可以实现文字环绕图片的效果,当元素浮动后,它有着块级元素的特点(可设置宽高),但它与inline-block存在差别

float可以在横向排序上设置方向,而inline-block不可inline-block会出现存在空白间隙情况

缺点

float致使元素脱离文档流,若父元素高度自适应,则会引起父元素高度塌陷

清除浮动(常见面试题)

通过伪类选择器清除浮动(关键方式)

父级元素添加 overflow 属性,或者设置高度(原理是触发父元素BFC)

//auto 也可以

添加额外标签

▲ 注意:设置元素浮动后,该元素的display值会变为block

当position跟display、overflow、float这些特性相互叠加后会出现什么情况?

- display:规定元素应该生成的框的类型(子元素的排序方式)- position:规定元素的定位类型- float:定义元素在哪个方向浮动其中,position:absolute / fixed 优先级最高当position设置为absolute或者fixed时,float失效,display需要调整float / absolute定位的元素,只能是块元素或表单(block / table)

布局精英 - flex 布局

该布局提供了一种更高效的方法对容器中的项目进行布局、对齐和分配空间,他没有方向上的限制,可以由开发人员自由操作

使用场景:移动端开发,安卓,iOS

容器属性(6)

flex-direction 决定主轴方向(容器排列方向)

flex-direction: row | row-reverse | column | column-reverse;

flex-wrap 如果一条轴线排不下,定义换行规则

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

flex-flow flex-direction和flex-wrap的简写形式

flex-flow: || ;

justify-content 定义容器在主轴上的对齐方式

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

align-items 定义容器在交叉轴上的对齐方式

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

align-content 定义多根轴线的对齐方式,如果容器只有一根轴线,该属性不起作用

align-content: flex-start | flex-end | center | space-between | space-around |

项目属性(6)

order 定义项目的排列顺序,数值越小,排列越靠前,默认为0

flex-grow 定义项目的放大比例,默认为0(即如果存在剩余空间,也不放大)

flex-shrink 定义项目的缩小比例,默认为1(即如果空间不足,该项目将缩小)

flex-basis 定义了在分配多余空间之前,项目占据的主轴空间。 默认值为auto(项目本来大小)

flex 是flex-grow、flex-shrink和flex-basis的简写,默认值为 0 1 auto

flex: none | [ ? || ]该属性有两个快捷值: auto(1 1 auto) 和 none(0 0 auto)

建议优先使用这个属性,而不是单独写三个分离的属性

因为浏览器会推算相关值

align-self 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性,默认值为 auto (表示继承父元素 align-items 属性,如果没有父元素,等同于 stretch )

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

经典布局案例 - 三栏布局

三栏布局- 左右容器固定,中间容器自适应

三栏布局在实际中十分常用,也是css面试常题,实现方法有如下三种:

left
main
right
第一种方式:flex.container{display: flex;}.left{flex-basis:200px;background: green;}.main{flex: 1;background: red;}.right{flex-basis:200px;background: green;}

第二种方式:position + margin.left,.right{position: absolute;top: 0;background: red;}.left{left: 0;width: 200px;}.right{right: 0;width: 200px;}.main{margin: 0 200px ;background: green;}

第三种方式 float + margin.left{float:left;width:200px;background:red;}.main{margin:0 200px;background: green;}.right{float:right;width:200px;background:red;}

Css3有哪些新特性?

各种 css 选择器

圆角 border-radius

多列布局

文本效果

线性渐变

2D转换

过渡 transition

动画 animation

flex 布局

旋转 transform

媒体查询

浏览器如何解析Css选择器?

css选择器的解析是从右向左解析,为了避免对所有元素进行解析

overflow属性解剖- scroll:必定出现滚动条

- auto:子元素内容大于父元素时出现滚动条

- visible:溢出的内容出现在父元素之外

- hidden:溢出时隐藏

全屏滚动的原理?需要哪些css属性?

原理类似于轮播图,整体元素一直排列下去,假设有5个需要展示的全屏页面,那么高度将会是500%,但我们只能展示100%,剩下的内容可以通过transform进行Y轴定位,也可以通过margin-top实现

涉及css属性overflow:hidden|transition:all 1000ms ease

响应式设计是什么?响应式设计的原理是什么?如何兼容低版本IE?

响应式设计是指网站能够兼容多个终端,而不是为每一个终端特地去开发新的一个版本

原理通过媒体查询测试不同的设备屏幕尺寸做处理

兼容低版本IE,页面头部必须有meta声明的viewport

布局题:自适应填补

有一个高度固定的div,里面有两个div,一个高度100px,另一个填补剩下的高度

方案一外层div使用position:relative;,要求高度自适用的div使用position:absolute; top:100px; bottom:0; left:0

方案二使用flex布局方式,高度自适应的div使用flex:1

RGBA 与 opacity 在透明效果上有什么区别?

opacity 作用于元素,以及元素内的所有内容的透明度

rgba 只作用于元素的颜色或者背景色(设置rgba透明的元素的子元素不会继承透明效果)px | em 有什么区别?

px 和 em 都是长度单位区别在于px的值是固定的,指定多少就是多少,而em的值是不固定的,并且em会继承父级元素的字体大小▲ 浏览器的默认字体高都是16px。所以未经调整的浏览器都符合:1em=16px。那么12px = 0.75em 10px = 0.625em

如何实现元素在z轴上移动?

translate3d(x,y,z)

translateZ(z)

Css有哪些引入方式?通过link和@import引入有什么区别?

Css引入方式有4种内联、内嵌、外链、导入

外链link除了可以加载css之外,还可以定义rss、rel等属性,没有兼容性问题,支持使用java改变样式

@import是css提供的,只能用于加载css,不支持通过java修改样式

▲ 页面被加载的时候,link会被同时加载,而@import则需等到页面加载完后再加载,可能出现无样式网页

图形题:纯Css创建一个三角形

原理创建一个没有高度和宽度的div,设置其中一条边框的作为三角形,其他边框的颜色应为透明

{width:0px;height:0px;border-top:10px solid transparent;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #000;}

display:none 与 visibility:hidden 的区别是什么?

display:none 隐藏对应的元素,在文档布局中不再分配空间(导致重排)

visibility:hidden 隐藏对应的元素,在文档布局中保留原来的空间(导致重绘)

浏览器是如何解析Css选择器?

Css选择的解析是从右向左解析,能够避免对所有元素进行解析

如何水平并垂直居中一张背景图?

设置属性 background-position:center;

style 标签写在 body 后和 body 前有什么区别?

页面加载自上而下,当然是需要先加载样式

写在body标签后,由于浏览器以逐行方式对HTML文档进行解析,当解析写在尾部的样式表会导致浏览器停止之前的渲染,等待加载且解析样式表后才重新进行渲染,这样可能导致 留白现象(所以最好将style标签写在body前)

常见的Css兼容性问题有哪些?

- 不同浏览器的标签默认的padding/margin不同,通过初始化css样式可以解决*{margin:0;padding:0px;}- IE6双边距BUG- 设置较小高度标签(一般小于10px),在IE6,IE7中高度超出自己设置的高度通过设置overflow:hidden;或者设置行高line-height小于你设置的高度- IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute获取自定义属性- Chrome中文界面下默认会将小于12px的文本强制为12px通过加入css属性 -webkit-text-size-adjust:none;可以解决,或者使用transform中的缩放属性- 超链接访问过后hover样式就不出现,因为被点击访问过的超链接样式不再具有hover和active了解决方法是改变css属性的排列属性:L-V-H-Aa:link{} → a:visited{} → a:hover{} → a:active{}- IE下,event对象有x,y属性,但是没有pageX,pageY属性,但没有x,y属性解决方式:通过条件- png24位的图片在IE6浏览器上出现背景,解决方案是做出PNG8

Css优化,如何提高性能

避免过渡约束

避免后代选择符

避免链式选择符

使用紧凑的语法

避免不必要的命名空间

避免不必要的重复样式

使用具有语义的名字

避免使用 !important

尽可能地精简规则

修复解析错误

避免使用多种类型选择符

移除空的css规则

正确使用display属性

inline后不应该使用width、height、margin、padding以及float;inline-block后不应该使用float;block后不应该使用vertical-align

不滥用浮动

不滥用web字体

不声明过多font-size

少使用id选择器

不给h1-h6定义过多样式

不重复定义h1-h6

值为0时不需要任何单位

标准化各种浏览器前缀

遵守盒模型规则

声明:文章著作权归作者所有,如有侵权,请联系小编删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值