时间:2023-07-24 09:57:01 | 来源:网站运营
时间:2023-07-24 09:57:01 来源:网站运营
快速构建页面结构的 3D Visualization:对 Chrome 扩展功能熟悉的小伙伴,可能都有用过 Chrome 的 3D 展示页面层级关系这个功能。<div class="g-wrap"> <div class="g-header">This is Header</div> <div class="g-content"> <div class="g-inner"> <div class="g-box">Lorem LOrem</div> <div class="g-box">Lorem LOrem</div> </div> </div> <div class="g-footer">This is Footer</div></div>
部分 CSS 代码:.g-wrap { margin: auto; width: 300px; height: 500px; background: #ddd; display: flex; align-content: flex-start; flex-wrap: wrap; flex-direction: column; gap: 10px; padding: 10px; & > div { width: 100%; flex-grow: 1; border: 1px solid #333; }}.g-content { height: 200px; display: flex; padding: 10px; box-sizing: border-box; .g-inner { display: flex; padding: 10px; gap: 10px; & > div { width: 100px; height: 50px; border: 1px solid #333; } }}
得到这样一个最多深度为 4 层的简单结构:.g-3d-visual
。.g-3d-visual
的作用域下:.g-3d-visual { // ...}
为了让整个代码更易理解,我们会用上 SASS 这种预处理器,主要是利用它的选择器可以的嵌套特性。.g-3d-visual
根元素添加 3D 相关的样式,譬如 transform-style: preserve-3d
,让整个内部元素可以 3D 化*
,对 .g-3d-visual
下的所有元素做一个快速的统一处理.g-3d-visual { transform-style: preserve-3d; transform: rotateY(-30deg) rotateX(30deg); * { position: relative; transform-style: preserve-3d; transform: translateZ(0); }}
整个图形就变成了这样:*
通配符,对内部所有的元素都进行了简单的处理。transform: translateZ(16px)
,产生不一样的深度.g-3d-visual { transform-style: preserve-3d; transform: rotateY(-30deg) rotateX(30deg); * { position: relative; transform-style: preserve-3d; background: rgba(0, 0, 255, 0.2); transform: translateZ(16px); box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1); &::before, &::after { content: ""; display: block; position: absolute; background: rgba(0, 0, 255, 0.2); } &::before { width: 100%; height: 16px; left: 0; bottom: 0; transform-origin: center bottom; transform: scaleY(1) rotateX(90deg); } &::after { width: 16px; height: 100%; right: 0; top: 0; transform-origin: right center; transform: scaleX(1) rotateY(-90deg); } }}
那么,其实到这里,基本上可以说核心代码都有了,最为核心的是需要理解:.g-3d-visual
下每一层的元素,也就是 *
通配符选择的元素,都添加了一个 transform: translateZ(16px)
,这一点非常重要,是为了给元素逐渐增加 Z 轴方向的深度box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1)
这一个小小的阴影效果的添加,让整个效果看起来更加的真实<div class="g-wrap g-3d-visual"> <div class="g-header">This is Header</div> <div class="g-content"> <div class="g-inner"> <div class="g-box">Lorem LOrem</div> <div class="g-box">Lorem LOrem</div> </div> </div> <div class="g-footer">This is Footer</div></div>:root { --side-height: 16px; --hover-color: rgba(0, 0, 255, 0.2); --box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1); --transform-duration: 0.3s;}.g-3d-visual { transform-style: preserve-3d; transform: rotateY(-30deg) rotateX(30deg); * { position: relative; transform-style: preserve-3d; transform: translateZ(0); transition: transform var(--transform-duration); cursor: pointer; &::before, &::after { content: ""; display: block; position: absolute; background: transparent; transition: all var(--transform-duration); } &::before { width: 100%; height: var(--side-height); left: 0; bottom: 0; transform-origin: center bottom; transform: scaleY(0) rotateX(90deg); } &::after { width: var(--side-height); height: 100%; right: 0; top: 0; transform-origin: right center; transform: scaleX(0) rotateY(-90deg); } &:hover { background: var(--hover-color); transform: translateZ(var(--side-height)); box-shadow: var(--box-shadow); &::before, &::after { background: var(--hover-color); } &::before { transform: scaleY(1) rotateX(90deg); } &::after { transform: scaleX(1) rotateY(-90deg); } } }}
这样,我们也就得到了题图一开始的 Hover 示意图的效果:.g-3d-visual
下相关的所有 CSS 代码。.g-3d-visual
样式即可。.g-3d-visual
类名,以及修改配色方案等等,就可以实现一个快速对页面层级进行观察的小插件!上述效果我是手动修改了当前页面的 HTML 代码,注入的相应的 CSS 代码 :)
.g-3d-visual
,并且给它设置好相关的 CSS 3D 属性值,让整个内部元素可以 3D 化*
,对 .g-3d-visual
下的所有元素做一个快速的统一处理translateZ()
递进深度:hover
、transition
等设置,实现整体的交互效果关键词:结构