CSS
display: none;与 visibility: hidden;的区别
联系:它们都能让元素不可见
区别:
(1)display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;
(2)visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见
(3)display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;
(4)visibility: hidden;是继承属性,子孙节点消失由于继承了 hidden,通过设置 visibility: visible;可以让子孙节点显式
(5)修改常规流中元素的 display 通常会造成文档重排。修改 visibility 属性只会造成本元素的重绘。
(6)读屏器不会读取 display: none;元素内容;会读取 visibility: hidden;元素内容
BFC
块格式化上下文(Block Formatting Context,BFC)是 Web 页面的可视化 CSS 渲染的一部分,
是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
通俗来讲
BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。
如果一个元素符合触发 BFC 的条件,则 BFC 中的元素布局不受外部影响。
创建 BFC
(1)根元素或包含根元素的元素
(2)浮动元素 float = left|right 或 inherit(≠none)
(3)绝对定位元素 position = absolute 或 fixed
(4)display = inline-block|flex|inline-flex|table-cell 或 table-caption
(5)overflow = hidden|auto 或 scroll(≠visible)
BFC 指的是块级格式化上下文,一个元素形成了 BFC 之后,那么它内部元素产生的布局不会影响到外部元素,
外部元素的布局也不会影响到 BFC 中的内部元素。一个 BFC 就像是一个隔离区域,和其他区域互不影响。
一般来说根元素是一个 BFC 区域,浮动和绝对定位的元素也会形成 BFC,display 属性的值为 inline-block、flex
这些属性时也会创建 BFC。还有就是元素的 overflow 的值不为 visible 时都会创建 BFC。
BFC 布局与普通文档流布局的区别
普通文档流布局
浮动的元素是不会被父元素计算高度
相邻两个元素的 margin 会重叠
margin 会传递给父元素
非浮动元素会覆盖浮动元素的位置
清除浮动
比较好的方法有
给父级元素添加 class
.clearFix:after {
content: ''; /*设置内容为空*/
height: 0; /*高度为0*/
line-height: 0; /*行高为0*/
display: block; /*将文本转为块级元素*/
visibility: hidden; /*将元素隐藏*/
clear: both; /*清除浮动*/
}
.clearFix {
zoom: 1; /*为了兼容IE*/
}
父级元素设置 overflow:hidden;触发 BFC
父元素内结尾处添加 div 标签并设置 class 为 clear:both
CSS 权重
!important > 内联式 > id > class > tag
6.display:inline-block
多个元素设置为 inline-block 显示在一行时 元素之间会有间隙
解决
去掉所有的换行和空格
使用 margin 为负值
postcss 的使用
PostCSS 提供了一个解析器,它能够将 CSS 解析成抽象语法树
通过在 PostCSS 这个平台上,我们能够开发一些插件,来处理我们的 CSS,比如热门的:autoprefixer
base64 的使用
用于减少 HTTP 请求
适用于小图片
base64 的体积约为原图的 4/3
外边距重叠
两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
两个外边距一正一负时,折叠结果是两者的相加的和。
IFB
IFC 指的是行级格式化上下文,它有这样的一些布局规则:
(1)行级上下文内部的盒子会在水平方向,一个接一个地放置。
(2)当一行不够的时候会自动切换到下一行。
(3)行级上下文的高度由内部最高的内联盒子的高度决定。
媒体查询
@media screen and (width: 600px) {
body {
color: red;
}
}
如何实现单行/多行文本溢出的省略(...)
/*单行文本溢出*/
p {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
CSS 中哪些属性可以继承
每个 CSS 属性定义的概述都指出了这个属性是默认继承的,还是默认不继承的。这决定了当你没有为元素的属性指定值时该如何计算值。
当元素的一个继承属性没有指定值时,则取父元素的同属性的计算值。只有文档根元素取该属性的概述中给定的初始值(这里的意思应 该是在该属性本身的定义中的默认值)。
当元素的一个非继承属性(在 Mozilla code 里有时称之为 reset property)没有指定值时,则取属性的初始值 initial v alue(该值在该属性的概述里被指定)。
有继承性的属性:
(1)字体系列属性 font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust
(2)文本系列属性 text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、 text-transform、direction、color
(3)表格布局属性 caption-side border-collapse empty-cells
(4)列表属性 list-style-type、list-style-image、list-style-position、list-style
(5)光标属性 cursor
(6)元素可见性 visibility
(7)还有一些不常用的;speak,page,设置嵌套引用的引号类型 quotes 等属性
注意:当一个属性不是继承属性时,可以使用 inherit 关键字指定一个属性应从父元素继承它的值,inherit 关键字用于显式地 指定继承性,可用于任何继承性/非继承性属性。
每一个属性在定义中都给出了这个属性是否具有继承性,一个具有继承性的属性会在没有指定值的时候,会使用父元素的同属性的值 来作为自己的值。
一般具有继承性的属性有,字体相关的属性,font-size 和 font-weight 等。文本相关的属性,color 和 text-align 等。
表格的一些布局属性、列表属性如 list-style 等。还有光标属性 cursor、元素可见性 visibility。
一个属性不是继承属性的时候,我们也可以通过将它的值设置为 inherit 来使它从父元素那获取同名的属性值来继承。
::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用
单冒号(:)用于 CSS3 伪类,双冒号(::)用于 CSS3 伪元素。(伪元素由双冒号和伪元素名称组成)
双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,
比如:first-line、:first-letter、:before、:after 等,而新的在 CSS3 中引入的伪元素则不允许再支持旧的单冒号的写法。
想让插入的内容出现在其它内容前,使用::before,否者,使用::after;
在代码顺序上,::after 生成的内容也比::before 生成的内容靠后。如果按堆栈视角,::after 生成的内容会在::before 生成的内容之上。
回答:
在 css3 中使用单冒号来表示伪类,用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法,在一些浏览器中也可以使用单冒号来表示伪元素。
伪类一般匹配的是元素的一些特殊状态,如 hover、link 等,而伪元素一般匹配的特殊的位置,比如 after、before 等。
Last updated
Was this helpful?