Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检测CSS flex wrap事件

如何检测CSS flex wrap事件
EN

Stack Overflow用户
提问于 2016-10-13 04:41:00
回答 5查看 23.9K关注 0票数 57

我有flex容器,里面有物品。如何检测flex包装事件?我想将一些新的css应用到已经被包装的元素。我认为用纯css检测包装事件是不可能的。但这将是一个非常强大的功能!当元素换行到新的行/行时,我可以尝试通过媒体查询“捕捉”这个断点事件。但这是一种糟糕的方法。我可以尝试通过脚本来检测它,但它也不是很好。

我非常惊讶,但简单的$("#element").resize()不能检测flex容器的高度或宽度变化,从而无法对子元素应用适当的css。LOL。

我发现只有这个jquery代码的例子可以运行jquery event listen on position changed

但还是很可怕。

EN

回答 5

Stack Overflow用户

发布于 2016-10-13 05:57:05

这里有一个潜在的解决方案。您可能还需要检查其他的陷阱和边缘情况。

基本思想是循环遍历flex items,并根据前一个兄弟节点测试它们的top位置。如果top值更大(因此页面更靠下),则项目已换行。

函数detectWrap返回一个已包装的DOM元素数组,可以根据需要设置样式。

理想情况下,该函数可以与ResizeObserver一起使用(同时使用window's resize event作为后备),作为触发器在调整窗口大小时检查换行,或者作为页面中的元素因脚本和其他用户交互而更改。因为StackOverflow代码窗口不会调整大小,所以它在这里不起作用。

这是一个可以调整屏幕大小的CodePen

代码语言:javascript
运行
AI代码解释
复制
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";
  }
};
代码语言:javascript
运行
AI代码解释
复制
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.wrapped {
  background-color: red;
}
代码语言:javascript
运行
AI代码解释
复制
<div>
  <div class="item">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
</div>

票数 24
EN

Stack Overflow用户

发布于 2016-10-13 09:28:10

为此目的,在jQuery上改进了一些代码片段。

代码语言:javascript
运行
AI代码解释
复制
wrapped();

$(window).resize(function() {
   wrapped();
});

function wrapped() {
    var offset_top_prev;

    $('.flex-item').each(function() {
       var offset_top = $(this).offset().top;

      if (offset_top > offset_top_prev) {
         $(this).addClass('wrapped');
      } else if (offset_top == offset_top_prev) {
         $(this).removeClass('wrapped');
      }

      offset_top_prev = offset_top;
   });
}
票数 8
EN

Stack Overflow用户

发布于 2017-10-26 00:07:16

我正在使用一种类似的方法来确定<li>是否包装在将其显示设置为flex<ul>中。

代码语言:javascript
运行
AI代码解释
复制
ul = document.querySelectorAll('.list');

