CSS
2021-02-13 01:18
1.介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?
有两种,?IE 盒子模型、W3C 盒子模型;
盒模型:?内容(content)、填充(padding)、边界(margin)、?边框(border);
区? 别:?IE的content部分把?border 和?padding计算了进去;
在CSS3中引入了box-sizing属性, 它可以允许改变默认的CSS盒模型对元素宽高的计算方式.
共包括两个选项:
content-box:标准盒模型,CSS定义的宽高只包含content的宽高
border-box:IE盒模型,CSS定义的宽高包括了content,padding和border
2.CSS选择符有哪些?哪些属性可以继承?
id选择器(?# myid)
类选择器(.myclassname)
标签选择器(div, h1, p)
相邻选择器(h1 + p)
子选择器(ul > li)
后代选择器(li a)
通配符选择器(?* )
属性选择器(a[rel = "external"])
伪类选择器(a:hover, li:nth-child)
可继承的样式:?font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height ;
3.CSS优先级算法如何计算?
*?? 优先级就近原则,同权重情况下样式定义最近者为准;
*?? 载入样式以最后载入的定位为准;
优先级为:
!important >? id > class > tag
important 比?内联优先级高
?
4.CSS3新增伪类有那些?
举例:
p:first-of-type 选择属于其父元素的首个?
元素的每个?
元素。
p:last-of-type? 选择属于其父元素的最后?
元素的每个?
元素。
p:only-of-type? 选择属于其父元素唯一的?
元素的每个?
元素。
p:only-child??????? 选择属于其父元素的唯一子元素的每个?
元素。
p:nth-child(2)? 选择属于其父元素的第二个子元素的每个?
元素。
?
:after????????? 在元素之前添加内容,也可以用来做清除浮动。
:before???????? 在元素之后添加内容
:enabled???????
:disabled?????? 控制表单控件的禁用状态。
:checked??????? 单选框或复选框被选中。
5.如何居中div?
水平垂直居中问题,在css中margin: 0 auto;可以实现水平居中,但是在垂直居中方面一直没有特定的属性,直到css3的出现,有了弹性盒,可以通过设置弹性盒直接设置居中位置,做浏览器兼容的话可以通过使用一些hack处理 负margin方法,table-cell方法,位移方法
1)负margin方法:
CSS代码:
.container{??????
??????? width: 500px;??????
??????? height: 400px;??????
??????? border: 2px solid #379;??????
??????? position: relative;?
}?
.inner{??????
??????? width: 480px;??????
??????? height: 380px;??????
??????? background-color: #746;??????
??????? position: absolute;??????
??????? top: 50%;??????
??????? left: 50%;??????
??????? margin-top: -190px; /*height的一半*/??????
??????? margin-left: -240px; /*width的一半*/?
}
HTML代码:
????
????
这里,我们首先用top:50%和left:50%让inner的坐标原点(左上角)移动到container的中心,然后再利用负margin让它往左偏移自身宽的一半,再往上偏移自身高的一半,这样inner的中心点就跟container的中心点对齐了。
2)table-cell方法
?
CSS代码:
div{????
???? width: 300px;
???? height: 300px;
???? border: 3px solid #555;
???? display: table-cell;
???? vertical-align: middle;
???? text-align: center;
}
img{
???? vertical-align: middle;
}
HTML代码:
?????
通过将盒子转换为table元素,table元素本身是可以通过属性来控制位置,div上面的vertical-align: middle是控制垂直方向上的居中的,而text-align: center是控制水平方向的
3)弹性盒子法
CSS代码:
.container{
?????? width: 300px;
?????? height: 200px;
?????? border: 3px solid #546461;
?????? display: -webkit-flex;
?????? display: flex;
?????? -webkit-align-items: center;
?????? align-items: center;
?????? -webkit-justify-content: center;
?????? justify-content: center;?
}?
.inner{
?????? border: 3px solid #458761;
?????? padding: 20px;?
}
HTML代码:
????
???????? 我在容器中水平垂直居中
????
align-items控制垂直方向的居中,justify-content控制水平方向的居中。这是CSS3的新方法
4)位移方法
位移方法和margin定位方法一样,只不过吧margin改成了位移不需要计算一半是多少,直接 transform:translate(-50%,--50%)
6.display有哪些值?说明他们的作用。
block????????? ? ??象块类型元素一样显示。
none?????????? ? ??缺省值。象行内元素类型一样显示。
inline-block???象行内元素一样显示,但其内容象块类型元素一样显示。
list-item????? ? ?象块类型元素一样显示,并添加样式列表标记。
table????????? ? ? ?此元素会作为块级表格来显示
inherit??????? ? ??规定应该从父元素继承?display 属性的值
7.position的值relative和absolute定位原点是?
absolute? 生成绝对定位的元素,相对于值不为?static的第一个父元素进行定位。
fixed (老IE不支持)?生成绝对定位的元素,相对于浏览器窗口进行定位。
relative? 生成相对定位的元素,相对于其正常位置进行定位。
static??????? 默认值。没有定位,元素出现在正常的流中(忽略?top, bottom, left, right z-index 声明)。
inherit????? 规定从父元素继承?position 属性的值。
8.CSS3有哪些新特性?
新增各种CSS选择器? (: not(.input):所有?class 不是“input”的节点)
圆角?????????? (border-radius:8px)
多列布局??????? (multi-column layout)
阴影和反射??????? (ShadowReflect)
文字特效????? (text-shadow、)
文字渲染????? (Text-decoration)
线性渐变????? (gradient)
旋转????????? (transform)
增加了旋转,缩放,定位,倾斜,动画,多背景
transform:scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg)Animation:
9.用纯CSS创建一个三角形的原理是什么?
把上、左、右三条边隐藏掉(颜色设为?transparent)
#demo {
?? ??? ?width: 0;
?? ??? ?height: 0;
?? ??? ?border-width: 20px;
?? ??? ?border-style: solid;
?? ??? ?border-color: transparent transparent red transparent;
}
10.一个满屏?品?字布局?如何设计?
简单的方式:
上面的div宽100%,
下面的两个div分别宽50%,
然后用float或者inline使其不换行即可
11.li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。
12.为什么要初始化CSS样式。
- 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
- 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
最简单的初始化方法:?* {padding: 0; margin: 0;}
(强烈不建议)
淘宝的样式初始化代码:
?????
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
?????body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
?????h1, h2, h3, h4, h5, h6{ font-size:100%; }
?????address, cite, dfn, em, var { font-style:normal; }
?????code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
?????small{ font-size:12px; }
?????ul, ol { list-style:none; }
?????a { text-decoration:none; }
?????a:hover { text-decoration:underline; }
?????sup { vertical-align:text-top; }
?????sub{ vertical-align:text-bottom; }
?????legend { color:#000; }
?????fieldset, img { border:0; }
?????button, input, select, textarea { font-size:100%; }
?????table { border-collapse:collapse; border-spacing:0; }
13.absolute的containing block(容器块)计算方式跟正常流有什么不同?
无论属于哪种,都要先找到其祖先元素中最近的?position 值不为?static 的元素,然后再判断:
1)若此元素为?inline 元素,则?containing block 为能够包含这个元素生成的第一个和最后一个?inline box 的?padding box (除?margin, border 外的区域) 的最小矩形;
2)否则,则由这个祖先元素的?padding box 构成。
如果都找不到,则为?initial containing block。
补充:
1)static(默认的)/relative:简单说就是它的父元素的内容框(即去掉padding的部分)
2)absolute: 向上找最近的定位为absolute/relative的元素
3)fixed: 它的containing block一律为根元素(html/body),根元素也是initial containing block
14.对BFC规范(块级格式化上下文:block formatting context)的理解?
(W3C CSS 2.1 规范中的一个概念,它是一个独立容器,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)
?一个页面是由很多个?Box 组成的,元素的类型和?display 属性,决定了这个?Box 的类型。
不同类型的?Box,会参与不同的?Formatting Context(决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染,也就是说BFC内部的元素和外部的元素不会互相影响。
???? 创建规则:
????????? 根元素
??????????浮动元素(float不是none)
??????????绝对定位元素(position取值为absolute或fixed)
??????????display取值为inline-block,table-cell, table-caption,flex, inline-flex之一的元素
??????????overflow不是visible的元素
??????作用:
??????????可以包含浮动元素
??????????不被浮动元素覆盖
??????????阻止父子元素的margin折叠
15.css定义的权重
以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
????????????????? /权重为1/??????????? div{}
????????????????? /权重为10/????????? .class1{}
????????????????? /权重为100/?????? #id1{}
????????????????? /权重为100+1=101/???????? #id1 div{}
????????????????? /权重为10+1=11/????????????? .class1 div{}
????????????????? /权重为10+10+1=21/????? .class1 .class2 div{}
如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
16.浮动元素引起的问题和解决办法?
浮动元素引起的问题:
(1)父元素的高度无法被撑开,影响与父元素同级的元素
(2)与浮动元素同级的非浮动元素(内联元素)会跟随其后
(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
解决方法:
使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:
.clearfix:after{
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix{
display: inline-block;
} /* for IE/Mac */
??????????????????
清除浮动的几种方法:
1)额外标签法,
2)使用after伪类
parent:after{
?? ??? ?content:".";???????????? height:0;?visibility:hidden;????????????????????? display:block;???????? clear:both;
?}
3)浮动外部元素
4)设置overflow为hidden或者auto
17.移动端的布局用过媒体查询吗?
css的媒体查询允许通过@media标签为特定媒体的浏览器设定样式,其中包含众多筛选,功能强大。
18.使用?CSS 预处理器吗?喜欢那个?????????????
SASS (SASS、LESS没有本质区别,只因为团队前端都是用的SASS),可以使用sass和less对css做模块化开发,定制样式的组件
19.CSS优化、提高性能的方法有哪些?
将样式表放到页面顶部
不使用CSS表达式
不使用@import
不使用IE的Filter
20.元素竖向的百分比设定是相对于容器的高度吗?
是的,元素的百分比设置一般是根据父级元素的宽高决定的,如果父级元素没有宽高百分比是不起作用的
21.什么是响应式设计?响应式设计的基本原理是什么?
响应式设计就是为了实现根据不同设备环境自动响应及调整网页布局的一种设计方案
基本原理就是利用css的媒体查询功能更具不同屏幕的大小,向下兼容设备、移动优先,达到响应的效果
22.::before 和?:after中双冒号和单冒号?有什么区别?解释一下这2个伪元素的作用。
双冒号是在当前规范中引入的,用于区分伪类和伪元素。但是伪类兼容现存样式,浏览器需要同时支持旧的伪类,比如:first-line、:first-letter、:before、:after等。
对于CSS2之前已有的伪元素,比如:before和:after,单冒号和双冒号的写法::before和::after作用是一样的。
如果只需要兼容webkit、firefox、opera等浏览器,建议对于伪元素采用双冒号的写法,如果不得不兼容IE浏览器,还是用CSS2的单冒号写法比较安全。
23.display:inline-block 什么时候会显示间隙?
移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing
24.png、jpg、gif 这些图片格式解释一下,分别什么时候用?
GIF:?8位像素,256色???无损压缩???支持简单动画???支持boolean透明 ? 适合简单动画
JPEG:颜色限于256?? 有损压缩?? 可控制压缩质量?? 不支持透明?? 适合照片
PNG:有PNG8和truecolor PNG??? PNG8类似GIF颜色上限为256,文件小,支持alpha透明度,无动画、适合图标、背景、按钮
25.是CSS 预处理器?/ 后处理器?
- 预处理器例如:LESS、Sass、Stylus,用来预编译Sass或less,增强了css代码的复用性,还有层级、mixin、变量、循环、函数等,具有很方便的UI组件模块化开发能力,极大的提高工作效率。
?
- 后处理器例如:PostCSS,通常被视为在完成的样式表中根据CSS规范处理CSS,让其更有效;目前最常做的是给CSS属性添加浏览器私有前缀,实现跨浏览器兼容性的问题。
26.css sprite是什么,有什么优缺点。
概念:将多个小图片拼接到一个图片中。通过background-position和元素尺寸调节需要显示的背景图案
优点:
减少HTTP请求数,极大地提高页面加载速度
增加图片信息重复度,提高压缩比,减少图片大小
更换风格方便,只需在一张或几张图片上修改颜色或样式即可实现
缺点:
图片合并麻烦
维护麻烦,修改一个图片可能需要从新布局整个图片,样式
27.你用过栅格系统吗?
现在大部分UI框架都内置有删格化系统,常用bootstrap中的,bootstap它提供了一套响应式,移动优先的流式栅格系统(grid system),将屏幕分成12列来实现响应式的。它的实现原理非常简单,Media Query加上float布局,也研究过bootstrap的源码,在这个过程中也对预处理器有了更深的体会,删格系统这块在bootstrap中sass源码使用的循环生成,less使用的递归生成,我自己也单独封装过一个删格系统
28.渐进增强和优雅降级
渐进增强?:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级?:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
29.什么是?FOUC(无样式内容闪烁)?你如何来避免?FOUC?
FOUC - Flash Of Unstyled Content 文档样式闪烁
而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。?
解决方法简单的出奇,只要在
双飞翼布局
???
.main-wrapper {
??? float: left;
??? width: 100%;
}
.main {
??? height: 300px;
??? margin-left: 210px;
??? margin-right: 190px;
??? background-color: rgba(255, 0, 0, .5);
}
.sub {
??? float: left;
??? width: 200px;
??? height: 300px;
??? margin-left: -100%;
??? background-color: rgba(0, 255, 0, .5);
}
.extra {
??? float: left;
??? width: 180px;
??? height: 300px;
??? margin-left: -180px;
??? background-color: rgba(0, 0, 255, .5);
}
俩种布局方式都是把主列放在文档流最前面,使主列优先加载。
两种布局方式在实现上也有相同之处,都是让三列浮动,然后通过负外边距形成三列布局。
两种布局方式的不同之处在于如何处理中间主列的位置:圣杯布局是利用父容器的左、右内边距定位;双飞翼布局是把主列嵌套在div后利用主列的左、右外边距定位。
**其他的话还有
flex布局**
Flexbox又叫弹性盒模型。它可以简单使用一个元素居中(包括水平垂直居中),可以让扩大和收缩元素来填充容器的可利用空间,可以改变源码顺序独立布局,以及还有其他的一些功能。
Flex布局是我最喜欢的布局,合理使用它能够大大减少布局方面的工作, 例如以上列举的三列布局也可以使用flex轻松实现。此外在移动端使用flex也比较常见。
响应式布局
网页可以自动识别设备屏幕宽度,根据不同的宽度采用不同的CSS的样式,从而达到兼容各种设备的效果。
响应式布局使用媒体查询(CSS3 Media Queries), 根据不同屏幕分辨率采用不同CSS规则
流式布局
流式布常见的就是bootstrap了它提供了一套响应式,移动优先的流式栅格系统(grid system),将屏幕分成12列来实现响应式的。它的实现原理非常简单,Media Query加上float布局
32.说一下CSS的hack
由于不同厂商的流览器或某浏览器的不同版本(如IE6-IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack
CSS Hack的方法
条件注释法
上一篇:移入显示div用js实现
下一篇:本地项目上传gitee