- Published on
css
- Authors
- Name
- AgedCoffee
- @__middle__child
创建独立堆叠上下文的方法
- 根元素
(<html>)
- 有 position 属性且 z-index 值不为 auto 的元素
- opacity 小于 1 的元素
- transform 属性且值不为 none 的元素
- filter 属性且值不为 none 的元素
- perspective 属性且值不为 none 的元素
- clip-path 属性且值不为 none 的元素
- mask 属性且值不为 none 的元素
- isolation: isolate 的元素
- will-change 属性且值为 opacity、transform 等的元素
- mix-blend-mode 属性且值不为 normal 的元素
<iframe>
元素
graph TB
subgraph Stacking Contexts
A[root-html]
B[position & z-index]
C[opacity < 1]
D[transform != none]
E[filter != none]
F[perspective != none]
G[clip-path != none]
H[mask != none]
I[isolation: isolate]
J[will-change]
K[mix-blend-mode != normal]
L[iframe]
end
html 示例
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
.parent {
position: relative;
z-index: 1;
background-color: lightgrey;
width: 200px;
height: 200px;
}
.child1 {
position: relative;
z-index: 2;
background-color: red;
width: 100px;
height: 100px;
}
.child2 {
position: relative;
z-index: 1;
background-color: blue;
width: 100px;
height: 100px;
margin-top: -50px; /* 使其与 .child1 部分重叠 */
}
.sibling {
position: relative;
z-index: 3;
background-color: green;
width: 100px;
height: 100px;
margin-top: -150px; /* 使其与 .parent 部分重叠 */
}
</style>
</head>
<body>
<div class="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
<div class="sibling"></div>
</body>
</html>
graph TD
subgraph Root Stacking Context
P[".parent (z-index: 1)"]
S[".sibling (z-index: 3)"]
end
subgraph Parent Stacking Context
C1[".child1 (z-index: 2)"]
C2[".child2 (z-index: 1)"]
end
P --> C1
P --> C2
在 js 中等待 css 的动画执行结束
const animations = document.getAnimations().map((a) => a.finished)
await Promise.all(animations)
渐变 border 的 tailwind 实现
export const AnimatedGradientBorderTW: React.FC<{
children: React.ReactNode
}> = ({ children }) => {
const boxRef = useRef<HTMLDivElement>(null)
useEffect(() => {
const boxElement = boxRef.current
if (!boxElement) {
return
}
const updateAnimation = () => {
const angle = (parseFloat(boxElement.style.getPropertyValue('--angle')) + 0.5) % 360
boxElement.style.setProperty('--angle', `${angle}deg`)
requestAnimationFrame(updateAnimation)
}
requestAnimationFrame(updateAnimation)
}, [])
return (
<div
ref={boxRef}
style={
{
'--angle': '0deg',
'--border-color': 'linear-gradient(var(--angle), #070707, #687aff)',
'--bg-color': 'linear-gradient(#131219, #131219)',
} as CSSProperties
}
className="flex h-[400px] w-[400px] items-center justify-center rounded-lg border-2 border-[#0000] p-3 [background:padding-box_var(--bg-color),border-box_var(--border-color)]"
>
{children}
</div>
)
}
在屏幕缩放比例发生改变页面不变的处理方案
- 首页第一个模块所有的 100vh 全部要动态的改变为 calc(100vh * 2)
- 视频的宽度需要调整为 100%(视频动效会没)
- 登录模态框内部的逻辑调整为 zoom 处理
- 暂定有问题的动效模块直接不展示
- 另外注入 URS 模态框的 css 可以区分 Win 还是 Mac
antd-mobile css 变量覆盖
:root:root {
--adm-button-border-radius: 2px;
}