CSS

媒介查询相关的自适应布局

媒体查询就是针对不同媒体类型不同CSS属性时的样式表现

清除浮动

浮动带来的问题:

①父元素的高度无法被撑开

②与浮动元素同级的非浮动元素会跟随其后

③若非第一个元素浮动,则该元素前的元素也会浮动,否则会影响页面显示的结构

清除方式:

①父级div定义height

②最后一个浮动元素添加空div标签并添加样式clear:both

③包含浮动元素的父标签添加样式overflow为hidden或auto

④伪元素清除浮动

:after(作用于浮动元素的父级元素

.clearfix:after{

content:"";/*设置内容为空*/

height:0;/*高度为0*/

line-height:0;/*行高为0*/

display:block;/*将文本转为块级元素*/

visibility:hidden;/*将元素隐藏*/

clear:both;/*清除浮动*/

}

css选择器有哪些?优先级?哪些属性可以继承?

!important>内联 > ID选择器 > 类选择器 > 标签选择器

关于css属性选择器常用的有:

id选择器(#box),选择id为box的元素

类选择器(.one),选择类名为one的所有元素

标签选择器(div),选择标签为div的所有元素

后代选择器(#box div),选择id为box元素内部所有的div元素

子选择器(.one>one_1),选择父元素为.one的所有.one_1的元素

相邻同胞选择器(.one+.two),选择紧接在.one之后的所有.two元素

群组选择器(div,p),选择div、p的所有元素

伪类选择器:

:link:选择未被访问的链接

:visited:选取已被访问的链接

:active:选择活动链接

:hover:鼠标指针浮动在上面的元素

:focus:选择具有焦点的

:first-child:父元素的首个子元素

伪元素选择器:

:first-letter:用于选取指定选择器的首字母

:first-line:选取指定选择器的首行

:before:选择器在被选元素的内容前面插入内容

:after:选择器在被选元素的内容后面插入内容

属性选择器:

[attribute] 选择带有attribute属性的元素

[attribute=value] 选择所有使用attribute=value的元素

[attribute~=value] 选择attribute属性包含value的元素

[attribute|=value]:选择attribute属性以value开头的元素

CSS3新增选择器:

伪类选择器:

:first-of-type表示一组同级元素中其类型的第一个元素

:last-of-type表示一组同级元素中其类型的最后一个元素

:only-of-type表示没有同类型兄弟元素的元素

:only-child表示没有任何兄弟的元素

:nth-child(n)根据元素在一组同级中的位置匹配元素

:nth-last-of-type(n)匹配给定类型的元素,基于它们在一组兄弟元素中的位置,从末尾开始计数

:last-child表示一组兄弟元素中的最后一个元素

:root设置HTML文档:empty指定空的元素

:enabled选择可用元素:disabled选择被禁用元素:checked选择选中的元素

:not(selector)选择与 不匹配的所有元素

属性选择器:

[attribute*=value]:选择attribute属性值包含value的所有元素

[attribute^=value]:选择attribute属性开头为value的所有元素

[attribute$=value]:选择attribute属性结尾为value的所有元素

无继承的属性

display

文本属性:vertical-align、text-decoration

盒子模型的属性:宽度、高度、内外边距、边框等

背景属性:背景图片、颜色、位置等

定位属性:浮动、清除浮动、定位position等

生成内容属性:content、counter-reset、counter-increment

轮廓样式属性:outline-style、outline-width、outline-color、outline

页面样式属性:size、page-break-before、page-break-after

css中,有哪些方式可以隐藏页面元素?区别?

display:none

特点:元素不可见,不占据空间,无法响应点击事件。会导致重排和重绘。

visibility:hidden

特点:元素不可见,占据页面空间,无法响应点击事件。不会触发重排,但是会触发重绘

opacity:0

特点:改变元素透明度,元素不可见,占据页面空间,可以响应点击事件。不会触发重排,但是会触发重绘

设置height、width模型属性为0

将元素的margin,border,padding,height和width等影响元素盒模型的属性设置成0,如果元素内有子元素或内容,还应该设置其overflow:hidden来隐藏其子元素。

特点:元素不可见,不占据页面空间,无法响应点击事件

position:absolute

特点:元素不可见,不影响页面布局

clip-path

通过裁剪的形式

特点:元素不可见,占据页面空间,无法响应点击事件

谈谈你对BFC的理解?

BFC(Block Formatting Context),即块级格式化上下文,它是页面中的一块渲染区域,并且有一套属于自己的渲染规则:

内部的盒子会在垂直方向上一个接一个的放置

对于同一个BFC的俩个相邻的盒子的margin会发生重叠,与方向无关。

每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此

BFC的区域不会与float的元素区域重叠

计算BFC的高度时,浮动子元素也参与计算

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

BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素

触发条件:

根元素,即HTML元素

浮动元素:float值为left、right

overflow值不为 visible,为 auto、scroll、hidden

display的值为inline-block、inltable-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-grid

position的值为absolute或fixed

应用场景

①防止margin塌陷

②清除内部浮动(避免父元素失去高度)

③自适应多栏布局

元素水平垂直居中的方法有哪些?如果元素不定宽高呢

①利用定位+margin:auto

父级设置为相对定位,子级绝对定位 ,并且四个定位属性的值都设置了0,那么这时候如果子级没有设置宽高,则会被拉开到和父级一样宽高

②利用定位+margin:负值

父级设置为相对定位,子级绝对定位。top、left:50%;

margin-left:-(width/2)

margin-top:-(height/2)

③利用定位+transform

父级设置为相对定位,子级绝对定位。top、left:50%

transform:translate(-50%,-50%)

④table布局

设置父元素为display:table-cell,子元素设置 display: inline-block。利用vertical-align:middletext-align:center可以让所有的行内块级元素水平垂直居中

⑤flex布局

display: flex时,表示该容器内部的元素将按照flex进行布局

align-items: center表示这些元素将相对于本容器水平居中

justify-content: center也是同样的道理垂直居中

⑥grid布局

display: grid

align-items: center表示这些元素将相对于本容器水平居中

justify-content: center也是同样的道理垂直居中

内联元素居中布局

水平居中

行内元素可设置:text-align: center

flex布局设置父元素:display: flex; justify-content: center

垂直居中

单行文本父元素确认高度:height === line-height

多行文本父元素确认高度:disaply: table-cell; vertical-align: middle

块级元素居中布局

水平居中

定宽: margin: 0 auto

绝对定位+left:50%+margin:负自身一半

垂直居中

position: absolute设置left、top、margin-left、margin-top(定高)

display: table-cell

transform: translate(x, y)

flex(不定高,不定宽)

grid(不定高,不定宽),兼容性相对比较差

flexbox(弹性盒布局模型),以及适用场景?

Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局。

采用Flex布局的元素,称为flex容器container

它的所有子元素自动成为容器成员,称为flex项目item

我们能够通过flex简单粗暴的实现元素水平垂直方向的居中,以及在两栏三栏自适应布局中通过flex完成。包括现在在移动端、小程序这边的开发,都建议使用flex进行布局

如何实现两栏布局,右侧自适应?三栏布局中间自适应呢?

双栏布局:

使用 float 左浮左边栏

右边模块使用 margin-left 撑出内容块做内容展示

为父级元素添加BFC(overflow:hidden),防止下方元素飞到上方内容

②flex弹性布局

flex容器的一个默认属性值:align-items: stretch;

这个属性导致了列等高的效果。 为了让两个盒子高度自动,需要设置: align-items: flex-start

三栏布局

两边使用 float,中间使用 margin

两边使用 absolute,中间使用 margin

两边使用 float 和负 margin

display: table 实现

flex实现

grid网格布局


CSS3新增了哪些新特性?

选择器:

新样式:

边框:

border-radius:创建圆角边框

box-shadow:为元素添加阴影

border-image:使用图片来绘制边框

背景:background-clip、background-origin、background-size和background-break

文字:word-wrap、text-overflow、text-shadow、text-decoration

颜色:rgba、hsla

rgba分为两部分,rgb为颜色值,a为透明度

hala分为四部分,h为色相,s为饱和度,l为亮度,a为透明度

transition 过渡

transition属性可以被指定为一个或多个CSS属性的过渡效果,多个属性之间用逗号进行分隔,必须规定两项内容:

过度效果

持续时间

transition-property:width;

transition-duration:1s;

transition-timing-function:linear;

transition-delay:2s;

transform 转换

transform属性允许你旋转,缩放,倾斜或平移给定元素

transform-origin:转换元素的位置(围绕那个点进行转换),默认值为(x,y,z):(50%,50%,0)

使用方式:

transform: translate(120px, 50%):位移

transform: scale(2, 0.5):缩放

transform: rotate(0.5turn):旋转

transform: skew(30deg, 20deg):倾斜

animation 动画

animation-name:动画名称

animation-duration:动画持续时间

animation-timing-function:动画时间函数

animation-delay:动画延迟时间

animation-iteration-count:动画执行次数,可以设置为一个整数,也可以设置为infinite,意思是无限循环

animation-direction:动画执行方向

animation-paly-state:动画播放状态

animation-fill-mode:动画填充模式

渐变

颜色渐变是指在两个颜色之间平稳的过渡,css3渐变包括

linear-gradient:线性渐变

background-image: linear-gradient(direction, color-stop1, color-stop2, ...);

radial-gradient:径向渐变

linear-gradient(0deg, red, green);

怎么理解回流跟重绘?什么场景下会触发?

回流:布局引擎会根据各种样式计算每个盒子在页面上的大小与位置

重绘:当计算好盒模型的位置、大小及其他属性后,浏览器根据每个盒子特性进行

回流触发时机

回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流,如下面情况:

添加或删除可见的DOM元素

元素的位置发生变化

元素的尺寸发生变化(包括外边距、内边框、边框大小、高度和宽度等)

内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代

页面一开始渲染的时候(这避免不了)

浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的)

重绘触发时机

触发回流一定会触发重绘

可以把页面理解为一个黑板,黑板上有一朵画好的小花。现在我们要把这朵从左边移到了右边,那我们要先确定好右边的具体位置,画好形状(回流),再画上它原有的颜色(重绘)

除此之外还有一些其他引起重绘行为:

颜色的修改

文本方向的修改

阴影的修改

如何减少

我们了解了如何触发回流和重绘的场景,下面给出避免回流的经验:

如果想设定元素的样式,通过改变元素的 class 类名 (尽可能在 DOM 树的最里层)

避免设置多项内联样式

应用元素的动画,使用 position 属性的 fixed 值或 absolute 值(如前文示例所提)

避免使用 table 布局,table 中每个元素的大小以及内容的改动,都会导致整个 table 的重新计算

对于那些复杂的动画,对其设置 position: fixed/absolute,尽可能地使元素脱离文档流,从而减少对其他元素的影响

使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘

避免使用 CSS 的 JavaScript 表达式

什么是响应式设计?响应式设计的基本原理是什么?如何做?

响应式网站设计(Responsive Web design)是一种网络页面设计布局,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整

响应式网站常见特点:

同时适配PC + 平板 + 手机等

标签导航在接近手持终端设备时改变为经典的抽屉式导航

网站的布局会根据视口来调整模块的大小和位置

实现方式

响应式设计的基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理,为了处理移动端,页面头部必须有meta声明viewport

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

属性对应如下:

width=device-width: 是自适应手机屏幕的尺寸宽度

maximum-scale:是缩放比例的最大值

inital-scale:是缩放的初始化

user-scalable:是用户的可以缩放的操作

如果要做优化,CSS提高性能的方法有哪些?

内联首屏关键CSS

异步加载CSS

资源压缩

合理使用选择器

减少使用昂贵的属性

不要使用@import

单行文本溢出省略

text-overflow:

clip:当对象内文本溢出部分裁切掉

ellipsis:当对象内文本溢出时显示省略标记(...)

white-space:nowrap设置文字在一行显示,不能换行

overflow:hidden文字长度超出限定宽度,则隐藏超出的内容

多行文本溢出省略

多行文本溢出的时候,我们可以分为两种情况:

基于高度截断

伪元素 + 定位

核心的css代码结构如下:

position: relative:为伪元素绝对定位

overflow: hidden:文本溢出限定的宽度就隐藏内容)

position: absolute:给省略号绝对定位

line-height: 20px:结合元素高度,高度固定的情况下,设定行高, 控制显示行数

height: 40px:设定当前元素高度

::after {} :设置省略号样式

基于行数截断

纯css实现也非常简单,核心的css代码如下:

-webkit-line-clamp: 2:用来限制在一个块元素显示的文本的行数,为了实现该效果,它需要组合其他的WebKit属性)