function wrapped(ul) {

    // loops over all found lists on the page - HTML Collection
    for (var i=0; i<ul.length; i++) {

        //Children gets all the list items as another HTML Collection
        li = ul[i].children;

        for (var j=0; j<li.length; j++) {
            // offsetTop will get the vertical distance of the li from the ul.
            // if > 0 it has been wrapped.
            loc = li[j].offsetTop;
            if (loc > 0) {
                li[j].className = 'wrapped';
            } else {
                li[j].className = 'unwrapped';
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40012428

复制
相关文章
【说站】css中flex-wrap属性是什么
2、接受三个值,nowrap默认值、wrap宽度溢出则换行显示、wrap-reverse宽度溢出换行显示。
很酷的站长
2022/11/24
1.7K0
【说站】css中flex-wrap属性是什么
flex布局方法详解之flex-wrap
首先声明,本文参考了阮一峰老师的博客,原文地址:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 本文结合微信小程序 来对flex布局做
剽悍一小兔
2018/06/21
1.5K0
flex-wrap align-content详解
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style type="text/css"> *{ margin: 0; padding: 0;
贵哥的编程之路
2020/10/28
6780
【说站】css Flex容器如何理解
1、使用Flex布局的元素称为Flex容器,简称容器。其所有子元素自动成为容器成员,称为Flex项目,简称项目。
很酷的站长
2022/11/24
3220
【说站】css Flex容器如何理解
flex.css
.flex { display: -webkit-box; display: -webkit-flex; display: flex; }
余生
2018/10/15
7190
【CSS】Flex布局
所有的浏览器目前都支持了Flex布局,除“Webkit ”内核的浏览器需要加如下前缀:
全栈开发日记
2022/05/12
9830
【CSS】Flex布局
CSS Flex 布局
给元素添加display: flex,该元素变成了一个弹性容器(flex container),它的直接子元素变成了弹性子元素(flex item)。
Cellinlab
2023/05/17
1.3K0
CSS Flex 布局
CSS flex笔记
Flex布局 在CSS中是当前最流行的布局方式,并且在移动端以及较新的pc浏览器有着很高的支持度,基本上已经可以完全替代传统的 float, inline-block 各种混合的布局方式了。
雪碧君
2023/02/15
8170
CSS Flex布局
Flex布局是W3C提出的具有强大空间分布和对齐能力的布局方案。到目前为止,得到了所有浏览器的支持。
摸鱼的G
2023/02/22
9660
Flex事件机制(一)
本文介绍了Flex事件机制,分为用户事件和系统事件,以及事件传播的三个阶段:捕获、目标和冒泡。同时,介绍了Flex中监听事件的四种方式:第一种是绑定event属性;第二种是使用事件侦听器;第三种是使用代码动态绑定;第四种是使用创建函数。在实际开发中,我们常用的方式就是第三种和第四种。
高爽
2017/12/28
6130
Flex事件机制(三)
本文通过介绍自定义事件,讲解了在Flex中如何实现事件机制,并利用EventDispatcher类简化了自定义事件的实现。通过一个具体的实例,展示了如何创建一个自定义事件并派发,最后总结了使用自定义事件的好处。
高爽
2017/12/28
8480
Flex事件机制(三)
Flex事件机制(二)
本文介绍了Flex事件机制,以及如何利用自定义事件在父子组件之间传递数据。首先介绍了Flex事件机制,包括Event、EventDispatcher、EventSystem、Bubbling和Capturing。然后通过一个实例,展示了如何在子组件中触发自定义事件,并通过EventDispatcher将数据传递给父组件。父组件使用EventSystem监听子组件触发的事件,然后使用dispatchEvent发送响应事件。最后,总结了使用自定义事件在父子组件之间传递数据的实现方法。
高爽
2017/12/28
6690
FLEX3 里如何导入CSS文件
(3)通过StyleManager.loadStyleDeclarations()方法来进行导入
py3study
2020/01/07
9410
【说站】css中flex布局如何使用
1、flex的使用方法很简单,只需要将其display属性设置为flex就可以,也可以设置行内的flex。
很酷的站长
2022/11/24
1.1K0
【说站】css中flex布局如何使用
CSS之——Flex(二)
Hello小伙伴们,好多天不见,我兔妞又杀回来了!今天继续我们的Flex吧~之前讲的是不是都忘了
萌兔IT
2019/07/25
4030
CSS之——Flex(二)
CSS-flex 布局
原文链接:https://note.noxussj.top/?source=cloudtencent 为什么要使用 flex 布局? flex 布局是目前比较流行的一种布局,因为它十分简单灵活,区区简
菜园前端
2023/04/16
4200
css的flex布局
flex-grow 项目的放大比例,默认为0,即如果存在剩余空间,也不放大
友儿
2022/09/13
5790
CSS之——Flex(一)
Hello小伙伴们,好久不见,想必这段时间连翻的ES6让大家感觉有些烦躁,我们今天再来讲一讲CSS吧!大家听过Flex布局吗?这个可是响应式布局的利器呢~
萌兔IT
2019/07/26
6810
CSS之——Flex(一)
CSS flex 排版与动画 — 重学 CSS
上一部分我们讲到了盒、盒模型和整个正常流中的所有重要知识点和问题。这一部分我们来了解一下 Flex 排版的详细知识。
三钻
2020/10/29
1.4K0
CSS flex 排版与动画 — 重学 CSS
点击加载更多

相似问题

如何检测CSS flex wrap事件

574

使用flex-wrap的CSS flex设计

11

css,如何结合外观和flex-wrap?

131

在react中检测flex wrap/内容溢出

160

Flex-box多线路。如何使用: flex-wrap: wrap?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档