時間:2023-07-24 09:57:01 | 來源:網(wǎng)站運營
時間:2023-07-24 09:57:01 來源:網(wǎng)站運營
快速構建頁面結構的 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
下的所有元素做一個快速的統(tǒng)一處理.g-3d-visual { transform-style: preserve-3d; transform: rotateY(-30deg) rotateX(30deg); * { position: relative; transform-style: preserve-3d; transform: translateZ(0); }}
整個圖形就變成了這樣:*
通配符,對內部所有的元素都進行了簡單的處理。transform: translateZ(16px)
,產(chǎn)生不一樣的深度.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
類名,以及修改配色方案等等,就可以實現(xiàn)一個快速對頁面層級進行觀察的小插件!上述效果我是手動修改了當前頁面的 HTML 代碼,注入的相應的 CSS 代碼 :)
.g-3d-visual
,并且給它設置好相關的 CSS 3D 屬性值,讓整個內部元素可以 3D 化*
,對 .g-3d-visual
下的所有元素做一個快速的統(tǒng)一處理translateZ()
遞進深度:hover
、transition
等設置,實現(xiàn)整體的交互效果關鍵詞:結構
微信公眾號
版權所有? 億企邦 1997-2025 保留一切法律許可權利。