display: -webkit-box:和1结合使用,将对象作为弹性伸缩盒子模型显示

-webkit-box-orient: vertical:和1结合使用 ,设置或检索伸缩盒对象的子元素的排列方式

overflow: hidden:文本溢出限定的宽度就隐藏内容

text-overflow: ellipsis:多行文本的情况下,用省略号“…”隐藏溢出范围的文本

如何使用css完成视差滚动效果?

background-attachment

作用是设置背景图像是否固定或者随着页面的其余部分滚动

值分别有如下:

scroll:默认值,背景图像会随着页面其余部分的滚动而移动

fixed:当页面的其余部分滚动时,背景图像不会移动

inherit:继承父元素background-attachment属性的值

transform:translate3D

容器设置上 transform-style: preserve-3d 和 perspective: xpx,那么处于这个容器的子元素就将位于3D空间中,

子元素设置不同的 transform: translateZ(),这个时候,不同元素在 3D Z轴方向距离屏幕(我们的眼睛)的距离也就不一样

滚动滚动条,由于子元素设置了不同的 transform: translateZ(),那么他们滚动的上下距离 translateY 相对屏幕(我们的眼睛),也是不一样的,这就达到了滚动视差的效果

CSS如何画一个三角形?原理是什么?

.border{width:0;

height:0;

border-style:solid;

border-width:0 50px 50px;

border-color:transparent transparent #d9534f;

}

