css笔记和面试题汇总

css常见用法

1.内容超出添加省略号

关键语句:

  1. overflow : hidden; 溢出则隐藏
  2. text-overflow: ellipsis; 用省略号“…”隐藏超出范围的文本
  3. -webkit-line-clamp: ; 用来限制在一个块元素显示的文本的行数
  • 单行省略
<p style="
    width: 60px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
">
    xxxxxxxxxxxxxxxxxxxx
</p>

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5awPY7T-1594864116956)(img/单行overflow.png)]

  • 多行省略
<p style="
  overflow : hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
">
    static:对象遵循常规流。top,right,bottom,left等属性不会被应用。 relative: 对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left属性进行偏移时不影响常规流中的任何元素。 absolute:对象脱离常规流,使用top,right,bottom,left等属性进行绝对定位,盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。fixed:对象脱离常规流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。center:对象脱离常规流,使用top,right,bottom,left等属性指定盒子的位置或尺寸大小。盒子在其包含容器垂直水平居中。盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠。(CSS3)page:盒子的位置计算参照absolute。盒子在分页媒体或者区域块内,盒子的包含块始终是初始包含块,否则取决于每个absolute模式。(CSS3) sticky: 对象在常态时遵循常规流。它就像是 relative 和 fixed 的合体,当在屏幕中时按常规流排版,当卷动到屏幕外时则表现如fixed。该属性的表现是现实中你见到的吸附效果。(CSS3)* CSS3新增属性可能存在描述错误及变更,仅供参考,持续更新
</p>

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDm978kt-1594864116960)(img/多行overflow.png)]

2. 隐藏页面元素的方法

  • opacity:设置元素的透明度。当设置opacity为0时,元素隐藏,但是元素本身仍然占据页面空间,并且也可响应交互

    点击劫持就是利用了opacity属性,使用iframe将目标网站嵌入页面,并在这个页面上面进行恶意UI的布置,并设置这些恶意UI的opacity为0

  • visibility:设置元素是否可见,取值为hidden/visible/inherit。当设置为hidden时,元素隐藏,元素占据页面空间但是不响应用户的交互

  • display=none:当设置了display为none时,元素被隐藏,元素不被渲染,即元素不再占据页面空间也不响应用户交互,也不能被读屏软件读取,但是仍在dom树中

  • position:通过设置绝对定位并将元素移出可视区域(用的少)

补充:display:none会导致重排,而opacity和visibility则只会导致重绘

3. 为什么要初始化css样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,初始化css样式可以避免由于浏览器造成的页面差异

4. css中的伪类

链接伪类选择器
  • a:link:未访问的链接
  • a:visited:已访问的链接
  • a:hover:鼠标移动到链接上
  • a:active:选定链接时
后代伪类选择器
  • li:first-child:第一个li元素
  • li:last-child:最后一个li元素
  • li:nth-child(n):第n个li元素,下标从1开始
表单控件选择器(CSS3)
  • :enabled :disabled:表单控件的禁用状态
  • :checked:单选框或复选框被选中

5. 清除浮动的办法

当页面中出现了浮动元素,那么这个元素是脱离了文档流,可能会造成

  1. 父元素的高度塌陷
  2. 后方元素忽略浮动元素产生内容围绕

所以我们需要进行浮动清除

在浮动元素下使用一个空div(黑魔法)

在浮动元素末尾添加一个带有 clear: both 属性的空 div 来闭合元素,从而达到清除浮动的效果

<div style="float: left"></div>
<div style="clear: both">clear</div>
<div></div>

通过设置一个样式为clear:both的空盒子,就可以进行浮动清除

使用BFC特性

将父元素设置为BFC,那么可以解决高度坍塌问题

overflow: 除了visible之外的属性
display: flow-root, inline-block

补充:BFC特性

  1. BFC盒子会包裹其中的所有元素,盒子不会因为内部元素浮动而坍塌
  2. BFC会停止去围绕浮动元素
  3. BFC会阻止外边距叠加问题
使用:after伪类

给浮动元素的父元素清除浮动,避免高度塌陷

.father:after{
	content: "";
	clear: both;
}

6. 三栏布局

要求:实现三栏布局,左右两边各100px,中间内容自适应

基于flex的三栏布局
<div class="layOut">
	<div class="left"></div>
	<div class="middle"></div>
	<div class="right"></div>
</div>
<style>
.layOut{
	display: flex;
}
.left, .right{
	width: 100px;
}
.middle{
	flex: 1;  /* flex为1表示自适应 flex:1 1 auto */
}
</style>
基于浮动的三栏布局
<div>
	<div class="left"></div>
	<div class="right"></div>
	<div class="middle"></div>
