我加在單元格和標題/框之間添加一個額外的包裝,以使其僅與CSS一起工作(一個可以不用,但是如何處理縮放,轉換等變得更加複雜)。
由於放大時覆蓋最靠近自身的單元格,因此在過渡時添加了一個延遲,因此有時間將光標重新放置在所選框上。另一個選擇是將其縮小一點,但我嘗試過,看起來不太好,所以我選擇了延遲版本。
這是你可以使用的東西嗎?
html, body {
width: 100%;
height: 100%;
margin: 0;
}
* {
position: relative;
box-sizing: border-box;
}
table {
border: 1;
width: 100%;
height: 100%;
}
tr {
height: 33.333%
}
td {
position: relative;
text-align: center;
background: red;
padding: 10px 0;
height: 33.333%
}
td > div {
position: absolute;
left: 0; top: 0;
width: 100%; height: 100%;
background: red;
}
.scroll {
overflow-y: auto;
height: calc(100% - 20px);
background: yellow;
}
.heading {
display: block;
height: 20px;
}
tr:nth-child(1) td:nth-child(1) > div {
transform-origin: left top;
}
tr:nth-child(1) td:nth-child(2) > div {
transform-origin: center top;
}
tr:nth-child(1) td:nth-child(3) > div {
transform-origin: right top;
}
tr:nth-child(2) td:nth-child(1) > div {
transform-origin: left center;
}
tr:nth-child(2) td:nth-child(2) > div {
transform-origin: center center;
}
tr:nth-child(2) td:nth-child(3) > div {
transform-origin: right center;
}
tr:nth-child(3) td:nth-child(1) > div {
transform-origin: left bottom;
}
tr:nth-child(3) td:nth-child(2) > div {
transform-origin: center bottom;
}
tr:nth-child(3) td:nth-child(3) > div {
transform-origin: right bottom;
}
td:hover {
z-index: 1;
}
td > div {
transition: transform .5s;
}
td:hover > div {
transform: scale(2);
transition: transform .5s .5s;
}
td:hover > div * {
transform: scale(0.5);
transform-origin: left top;
width: 200%;
}
td:hover > div span {
height: 10px;
}
td:hover > div div {
height: calc(200% - 10px);
}
<table>
<tr>
<td>
<div>
<span class="heading">Box1</span>
<div class="scroll">
Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box2</span>
<div class="scroll">
Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box3</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span class="heading">Box4</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box5</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box6</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span class="heading">Box7</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box8</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box9</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
</table>
基於評論,這裏是企圖使之前在縮放文本不縮水。
html, body {
width: 100%;
height: 100%;
margin: 0;
}
* {
position: relative;
box-sizing: border-box;
}
table {
border: 1;
width: 100%;
height: 100%;
}
tr {
height: 33.333%
}
td {
position: relative;
text-align: center;
background: red;
padding: 10px 0;
height: 33.333%
}
td > div {
position: absolute;
left: 0; top: 0;
width: 100%; height: 100%;
background: red;
}
.scroll {
overflow-y: auto;
height: calc(100% - 20px);
background: yellow;
}
.heading {
display: block;
height: 20px;
}
tr:nth-child(1) td:nth-child(1) > div {
transform-origin: left top;
}
tr:nth-child(1) td:nth-child(2) > div {
transform-origin: center top;
}
tr:nth-child(1) td:nth-child(3) > div {
transform-origin: right top;
}
tr:nth-child(2) td:nth-child(1) > div {
transform-origin: left center;
}
tr:nth-child(2) td:nth-child(2) > div {
transform-origin: center center;
}
tr:nth-child(2) td:nth-child(3) > div {
transform-origin: right center;
}
tr:nth-child(3) td:nth-child(1) > div {
transform-origin: left bottom;
}
tr:nth-child(3) td:nth-child(2) > div {
transform-origin: center bottom;
}
tr:nth-child(3) td:nth-child(3) > div {
transform-origin: right bottom;
}
td:hover {
z-index: 1;
}
td > div {
transition: transform .5s;
}
td > div * {
width: 100%;
}
td:hover > div {
transform: scale(2);
transition: transform .5s .5s;
}
td:hover > div * {
transform: scale(0.5);
transform-origin: left top;
width: 200%;
transition: transform 0s .5s, width 0s .5s, height 0s .5s;
}
td:hover > div span {
height: 10px;
color: white;
}
td:hover > div div {
height: calc(200% - 10px);
}
<table>
<tr>
<td>
<div>
<span class="heading">Box1</span>
<div class="scroll">
Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box2</span>
<div class="scroll">
Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box3</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span class="heading">Box4</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box5</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box6</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div>
<span class="heading">Box7</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box8</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
<td>
<div>
<span class="heading">Box9</span>
<div class="scroll">Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br> Some TExt<br>
</div>
</div>
</td>
</tr>
</table>
根據第二條評論,還可以添加基於類的CSS規則,然後通過在單元格上切換同一個類,手動觸發動畫。
這裏的CSS規則的更新來實現這一目標
td.zoomin > div,
td:hover > div {
transform: scale(2);
transition: transform .5s .5s;
}
td.zoomin > div *,
td:hover > div * {
transform: scale(0.5);
transform-origin: left top;
width: 200%;
transition: transform 0s .5s, width 0s .5s, height 0s .5s;
}
td.zoomin > div span,
td:hover > div span {
height: 10px;
color: white;
}
td.zoomin > div div,
td:hover > div div {
height: calc(200% - 10px);
}
而且像這樣的腳本
var box = document.querySelector("td:nth-child(2)");
box.classList.add("zoomin");
這是非常好的。有沒有一種方法可以使文本在縮小之前不會縮小? – Rolando
@Rolando謝謝...更新了第二個示例。懸停標題文本爲白色,因此會有某種跡象顯示正在發生。 – LGSon
這是完美的!只是好奇,可能有某種方式可以說,添加一個外部按鈕,手動觸發特定框的動畫? (即方框2) – Rolando