z-index 是干什么用的?默认值是什么?与 z-index: 0 的区别

> z-index 属性设置元素的堆叠顺序,且只在属性position: relative/absolute/fixed 的时候才生效。

> `z-index: auto` 是默认值,与`z-index: 0`是有区别的:

> `z-index: 0` 会创建一个新的堆叠上下文,而 `z-index: auto` 不会创建新的堆叠上下文

总结:

1. 当Z-index的值设置为auto时,不建立新的堆叠上下文,当前堆叠上下文中生成的div的堆叠级别与其父项的框相同。

2. 当Z-index的值设置为一个整数时,该整数是当前堆叠上下文中生成的div的堆栈级别。该框还建立了其堆栈级别的本地堆叠上下文。这意味着后代的z-index不与此元素之外的元素的z-index进行比较。

让Chrome支持小于12px 的文字方式有哪些?区别?

常见的解决方案有:

zoom(会触发重排)

zoom:50%,表示缩小到原来的一半

zoom:0.5,表示缩小到原来的一半

-webkit-transform:scale()

注意的是,使用scale属性只对可以定义宽高的元素生效

-webkit-text-size-adjust:none

percentage:字体显示的大小;

auto:默认,字体大小会根据设备/浏览器来自动调整;

none:字体大小不会自动调整

