我有flex容器里面有物品.如何检测flex wrap事件?我想对包装的元素应用一些新的CSS.我想这是不可能通过纯CSS检测wrap事件.但这将是非常强大的功能!当元素包裹到新行/行中时,我可以尝试通过媒体查询“捕获”这个断点事件.但这是一个可怕的做法.我可以尝试通过脚本检测它,但它也不是很好.
我非常惊讶,但简单的$(“#element”).resize()不能检测flex容器的高度或宽度更改,以将适当的CSS应用于子元素.大声笑.
我发现只有这个jquery代码的例子才行
jquery event listen on position changed
但还是非常可怕
解决方法
这是一个潜在的解决方案.可能还有其他问题需要检查.
基本思想是循环弹性项目,并测试他们的顶部位置与以前的兄弟姐妹.如果顶部值较大(因此进一步下降页面),则该项目已包装.
函数detectWrap返回一个已经包装的DOM元素的数组,并且可以根据需要用于样式.
该功能可以与window.resize一起使用,以便在窗口调整大小时检测包装.因为StackOverflow代码窗口没有调整大小,所以它不会在这里工作.
这是一个CodePen,适用于屏幕调整大小.
- var detectWrap = function(className) {
- var wrappedItems = [];
- var prevItem = {};
- var currItem = {};
- var items = document.getElementsByClassName(className);
- for (var i = 0; i < items.length; i++) {
- currItem = items[i].getBoundingClientRect();
- if (prevItem && prevItem.top < currItem.top) {
- wrappedItems.push(items[i]);
- }
- prevItem = currItem;
- };
- return wrappedItems;
- }
- window.onload = function(event){
- var wrappedItems = detectWrap('item');
- for (var k = 0; k < wrappedItems.length; k++) {
- wrappedItems[k].className = "wrapped";
- }
- };
- div {
- display: flex;
- flex-wrap: wrap;
- }
- div > div {
- flex-grow: 1;
- flex-shrink: 1;
- justify-content: center;
- background-color: #222222;
- padding: 20px 0px;
- color: #FFFFFF;
- font-family: Arial;
- min-width: 300px;
- }
- div > div.wrapped {
- background-color: red;
- }
- <div>
- <div class="item">A</div>
- <div class="item">B</div>
- <div class="item">C</div>
- </div>