@import

用途
@import 是 SCSS 的旧版导入方式。
允许直接引入另一个文件的内容,无需显式指定导入的内容。
会将所有导入的样式和内容直接拼接在生成的 CSS 文件中。
缺点
冗长的输出:因为它会重复导入相同的文件,导致生成的 CSS 文件冗长。
变量和混入的命名冲突:所有导入的文件共享同一个全局命名空间。

@use

用途
@use 是 SCSS 的现代导入方式,推荐用于新项目。
允许模块化引入文件,避免全局命名冲突。
通过限定符(命名空间)访问文件中的内容。
语法与行为
默认带有命名空间(文件名),通过 . 访问变量、@mixin 和函数。
支持引入时自定义命名空间。
引入文件时,不会重复生成内容。

功能

  • requestAnimationFrame 是一种优化动画渲染的 API。
  • 它告诉浏览器在下一次重绘之前执行指定的回调函数,通常用于实现流畅的动画。
  • 和固定时间间隔的 setTimeoutsetInterval 不同,requestAnimationFrame 会自动与浏览器的刷新率同步(如 60Hz,16.67ms 一帧)。

特点

高效:只在页面处于活动状态时执行回调(后台标签页会暂停,节省资源)。
精准:与显示器的刷新率匹配,避免丢帧。
流畅:浏览器会在合适的时间点调用回调,减少卡顿或跳帧现象。

常见场景

实现 DOM 动画
平滑滚动效果
监控动画帧性能

浏览器的 Web Components 中,Class 是用来定义自定义元素的主要方式,自定义元素支持以下生命周期回调方法:

生命周期回调:connectedCallback 和 disconnectedCallback

  1. connectedCallback
    作用:当自定义元素被插入到文档 DOM 中时,浏览器会自动调用该回调。
    用途:
    初始化 DOM 或状态。
    绑定事件监听器。
    触发外部依赖的加载操作。
    典型场景:
    加载数据、动态渲染子组件。
    初始化第三方库(如动画、图表库等)。
class MyElement extends HTMLElement {
    connectedCallback() {
        console.log('元素已插入到 DOM');
        this.innerHTML = '<p>Hello, World!</p>';
    }
}
customElements.define('my-element', MyElement);
  1. disconnectedCallback
    作用:当自定义元素从文档 DOM 中被移除时,浏览器会调用该回调。
    用途:
    清理 DOM 或状态。
    移除事件监听器,释放资源。
    停止定时器或取消网络请求。
    典型场景:
    停止动画或计时器。
    删除与外部环境相关的绑定操作。
class MyElement extends HTMLElement {
    disconnectedCallback() {
        console.log('元素已从 DOM 中移除');
    }
}
customElements.define('my-element', MyElement);

功能

  • performance.now() 是一种高精度的时间测量方法,返回自页面加载以来的毫秒数(包括小数点后3位)。

  • 它的精度远高于 Date.now(),适合用于测量代码性能或事件耗时。

    特点

  • 起点是浏览器的性能时间起点,不会受系统时间调整的影响。

  • 时间以 DOMHighResTimeStamp 类型返回,单位为毫秒。

常见场景

  • 测量代码性能
  • 计算动画帧之间的时间间隔
  • 精准测量事件延迟
特性  @use    @import
模块化 使用命名空间,强模块化 全局导入,容易命名冲突
性能  加载一次,性能更优   每次都会重复导入
CSS 输出  默认不会输出引入文件中的样式  会输出引入文件中的样式
推荐程度    现代 SCSS 标准推荐使用  不推荐,已被逐步淘汰

prefersReducedMotion: () =>
  matchMedia("(prefers-reduced-motion: reduce)").matches,
prefersMotion: () =>
  matchMedia("(prefers-reduced-motion: no-preference)").matches,
···
功能分析
prefersReducedMotion:

检测用户是否启用了减少动画或运动的偏好设置。
如果启用了,matchMedia("(prefers-reduced-motion: reduce)").matches 会返回 true。
表示用户希望减少不必要的动画或视觉运动。
prefersMotion:

检测用户是否没有特别的减少运动偏好(默认允许动画)。
如果没有特别偏好,matchMedia("(prefers-reduced-motion: no-preference)").matches 会返回 true。
表示用户对动画或视觉运动没有限制,可以正常显示动画。

使用 prefers-reduced-motion 的重要性(尤其是在 GSAP 或自定义动画中)
1. 提升用户体验
用户多样性: 有些用户(尤其是有视觉敏感或晕动症倾向的人)会对复杂动画感到不适。
如果忽视这些用户偏好,可能导致糟糕的用户体验,甚至用户放弃使用你的网站。
尊重用户设置: 使用 prefers-reduced-motion 确保动画适配用户需求。

CSS 中的 unset, initial, 和 inherit 关键字用于 CSS 属性值,提供了对属性继承和默认值的控制。这些关键字在处理样式复写和元素默认行为时非常有用,可以帮助开发者更精确地控制样式的应用。

