【发布时间】:2018-02-13 03:16:52
【问题描述】:
我正在尝试通过用鼠标拖动列分隔符(或调整占位符大小)来动态调整 CSS 网格布局框的大小。
我在nav 元素上设置resize: horizontal; 调整大小,当我拖动元素右下角的小调整大小手柄时,它会调整大小,但相邻列的宽度不会自动调整,这会导致重叠。这是一个损坏的codepen。
HTML:
<main>
<nav>#1</nav>
<header>#2</header>
<section>#3</section>
</main>
CSS:
main {
display: grid;
border: 3px dotted red;
grid-gap: 3px;
grid-template-columns: 200px 1fr;
grid-template-rows: 100px 1fr;
height: 100%;
}
nav {
grid-column: 1;
grid-row: 1;
grid-row: 1 / span 2;
resize: horizontal;
overflow: scroll;
border: 3px dotted blue;
}
我希望 css 网格引擎能够自动处理这种情况,但显然它没有。
我尝试了jquery-ui resizable,但它似乎不适用于 css 网格。
我正在研究如何通过将网格属性grid-template-columns/rows: 设置为动态值来使用 jquery 执行此操作,但目前尚不清楚如何捕获通过调整大小句柄调整元素大小而引发的事件。 jquery resize 事件仅在window 对象上触发,而不在 dom 元素上触发。
有什么方法可以做到这一点,而不必处理像 dragstart/dragend 这样的低级鼠标事件?
【问题讨论】:
-
好问题。我认为一旦这项技术真正传播开来,重新调整网格区域的大小将是一件大事。至于为什么拖出第一列时第二列没有重新调整大小,我认为这是因为该操作不会重排文档。这里有一个更完整的解释:stackoverflow.com/q/37406353/3597276
-
@Dekel:谢谢!将尝试查看是否可以适应 css 网格布局;否则可能不得不切换到使用浮点数。
标签: javascript jquery css resize css-grid