颜色
1 | 4种表示法 |
移动端适配方案
1 | //确定适配方案,常用适配方案:rem适配、viewport适配、百分比适配 |
1 | CSS 纵横比(aspect ratio) |
js 监听 媒体查询 MediaQueryList
一个MediaQueryList
对象在一个document
上维持着一系列的媒体查询 (en-US),并负责处理当媒体查询在其 document 上发生变化时向监听器进行通知的发送。
网格布局
1 | <!-- |
内容超出三行显示省略
1 | .overflow3 { |
css 攻击
1 | 1、style-src 中的“unsafe-inline” 通过css窃取页面数据 |
运用 transform 导致文本模糊的现象
1 | 问题: 一块区域内的文本或者边框,在展示的时候,变得特别的模糊 |
css variable (css变量)
css 变量减少样式重复定义,比如同一个颜色值要在多个地方重复使用,以前通过 less 和 sass 预处理做到,现在 css 变量也可以做到,方便维护,提高可读性
1 | :root{ |
var() 函数
1 | // --color 是变量,default 是 默认值,当--color 值无效是使用 |
在媒体查询中使用,精简代码,减少冗余
1 | .box { |
方便在 js 中使用
1 | // 设置变量 |
js 与 css 变量交互
1 | <template> |
如果说 css变量需要带单位,则写法需要变化 margin-top: calc(var(–gap) * 1px);
css specificity 权重
css specificity
即 css 中关于选择器的权重,以下三种类型的选择器依次下降
id
选择器,如#app
class
、attribute
与pseudo-classes
(伪类) 选择器,如.header
、[type="radio"]
与:hover
type
标签选择器和伪元素选择器,如h1
、p
和::before
其中通配符选择器 *
,组合选择器 + ~ >
,否定伪类选择器 :not()
对优先级无影响
另有内联样式 <div class="foo" style="color: red;"></div>
及 !important
(最高) 具有更高的权重
权重计算
(id选择器个数, 类、伪类、属性选择器个数,标签、伪元素选择器个数)
1 | // (1, 1, 2) |
有哪些 css 属性不能展示动画效果
display,height
css 不能在 display:none 和 display:block 之间进行动画
也不能在 height:0 和 height:auto 之间进行动画
position: sticky
position: sticky
可理解为relative
与fixed
的结合体MDN 的解释:position: sticky 在正常文档流中仍然保有位置,然后会相对于它的最近的滚动祖先和最近的块级祖先根据 top, left, right, bottom 的值进行偏移。元素偏移不会影响其他任何元素的位置,因为会为该元素创建一个新的层叠上下文,从而不会影响到页面上的其他元素
网页实现黑暗模式
1 | // 颜色对换 |
隐藏元素的几种办法
01 display: none
通过 CSS 操控 display,移出文档流
1 | display: none; |
02 opacity: 0
透明度为 0,仍在文档流中,当作用于其上的事件(如点击)仍有效
1 | opacity: 0; |
03 visibility: hidden
透明度为 0,仍在文档流中,但作用于其上的事件(如点击)无效,这也是 visibility:hidden
与 opacity: 0
的区别
1 | visibility: hidden; |
04 content-visibility
移出文档流,但是再次显示时消耗性能低
1 | content-visibility: hidden; |
05 绝对定位于当前页面的不可见位置
1 | position: absolute; |
06 字体大小设置为 0
1 | font-size: 0; |
大屏三等分,中屏二等分,小屏1等分
1 | <style> |
自定义滚动条的样式
滚动条相关样式都是伪元素,以
scrollbar
打头,有以下伪元素,从-webkit
中可见兼容性一般,不过无所谓,现在 Chrome 浏览器占大头
::-webkit-scrollbar
— 整个滚动条.::-webkit-scrollbar-button
— 滚动条上的按钮 (上下箭头).::-webkit-scrollbar-thumb
— 滚动条上的滚动滑块.::-webkit-scrollbar-track
— 滚动条轨道.::-webkit-scrollbar-track-piece
— 滚动条没有滑块的轨道部分.::-webkit-scrollbar-corner
— 当同时有垂直滚动条和水平滚动条时交汇的部分.::-webkit-resizer
— 某些元素的 corner 部分的部分样式(例:textarea 的可拖动按钮).
1 | // 但其实最常用的是以下几个伪元素:滚动条、滑块、轨道,如下滚动条设置成功 |
网站字体设置默认字体优先
1 | font-family: system-ui; |
css 避免命名冲突
- BME式:即less、scss 的那种嵌套写法
- css scoped: 如 vue 样式的 scoped 属性
- css module
css 实现方格背景
1 | background: linear-gradient(90deg, rgba(200, 200, 200, 0.1) 3%, transparent 0), |
css 实现超出省略,超出多行省略
1 | 1、超出省略 |
垂直居中长度为父容器一半的子元素
设置 子元素宽度为父元素一半,再通过 aspect-ratio: 1/1; 设置宽高比 1:1即可
1 | <style> |
BFC 块级格式化上下文
块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
- BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。
- 如果一个元素符合触发 BFC 的条件,则 BFC 中的元素布局不受外部影响。
- 浮动元素会创建 BFC,则浮动元素内部子元素主要受该浮动元素影响,所以两个浮动元素之间是互不影响的。
- 创建BFC
- 根元素或包含根元素的元素
- 浮动元素 float = left | right 或 inherit(≠ none)
- 绝对定位元素 position = absolute 或 fixed
- display = inline-block | flex | inline-flex | table-cell 或 table-caption
- overflow = hidden | auto 或 scroll (≠ visible)
- BFC特性
- BFC 是一个独立的容器,容器内子元素不会影响容器外的元素。反之亦如此。
- 盒子从顶端开始垂直地一个接一个地排列,盒子之间垂直的间距是由 margin 决定的。
- 在同一个 BFC 中,两个相邻的块级盒子的垂直外边距会发生重叠。
- BFC 区域不会和 float box 发生重叠。
- BFC 能够识别并包含浮动元素,当计算其区域的高度时,浮动元素也可以参与计算了。
- BFC 作用
- 包含浮动元素时(清除浮动)不会出现高度塌陷【若是通过定位脱离文档流,导致的高度塌陷则没有办法】
- 避免外边距折叠,不同BFC包裹元素外边距才不会折叠
外边距折叠:外边距折叠的条件是 margin 必须相邻!
- 两个相邻的外边距都是 正数 时,折叠外边距是两者中较大的值。
- 两个相邻的外边距都是 负数 时,折叠外边距是两者中绝对值较大的值。
- 两个相邻的外边距是 一正一负 时,折叠外边距是两者相加的和。
rem、em、vw、vh 的值各是什么意思
rem
: 根据根元素(即html
)的font-size
em
: 根据自身元素的font-size
vw
: viewport widthvh
: viewport height
normalize.css 与 reset.css 又何区别
- normalize.css (opens new window): 会保留有用的样式,比如 h1 的字体大小
- reset.css (opens new window): 把所有样式都重置,比如 h1、h2、h3 的字体大小都进行了重置,保持了无样式
CSS 的盒模型
- 标准盒模型 width = content-width height = content-height
- 怪异盒模型 width = content-width + padding + border height = content-height + padding + border
样式裁剪
1 | 语法: |
:has 属性
CSS 新增的
:has()
支持很多表单状态,完全可以不使用 JS 脚本,就实现可以跟用户互动的表单。
initial-letter
首字母样式下沉。它需要两个空格分隔的值
- 第一个参数定义字母的大小以及它将占据多少行。该字母将在保持其纵横比的同时放大。您不能使用负值,但可以使用小数值。
- 第二个参数定义字母接收器。这可以被认为是字母所在位置的偏移量。第二个值是可选的,不能为负数。如果它不存在,它假定字母大小的值下降到最接近的整数。这相当于使用关键字“drop”。sink 还接受另一个关键字值“raise”,相当于 sink 为 1。
1
2
3 .selector:first-letter {
initial-letter: 2 2;
}VS以前得写法
1
2
3
4
5
6
7
8 p:first-letter {
color: hsl(220, 94%, 51%);
font-weight: bold;
font-size: 4rem;
float: left;
line-height: 1;
margin-right: 0.25rem;
}
1
2 // 测试支持
@supports (initial-letter: 1 1) { /* Your supported styles */ }
适配移动端视口的单位
桌面端的 vh,vw 单位在移动端下 设置100%,由于状态栏,浏览器导航栏,📱下面的按钮栏,会导致 100% vh出现滚动条。
为了解决这个问题,CSS 工作组规定了视口的各种状态。
- 大视口:视口大小假设任何动态扩展和缩回的 UA 接口被缩回。
- 小视口:视口大小假设任何动态扩展和缩回的 UA 接口都可以扩展。
新视口也分配了单位:
- 代表大视口的单位有
lv
前缀。单位为lvw
、lvh
、lvi
、lvb
、lvmin
和lvmax
。 - 代表小视口的单位有
sv
前缀。单位为svw
、svh
、svi
、svb
、svmin
和svmax
。
除非调整视口本身的大小,否则这些视口百分比单位的大小是固定的(因此是稳定的)。
除了大视口和小视口之外,还有一个动态视口,它动态考虑了 UA UI:
- 当动态工具栏展开时,动态视口等于小视口的大小。
- 当动态工具栏被缩回时,动态视口等于大视口的大小。
它的伴随单位有dv
前缀:dvw
, dvh
, dvi
, dvb
, dvmin
, 和dvmax
。它们的尺寸夹在它们lv*
和sv*
对应物之间。
这些单元在 Chrome 108 中发布,加入了已经支持的 Safari 和 Firefox。
浏览器支持
- chrome 108
- 火狐 101
- Edge 108
- sofari 15.4
在没有动态 UA UI 的浏览器中(例如桌面版 Chrome),大视口、小视口和动态视口的大小是相同的。
关于视口单位,有几点需要注意:
- 没有一个视口单元考虑滚动条的大小。在启用了经典滚动条的系统上,元素大小
100vw
因此会有点太宽。这是按照[规格](https://www.w3.org/TR/css-values-4/#viewport-relative-lengths:~:text=In all cases%2C scrollbars are assumed not to exist.)。 - 动态视口的值不会以 60fps 更新。在所有浏览器中,随着 UA UI 展开或缩回,更新会受到限制。一些浏览器甚至完全根据使用的手势(慢速滚动与滑动)来消除更新。
- 屏幕键盘(也称为虚拟键盘)不被视为 UA UI 的一部分。因此它不会影响视口单位的大小。在 Chrome 中,您可以选择加入虚拟键盘的存在会影响视口单位的行为。
用于理解css3D
一个网站,这个网页提供互动演示,帮助理解 CSS 里面与 3D 有关的各项属性。
去除表单自动填充的白色背景
1 | // 去除填充的白色背景 |
文本高度自适应
form-sizing 属性,一个带有 form-sizing
属性的实验性 CSS 规则即将推出,它允许您根据用户输入的文本量自动增加 textarea 的高度。
锚点定位布局
加上一点js就能实现可拖拽流程图效果。chrome 125版本特有的
1 |
|
1 | const dragElement = (element) => { |
1 | html { |
Magick
magick.css是一个极简的,(大部分)无类的CSS框架, 它的设计目标是易于使用和理解。它包含在一个文件中, 每一个选择都有注释。目标是实现优雅,但神奇的游戏外观, 同时最大化可读性和传达信息的能力;有点类似于巫师的笔记。
该框架在所有设备和屏幕尺寸上保持其美观和功能,并且完全无需JavaScript。它的灵感来源于LaTeX, 老式的TTRPG规则书,像concrete.css 和 Tufte CSS这样的CSS框架,以及”设计即可用性” 的极简主义原则。
magick.css 与 normalize.css 配合使用效果最佳, 强烈推荐使用!
css 垂直居中
这个属性终于出现了
1 | <div style="align-content: center; height: 100px;"> |
@layer
@layer 是CSS级联层(Cascading Layers)的一部分,它允许开发者将样式规则分组到不同的层中。这些层在浏览器解析样式时具有特定的顺序和优先级,从而提供了一种更加灵活和强大的方式来组织和控制样式的应用。
1 | @layer <layer-name> { |
如何使用 CSS flexbox 制作时间线(英文)
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/htmlcss/css/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!