1. unset

  • 定义:unset 是一个智能关键字,它根据 CSS 属性是否是继承属性来决定其行为。对于自然继承的属性,它表现得像 inherit(继承父元素的值);对于那些不继承的属性,它表现得像 initial(使用属性的初始默认值)。

  • 用途:unset 特别适用于想撤销特定元素上所有先前应用的样式,并希望某些样式回退到继承状态而其他回退到初始状态时。

button {
  color: blue;
  background-color: yellow;
  border: 1px solid black;
}

button.reset {
  all: unset;
}

在这个例子中,.reset 类的按钮将不再继承任何样式(如边框、背景、颜色等),colorbackground-color 将回到默认状态,而 border 将回到初始值,因为它通常不继承。

2. initial

  • 定义:initial 将一个属性设置为其初始默认值,即 CSS 规范中定义的值。
  • 用途:适用于将元素的某个属性明确重置为其默认状态,无论上下文如何。这对于撤销样式中的某些特定更改非常有用。
div {
  color: red;
}

div.default {
  color: initial; /* 将颜色重置为黑色,默认的初始颜色 */
}

这里 .default 类的 div 元素将有默认的黑色文本,不论其父元素的颜色是什么。

3. inherit

  • 定义:inherit 明确地设置属性值为直接父元素的相同属性值。
  • 用途:在一些特殊情况下,你可能需要强制一个元素继承其父元素的某些属性,即使默认情况下它不会这样做。
div {
  color: green;
}

span {
  color: inherit; /* 将颜色设置为继承其父 div 的颜色 */
}

这里的 span 通常不会继承 div 的颜色,除非明确指定使用 inherit。

在实际开发中的应用

  • 布局复位:使用 all: unset; 或特定属性的 initial 值来重置某些复杂的组件或插件的默认样式,避免样式冲突。
  • 主题一致性:在构建具有深度继承和多级覆盖的大型网站或应用时,inherit 可以确保子组件继承关键视觉属性(如字体、颜色)。
  • 框架和库的整合:在将第三方 CSS 框架或库整合到项目中时,经常会使用这些关键字来帮助撤销或应用某些默认或继承样式,确保组件的视觉一致性。
Posted in CSS.
  • 使用场景:当commit的内容有错误,需要回撤到之前的某个版本时。

  • git-reset - Reset current HEAD to the specified state

    意思是可以让HEAD这个指针指向其他的地方。例如我们有一次commit不是不是很满意,需要回到上一次的Commit里面。那么这个时候就需要通过reset,把HEAD指针指向上一次的commit的点。

注,Git一般划分为3个区域,working directory 为当前工作区、stage/index为暂存区(git add后的代码就会存储在这部分)、repository则记录提交的历史(git comment后的代码会存在这里)。3个区域关系如下图所示

Soft Reset

当执行一个 soft reset 时,Git 会将 HEAD(当前分支的指针)移动到你指定的提交,但不会改变暂存区(index)或工作目录。这意味着所有从你回退之后的提交到目前的改动都会被保留在暂存区中,等待再次提交。

  • 撤销之前的提交但保留代码更改,以便重新审查或修改后再次提交。

git reset --soft [commit]

Hard Reset

执行 hard reset 时,Git 不仅将 HEAD 移回到指定的提交,而且还会重置暂存区和工作目录,使它们与回退到的那个提交完全一致。这意味着自那个提交之后的所有更改都会被彻底删除。

  • 完全撤销某个提交及其后的所有更改,恢复到一个确定的、干净的状态,通常用于错误的提交。

git reset --hard [commit]

"Step out"

  • 意思:短暂地离开一个地方,通常是暂时性的。它也可以指出去休息一下或到外面走走。

  • 用法:

    • "我需要出去一下,接个电话。"(I need to step out for a moment to take a phone call.)
    • "她离开会议室去呼吸一下新鲜空气。"(She stepped out of the meeting to grab some fresh air.)

"Sort out"

  • 意思:整理、安排或解决某事。通常用于处理问题、困惑或混乱的情况。

  • 用法:

    • "我需要整理一下下周的日程安排。"(I need to sort out my schedule for next week.)
    • "我们在情况变糟之前先解决这个误会吧。"(Let's sort out this misunderstanding before it gets worse.)
    • "他把桌子上的文件都整理好了。"(He sorted out all the papers on his desk.)

这两个短语在正式和非正式的场合中都很常用。"Step out" 更加随意,通常指的是短暂离开或休息,而 "sort out" 则是关于解决问题或整理某些东西。

"Reach out"

  • 意思:
  1. 联系:主动与某人联系,通常是为了交流信息、寻求支持或提供帮助。
  2. 伸出援手:向某人提供帮助或支持。
  • 用法:

    • "如果你有任何问题,请随时联系我。"(If you have any questions, please feel free to reach out to me.)
    • "我会联系他,看看他是否需要帮助。"(I'll reach out to him to see if he needs any help.)
    • "公司会向客户伸出援手,以确保他们满意我们的服务。"(The company will reach out to customers to ensure they are satisfied with our services.)

"Reach out" 是一个常用的英语短语,意思是联系或向某人伸出援手。它可以用于表达与他人沟通、寻求帮助或提供帮助的意思。这个短语在商务和日常对话中都非常常见,常用于表达积极主动的沟通或帮助他人的意图。