CSS网格/Flex调整大小魔术
在过去的几天里,我一直在试图理解CSS flexbox和grid是如何工作的,并试图利用这些知识创建一个特定的UI,但到目前为止还没有成功。我几乎要放弃了 用户界面如下所示:CSS网格/Flex调整大小魔术,css,flexbox,css-grid,Css,Flexbox,Css Grid,在过去的几天里,我一直在试图理解CSS flexbox和grid是如何工作的,并试图利用这些知识创建一个特定的UI,但到目前为止还没有成功。我几乎要放弃了 用户界面如下所示: +----------+-----------------------+---------------------+-----------------+ | CANVAS-1 | DIV-3 | DIV-5 | DIV-7 | |
+----------+-----------------------+---------------------+-----------------+
| CANVAS-1 | DIV-3 | DIV-5 | DIV-7 |
| | | | |
| | | | |
| | | +-----------------+
| | | | DIV-8 |
+----------+-----------------------+---------------------+ |
| CANVAS-2 | DIV-4 | DIV-6 | |
| | | +----------------[4]
| | | | DIV-9 |
| | | | |
| | | | |
+---------[1]---------------------[2]-------------------[3]----------------+
忽略调整大小的功能,我可以设计这个布局没有很多问题。然而,我也不得不允许重新调整,而这正是我在过去两周中惨败的地方。我的限制条件如下:
宽度:100vw,高度:100vh
)DIV-8
的高度应与其内容相等,并且DIV-7/9
应同等占用剩余空间CANVAS-1
和CANVAS-2
的宽度应能保持画布的纵横比(两个画布元素都定义了width=“1242”height=“2208”
属性)300px
[1]
应缩小两个画布,同时保持其纵横比不变。不允许向右拖动超出其初始位置。拖动此行不应影响任何其他网格线[2]
应将网格线向左或向右移动,以便DIV-3/4
的最小宽度不小于400px,DIV-5/6
的最小宽度不小于200px。拖动此线不应影响任何其他网格线[3]
应将网格线向左或向右移动,以便DIV-5/6
的最小宽度不小于200px,而DIV-7/8/9
的最小宽度不小于400px。拖动此线不应影响任何其他网格线[4]
应向上或向下移动DIV-7/8
和DIV-8/9
之间的网格线,这样DIV-8
的高度应保持不变,并且空间将在DIV-7
和DIV-9
之间交换DIV-3/4/5/6/7/8/9
如果内容不完全可见,则应呈现滚动条resize:horizontal/vertical
和网格模板cols:auto/minmax/min content/max content
等,而不使用任何JavaScript谢谢,Asim在单独使用CSS进行了几个小时的尝试(失败)后,我按照@Dai的指示,冒险使用JavaScript。我偶然发现了内森·卡希尔的这座美丽的图书馆。通过为2px宽的水槽引入占位符列,并修改CSS以不使用
auto
units(该库目前不支持),我可以稍微修改我的网格。现在连接它可以让我在任何垂直或水平边上清晰地调整网格的大小
感谢Nathan(如果你看到这篇文章):Re:#4,不要担心
,因为无论如何都必须在JavaScript中设置。当你说“拖动[n]”时,你的意思是在列水槽中会有用户拖动手柄吗?如果是这样的话,那就不是CSSgrid
——事实上,这让它变得非常非常困难,因为现在你必须决定当用户调整列的大小时如何解释用户的意图(例如,“他们想设置固定的像素大小还是百分比大小?”),我使用JavaScript来设置画布的高度和宽度,正如你所说的。在inspector中,第三个反射为元素上的宽度和高度属性。“没有任何JavaScript。”这是不可能的。CSS的resize:
只能用于在px
中设置宽度
和高度
的固定值。它不能用于设置网格:
轨迹、列和行。通过拖动,我指的是设置“溢出:自动;调整大小:水平/垂直”时可见的调整大小手柄。如果我能定义适当的最小-最大或最小-宽度或最大-宽度,我想我可能能够实现这一点。虽然我可能错了。请引导我。