- 此问题在此处已有答案**:
Change the number of columns and rows in a grid as the number of items increase(1个答案)
4天前关闭。
我是html和css的新手,我想创建一个函数,给定一个1到9之间的数k,在容器div中会显示k个div。但是,块的排列会随着k的不同而变化。例如,当k = 4时,排列将是2x2,而当k = 6时,排列将是3x2。所有排列都可以在下图中看到。
有什么方法可以根据div的数量调整排列吗?我想我应该使用flexbox for css,但是不知怎么的,我找不到容器的正确配置。
3条答案
按热度按时间bgibtngc1#
下面是一个使用
display: grid;
和:has()
CSS伪类的纯CSS解决方案。使用:has()
,我们可以根据元素的子元素数来应用样式:只有当
id="container"
包含至少3个子元素时,上述样式才适用于该元素。JS Fiddle
(JavaScript仅用于将div添加到容器中以供演示)
资料来源:
介绍如何根据元素的子元素计数设置元素样式的文章:https://www.matuzo.at/blog/2022/counting-children/
:has()
CSS伪类:https://developer.mozilla.org/en-US/docs/Web/CSS/:hasdwthyt8l2#
有一个纯CSS解决方案比
has
(https://caniuse.com/?search=has)具有更好的浏览器支持。当父对象的样式需要依赖于它拥有的子对象时,就需要使用
has
了。在这种情况下,你可以根据子对象的兄弟数量来设置它们自己的样式。你可以使用flexbox,或者更老的东西,比如floats(我想你也可以使用grid,但是我还没有坐下来弄清楚具体是怎么做的)。你要做的是通常规划三列,强制条目的宽度为1/3(根据你的设计,你可能需要一些小技巧来允许边距),然后在少于五个条目的情况下覆盖它。
从本质上讲,这些
nth-child
选择器是在说“如果从开始数起的第一个项目也是从结束数起的第四个项目,那么肯定有四个项目”。在@Dimitris Maragkos分享的文章(https://alistapart.com/article/quantity-queries-for-css/)的链接中有对这种技术的完整解释。如果你想测试的话,我已经把所有这些都放在https://codepen.io/jonedge/pen/abapJEK的笔里了,注意我在这里使用了一个
child
类来提高可读性,但是当使用flex和grid时,我通常推荐使用.parent > *
来选择flex/grid容器的所有直接子容器。fhity93d3#
使用提交和重置
Buttons
为K
值创建Input
,创建div
容器.wrapper
。CSS:
给我的容器400x400大小。声明一个:root
变量--width:50%;
,用于设置将通过JS
生成的单个框的宽度。JS:
在submit
按钮上添加EventListener
。我要做的第一件事是获取input(K)的值。设置if条件以检查用户是否已经生成任何divs
,如果已经生成,我将使用innerHTML = ""
删除 Package 器内的所有内容设置另一个if来检查数字是否大于4,然后通过将
:root
中的变量值更改为"--width:33%",使每个框的大小为33%,以满足我们的3x3要求。在
for loop
内循环以创建我们的盒子。盒子将生成(k)Times
。在createBox
内添加html并在wrapper
内添加它。我希望你理解。如果你有任何问题请问。