说说对Css预编语言的理解?有哪些区别?

SASS

LESS

Stylus

嵌套:

三者的嵌套语法都是一致的,甚至连引用父级选择器的标记 & 也相同

区别只是 Sass 和 Stylus 可以用没有大括号的方式书写

变量:

less声明的变量必须以@开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号:分隔开

sass声明的变量跟less十分的相似,只是变量名前面使用$开头

stylus声明的变量没有任何的限定,可以使用$开头,结尾的分号;可有可无,但变量与变量值之间需要使用=

作用域:

sass中不存在全局变量

less与stylus的作用域跟javascript十分的相似,首先会查找局部定义的变量,如果没有找到,会像冒泡一样,一级一级往下查找,直到根为止

混入:

在less中,混合的用法是指将定义好的ClassA中引入另一个已经定义的Class,也能使用够传递参数,参数变量为@声明

Sass声明mixins时需要使用@mixinn,后面紧跟mixin的名,也可以设置参数,参数名为变量$声明的形式

stylus中的混合和前两款Css预处理器语言的混合略有不同,他可以不使用任何符号,就是直接声明Mixins名,然后在定义参数和默认值之间用等号(=)来连接

代码模块化

模块化就是将Css代码分成一个个模块

scss、less、stylus三者的使用方法都如下所示

@import'./common';

@import'./github-markdown';

@import'./mixin';

@import'./variables';

margin/padding 设置百分比是相对谁的

总结:margin/padding设置百分比都是相对于父盒子的宽度(width属性)来计算量的

如果需要手动写动画,你认为最小时间间隔是多久,为什么?

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

画一条0.5px的线

①meta viewport

initial-scale=0.5

②为1px的线添加CSS样式。

transform:scaleY(0.5)

transition 和 animation 的区别:

伪类与伪元素的区别:

面试官:说说对Css预编语言的理解?有哪些区别? | web前端面试 - 面试官系列 (vue3js.cn)

css/css3实现未知宽高元素的垂直居中和水平居中 - 陌上人如玉,公子士无双 - 博客园 (cnblogs.com)

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

推荐阅读更多精彩内容

  • css:层叠样式展示,用于制作静态页面 css样式分为三大类:行间样式、内部样式、外部样式 行间样式:写在body...
    她与星河皆遗憾阅读 119评论 0 0
  • CSS 定位问题 主要就是经典的绝对定位,相对定位问题。 10个文档学布局:通过十个例子讲解布局,主要涉及相对布局...
    强哥科技兴阅读 359评论 0 1
  • 三栏式布局 涉及浮动和清除浮动,主要讲解“圣杯”和“双飞翼”两种解决方法。这两种方法实现的都是三栏布局,两边的盒子...
    紫电倚青霜阅读 2,373评论 0 6
  • 在介绍居中方式之前,简单介绍一下行内元素和块级元素。 行内元素 和其他元素都在同一行 高,行高及外边距和内边距部分...
    SunshineBrother阅读 351评论 0 0
  • 目录 标准盒模型和怪异盒模型 link标签和import标签的区别 flex布局 BFC 垂直居中的方法 块元素和...
    Grandperhaps阅读 417评论 0 4