</div>
<style>
.left{
	float: left;
	width: 100px;
}
.right{
	float: right;
	width: 100px;
}
.middle{
	width: 100%;
	/*padding: 0 100px*/
	/*padding这句话可有可无,因为float元素虽然脱离文档流,但是后面元素的 内容 会腾出空间*/
}
</style>
基于绝对定位的三栏布局
<div>
	<div class="left"></div>
	<div class="right"></div>
	<div class="middle"></div>
</div>
<style>
.left{
	position: absolute;
	top: 0;
	width: 100px;
}
.right{
	position: absolute;
	top: 0;
	right: 0;
	width: 100px;
}
.middle{
	width: 100%;
	/*思想与float类似,但是基于定位的三栏布局,absolute属性脱离文档流,并且后面的元素包括内容都会忽略它*/
	padding: 0 100px 0 100px;
}
</style>
双飞翼布局
<div>
	<div class="middle"></div>
	<div class="left"></div>
	<div class="right"></div>
</div>
<style>
.left, .middle, .right{
	float: left;
}
.left{
	width: 100px;
	margin-left: -100%;
}
.right{
	width: 100px;
	margin-left: 100px;
}
.middle{
	width: 100%;
	padding: 0 100px; /*腾出位置*/
}
</style>
圣杯布局
<div class="container">
	<div class="middle"></div>
	<div class="left"></div>
	<div class="right"></div>
</div>
<style>
.container{
	padding-left: 100px;
	padding-right: 100px;
	/*这里是双飞翼和圣杯的不同点,圣杯模型在最外层div元素让出了空间*/
}
.left, .right, .middle{
	float: left;
}
.middle{
	width: 100%;
}
.left{
	width: 100px;
	margin-left: -100%;
	position: relative;
	left: -100px;
}
.right{
	width: 100px;
	margin-left: 100px;
	position: relative;
	left: 100px;
}
</style>

圣杯和双飞翼都是基于利用浮动和负边距来完成三栏布局,圣杯模型相对于双飞翼模型来说,其最外层包裹的父元素主动为左右两栏分配了位置,通过padding来设置的

所以圣杯模型需要通过相对定位再一次进行移动,移动到合适的位置

负边距:当我们给元素加上相反的负边距的时候,它会认为它前面的元素的宽度减少了这么多,而实际上前者的宽度并没有改变,最终的效果为:加负边距的元素浮在了它前面元素的上方

7. 文档流

一个网页中的元素根据HTML文档中的位置和CSS属性,在页面中有着不同的布局。

一个盒子(元素)可以根据三种定位方案来布置

  1. normal flow(文档流/常规流)
  2. float(浮动)
  3. absolute positioning(绝对定位)

若为常规流则元素按照HTML文档中的位置顺序,自上而下的排列

若设置float属性,则该盒子会脱离文档流,其他(后面)的盒子会无视这个元素,但盒子内的文本(内容流)会让出位置

若设置绝对定位属性/fixed,同样也会脱离文档流,但其他盒子与其内部的内容都会无视该盒子

注意事项:

  • 对于脱离文档流的元素,只有该元素之后的元素会无视,在该元素之前的元素是正常布局的
  • 在脱离文档流元素之后的元素会在脱离文档流元素的下面(被覆盖)
  • 脱离文档流但不脱离dom树

8. z-index

每个元素都具有三维的空间坐标,除了水平和垂直位置外,还有一个z坐标,通过改变z的坐标,我们可以实现元素的层叠

z-index定义了元素所属的层叠级别。层叠级别大的显示在上,层叠级别小的显示在下,相同层叠级别时,遵循其在HTML文档中的顺序

默认情况下,正常流(normal flow)是处于最下面一层的

能够产生层叠级别的属性:position(除了static),opacity …

9. 盒模型

CSS中存在4种盒模型

  1. 标准盒模型
  2. IE盒模型
  3. flex弹性盒模型
  4. columns盒模型

页面中的每一个元素都是一个盒子,并且这个盒子描述了该元素的边距信息,有外向内分别是:

** margin border padding content **

** 外边距 边框 内边距 内容**

在标准盒模型下,我们为一个元素设定的width或height = content

在IE盒模型下,我们为一个元素设定的width或height = content + padding + border. 在IE盒模型下,设置固定宽度后,修改border或padding,content可以自动缩放,并且在bootstrap或elementUI中都是用的IE盒模型

设置标准盒模型:box-sizing: content-box
设置IE盒模型:box-sizing: border-box

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值