CSS
2020-04-16 11:10:12 1 举报
AI智能生成
前端 CSS 重要概念
作者其他创作
大纲/内容
一些 CSS 实现的特殊效果
大扩符
html
<div class="quote">
<div></div>
</div>
<div></div>
</div>
css
.quote {
position: relative;
width: 100%;
height: 40px;
background-color: azure;
}
.quote::before,
.quote::after,
.quote ::before,
.quote ::after {
content: '';
display: block;
position: absolute;
width: calc(50% - 20px);
height: 20px;
border-style: solid;
border-color: #000;
border-width: 0;
}
.quote ::before,
.quote ::after {
top: 0;
border-bottom-width: 1px;
}
.quote ::before {
left: 0;
border-bottom-left-radius: 20px;
}
.quote ::after {
right: 0;
border-bottom-right-radius: 20px;
}
.quote::before,
.quote::after {
top: 20px;
border-top-width: 1px;
}
.quote::before {
left: 20px;
border-top-right-radius: 20px;
}
.quote::after {
right: 20px;
border-top-left-radius: 20px;
}
position: relative;
width: 100%;
height: 40px;
background-color: azure;
}
.quote::before,
.quote::after,
.quote ::before,
.quote ::after {
content: '';
display: block;
position: absolute;
width: calc(50% - 20px);
height: 20px;
border-style: solid;
border-color: #000;
border-width: 0;
}
.quote ::before,
.quote ::after {
top: 0;
border-bottom-width: 1px;
}
.quote ::before {
left: 0;
border-bottom-left-radius: 20px;
}
.quote ::after {
right: 0;
border-bottom-right-radius: 20px;
}
.quote::before,
.quote::after {
top: 20px;
border-top-width: 1px;
}
.quote::before {
left: 20px;
border-top-right-radius: 20px;
}
.quote::after {
right: 20px;
border-top-left-radius: 20px;
}
思路
每个圆角的实现:一个 伪元素 有一条 border ,此 border 一头的圆角为 50% ;
伪元素 宽度的计算:利用 calc() 函数;
四个伪元素的产生:给内外 div 都加上俩伪元素。
伪元素 宽度的计算:利用 calc() 函数;
四个伪元素的产生:给内外 div 都加上俩伪元素。
https://www.cnblogs.com/arealy/p/7736856.html
特异性/权重计算
[a,b,c,d]
a
行内样式
b
id选择器
c
类名、伪类和属性选择器
d
标签和伪元素选择器
@规则
条件规则组
这些语句使用相同的语法. 它们都可以包含嵌套语句,或者是 css 规则或者是@规则。
它们都表达: 它们所指的条件被评估为 true 或者 false,如果为 true 那么它们里面的语句生效。
它们都表达: 它们所指的条件被评估为 true 或者 false,如果为 true 那么它们里面的语句生效。
@media
@media screen and (min-width: 900px) {
article {
padding: 1rem 3rem;
}
}
article {
padding: 1rem 3rem;
}
}
@supports
@supports (display: flex) {
@media screen and (min-width: 900px) {
article {
display: flex;
}
}
}
@media screen and (min-width: 900px) {
article {
display: flex;
}
}
}
媒体查询
Media queries are
used for the following
used for the following
To conditionally apply styles with the CSS @media and @import at-rules.
To target specific media for the <style>, <link>, <source>,
and other HTML elements with the media= attribute.
and other HTML elements with the media= attribute.
You can also provide a media type or query inside a media attribute;
this resource will then only be loaded if the media condition is true.
For example:
<link href="print.css" rel="stylesheet" media="print">
<link href="mobile.css" rel="stylesheet" media="screen and (max-width: 600px)"
this resource will then only be loaded if the media condition is true.
For example:
<link href="print.css" rel="stylesheet" media="print">
<link href="mobile.css" rel="stylesheet" media="screen and (max-width: 600px)"
To test and monitor media states using the Window.matchMedia() and
MediaQueryList.addListener() JavaScript methods.
MediaQueryList.addListener() JavaScript methods.
块格式化上下文
Block Formatting Context
BFC
Block Formatting Context
BFC
块格式化上下文 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
创建 BFC
常见
- 根元素(<html>)
- 浮动元素(元素的 float 不是 none)
- 绝对定位元素(元素的 position 为 absolute 或 fixed)
- 行内块元素(元素的 display 为 inline-block)
- overflow 值不为 visible 的块元素
- 弹性元素(display为 flex 或 inline-flex元素的直接子元素)
网格与多列布局
- 网格元素(display为 grid 或 inline-grid 元素的直接子元素)
- 多列容器(元素的 column-count 或 column-width 不为 auto,包括 column-count 为 1)
- column-span 为 all 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中
表格
- 表格单元格(元素的 display为 table-cell,HTML表格单元格默认为该值)
- 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
- 匿名表格单元格元素(元素的 display为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table)
其他
- display 值为 flow-root 的元素
- contain 值为 layout、content或 paint 的元素
块格式化上下文包含创建它的元素内部的所有内容.
意义
1. 浮动定位与清除浮动
浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。
2. 外边距折叠问题
外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。
浮动定位和清除浮动时只会应用于同一个BFC内的元素。浮动不会影响其它BFC中元素的布局,而清除浮动只能清除同一BFC中在它前面的元素的浮动。
2. 外边距折叠问题
外边距折叠(Margin collapsing)也只会发生在属于同一BFC的块级元素之间。
应用
让父元素包含浮动的子元素
创建一个会包含这个浮动的BFC,通常的做法是设置父元素 overflow: auto/hidden 等其他的非默认的 overflow: visible 的值。
当你使用这个属性只是为了创建BFC的时候,你可能会发现一些不想要的问题,比如滚动条或者一些剪切的阴影,需要注意。
另外,对于后续的开发,可能不是很清楚当时为什么使用overflow。所以你最好添加一些注释来解释为什么这样做。
当你使用这个属性只是为了创建BFC的时候,你可能会发现一些不想要的问题,比如滚动条或者一些剪切的阴影,需要注意。
另外,对于后续的开发,可能不是很清楚当时为什么使用overflow。所以你最好添加一些注释来解释为什么这样做。
避免两个相邻 <div> 之间的 外边距合并 问题
子主题
CSS 基础框盒模型
当对一个文档进行布局(lay out)的时候,浏览器的渲染引擎会根据标准的 CSS 基础框盒模型(CSS basic box model),将所有元素表示为一个个矩形的盒子(box)。CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸…)。
每个盒子由四个部分(或称区域)组成,
由它们各自的边界(Edge)所定义
由它们各自的边界(Edge)所定义
内容区域 content area
由内容边界限制,容纳着元素的“真实”内容,例如文本、图像,或是一个视频播放器。它的尺寸为 content width (或称 content-box 宽度)和 content height(或称 content-box 高度)。
如果元素是块元素且box-sizing 为 content-box(默认),则内容区域的大小可明确地通过 width、min-width、max-width、height、min-height,和 max-height 控制。
如果元素是块元素且box-sizing 为 content-box(默认),则内容区域的大小可明确地通过 width、min-width、max-width、height、min-height,和 max-height 控制。
内边距区域 padding area
由内边距边界限制,扩展自内容区域。它的尺寸是 padding-box 宽度 和 padding-box 高度。
内边距的粗细可以由 padding-top、padding-right、padding-bottom、padding-left,和简写属性 padding 控制。
内边距的粗细可以由 padding-top、padding-right、padding-bottom、padding-left,和简写属性 padding 控制。
边框区域 border area
由边框边界限制,扩展自内边距区域来容纳边框的区域。其尺寸为 border-box 宽度 和 border-box 高度。
边框的粗细由 border-width 和简写的 border 属性控制。
如果 box-sizing 属性被设为 border-box,那么边框区域的大小可明确地通过 width、min-width, max-width、height、min-height,和 max-height 属性控制。
假如框盒上设有背景(background-color 或 background-image),背景将会一直延伸至边框的外沿(在边框下层延伸,边框会盖在背景上)。此默认表现可通过 CSS 属性 background-clip 来改变。
边框的粗细由 border-width 和简写的 border 属性控制。
如果 box-sizing 属性被设为 border-box,那么边框区域的大小可明确地通过 width、min-width, max-width、height、min-height,和 max-height 属性控制。
假如框盒上设有背景(background-color 或 background-image),背景将会一直延伸至边框的外沿(在边框下层延伸,边框会盖在背景上)。此默认表现可通过 CSS 属性 background-clip 来改变。
外边距区域 margin area
由外边距边界限制,用空白区域扩展边框区域,以分开相邻的元素。它的尺寸为 margin-box 宽度 和 margin-box 高度。
外边距区域的大小由 margin-top、margin-right、margin-bottom、margin-left,和简写属性 margin 控制。在发生外边距合并的情况下,由于盒之间共享外边距,外边距不容易弄清楚。
最后,对于不可替代的行内元素来说,其占用空间(每一行的高度)则由 line-height 属性决定,即使边框和内边距仍会显示在内容周围。
外边距区域的大小由 margin-top、margin-right、margin-bottom、margin-left,和简写属性 margin 控制。在发生外边距合并的情况下,由于盒之间共享外边距,外边距不容易弄清楚。
最后,对于不可替代的行内元素来说,其占用空间(每一行的高度)则由 line-height 属性决定,即使边框和内边距仍会显示在内容周围。
外边距合并
块之间的 上下边距 有时会合并成 边距中最大的单个边距,这种行为称为边界折叠(margin collapsing)。
浮动和绝对定位的元素永远不会产生外边距重叠行为。
浮动和绝对定位的元素永远不会产生外边距重叠行为。
形成外边距重叠的三种情况
同一层相邻元素之间
相邻的两个元素之间的外边距重叠,除非后一个元素加上clear-fix清除浮动。
没有内容将父元素和后代元素分开
如果没有 border,padding,行内内容,也没有创建 块级格式上下文 或 清除浮动 来分开一个块级元素的上边界 margin-top 与其内一个或多个后代块级元素的上边界 margin-top;
或没有 边框,内边距,行内内容,高度height,最小高度min-height 或 最大高度max-height 来分开一个块级元素的下边界 margin-bottom 与其内的一个或多个后代后代块元素的下边界 margin-bottom,则就会出现父块元素和其内后代块元素外边界重叠。
重叠的边距会溢出到父级块元素外面。
或没有 边框,内边距,行内内容,高度height,最小高度min-height 或 最大高度max-height 来分开一个块级元素的下边界 margin-bottom 与其内的一个或多个后代后代块元素的下边界 margin-bottom,则就会出现父块元素和其内后代块元素外边界重叠。
重叠的边距会溢出到父级块元素外面。
空的块级元素
If there is no border, padding, inline content, height, or min-height to separate a block's margin-top from its margin-bottom, then its top and bottom margins collapse.
可替换元素
在 CSS 中可替换元素是一种外部对象,它们外观的渲染是独立于 CSS 的。
简单来说,它们的内容不受当前文档的样式的影响。CSS 可以影响可替换元素的位置,但不会影响到可替换元素自身的内容。
某些可替换元素,例如 <iframe> 元素,可能具有自己的样式表,但它们不会继承父文档的样式。
CSS 能对可替换元素产生的其他影响在于,部分属性可以控制元素内容在其框中的位置或定位方式(见下面的控制内容框中的对象位置)。
简单来说,它们的内容不受当前文档的样式的影响。CSS 可以影响可替换元素的位置,但不会影响到可替换元素自身的内容。
某些可替换元素,例如 <iframe> 元素,可能具有自己的样式表,但它们不会继承父文档的样式。
CSS 能对可替换元素产生的其他影响在于,部分属性可以控制元素内容在其框中的位置或定位方式(见下面的控制内容框中的对象位置)。
可替换元素
典型的可替换元素
- <iframe>
- <video>
- <embed>
- <img>
仅在特定情况下
被作为可替换元素处理
的元素
被作为可替换元素处理
的元素
- <option>
- <audio>
- <canvas>
- <object>
HTML 规范也说了 <input> 元素可替换,因为 "image" 类型的 <input> 元素就像<img>一样被替换。
但是其他形式的控制元素,包括其他类型的 <input> 元素,被明确地列为非可替换元素(non-replaced elements)。
该规范用术语小挂件(Widgets)来描述它们默认的限定平台的渲染行为。
用 CSS content 属性插入的对象是匿名的可替换元素。它们并不存在于 HTML 标记中,因此是“匿名的”。
但是其他形式的控制元素,包括其他类型的 <input> 元素,被明确地列为非可替换元素(non-replaced elements)。
该规范用术语小挂件(Widgets)来描述它们默认的限定平台的渲染行为。
用 CSS content 属性插入的对象是匿名的可替换元素。它们并不存在于 HTML 标记中,因此是“匿名的”。
CSS 与可替换元素
CSS 在某些情况下会对可替换元素做一些特殊处理,比如计算外边距(margin)和一些 auto 的具体值。
需要注意的是,一部分(并非全部)可替换元素,有固有的尺寸或基线(baseline)会被一些 CSS 属性如 vertical-align 用到。
只有可替换元素才有固有尺寸。
需要注意的是,一部分(并非全部)可替换元素,有固有的尺寸或基线(baseline)会被一些 CSS 属性如 vertical-align 用到。
只有可替换元素才有固有尺寸。
控制内容框中的对象位置
某些CSS属性可用于指定 可替换元素中包含的内容对象 在该元素的盒区域内的位置或定位方式。
object-fit
指定可替换元素的内容对象如何适应于元素盒
object-position
指定可替换元素的内容对象在元素盒区域中的位置
padding
The padding CSS property sets the padding area on all four sides of an element.
It is a shorthand for padding-top, padding-right, padding-bottom, and padding-left.
It is a shorthand for padding-top, padding-right, padding-bottom, and padding-left.
语法
取值
<长度>
固定值
<百分比>
相对于包含块的宽度
background-size
background-size 设置背景图片大小
语法
规定背景的方法
关键词
contain
cover
提供一个宽度值
高度默认为 auto
提供宽度与高度值
第一个设置宽度,第二个设置高度。
每个值可以是 长度、百分比 或者 auto
每个值可以是 长度、百分比 或者 auto
值
contain
缩放背景图片以完全装入背景区,可能背景区部分空白。
cover
缩放背景图片以完全覆盖背景区,可能背景图片部分看不见。
auto
以背景图片的比例缩放背景图片。
<length>
指定背景图片大小,不能为负值。
<percentage>
<percentage> 值,指定背景图片相对背景区(background positioning area)的百分比,不能为负值。
背景区由 background-origin 设置,默认为盒模型的内容区与内边距,也可设置为只有内容区,或者还包括边框。
如果 background-attachment 为 fixed,背景区为浏览器可视区(即视口),不包括滚动条。
背景区由 background-origin 设置,默认为盒模型的内容区与内边距,也可设置为只有内容区,或者还包括边框。
如果 background-attachment 为 fixed,背景区为浏览器可视区(即视口),不包括滚动条。
0 条评论
下一页