【发布时间】:2018-03-30 09:08:31
【问题描述】:
请看下面的例子。我正在学习 CSS 网格。整个目的是保持简单,并且不需要在子元素上指定不同的布局细节,因此解决方案应符合此模式。
鉴于以下情况:
function toggle(t) {
document.querySelectorAll('div').forEach(el =>
el.classList[0] === t.classList[0] ?
el.classList.toggle('selected') :
el.classList.remove('selected'))
}
:root,
html,
body,
main {
margin: 0;
padding: 0;
font-family: sans-serif;
height: 100%;
}
main {
border: solid 3pt white;
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr 1fr;
}
div {
grid-area: span 2 / span 2;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
font-size: 5em;
font-weight: bold;
color: white;
background: grey;
}
.one {
background: red
}
.two {
background: green
}
.three {
background: blue
}
.selected {
width: 150%;
height: 150%;
z-index: 2;
}
<main>
<div class=one onclick="toggle(event.target)">one</div>
<div class=two onclick="toggle(event.target)">two</div>
<div class=three onclick="toggle(event.target)">three</div>
<div class=four onclick="toggle(event.target)">four</div>
</main>
https://jsfiddle.net/robbie_at_harvard/a3ouq711/1/
请调整以使区域 2、3 和 4 向中间扩展,而不是始终从左上角扩展?同样,最好使用通用规则,而不是特定于 div.class 规范的规则。
第二个问题,如果我想要一个 2x2 子元素的 4x4 布局,其中单击一个元素将其扩展为 3x3 并将其他元素收缩为对角的 1x2、2x1 和 1x1,生成此解决方案需要什么?
【问题讨论】:
-
使用 CSS 比例而不是宽度和高度? stackoverflow.com/questions/28726430/…
-
这几乎可以工作..您也可以偏移它以提供完整的解决方案,但是偏移量必须取决于所选和位置类。如果我必须使用一个位置类,那很好,但我希望这个更简单的例子至少不需要那个。
标签: javascript html css jsfiddle css-grid