首页 > 其他分享 >css 自定义动态排列

css 自定义动态排列

时间:2023-07-12 15:33:54浏览次数:53  
标签:排列 自定义 nth 头像 宽度 item child parseInt css

需求就是显示一批头像,正常排列,很简单吧!

用弹性盒子再加上允许换行,就解决了吗?问题是:头像之间有间隔,就需要加margin-right,问题来了本行最后一个盒子的空隙大了,正好能放下一个头像,这时肯定去掉margin.(这里设定最后一个盒子空隙大,当然也可能正好或者多一点点)。

头像容器宽度不确定,头像个数不确定,就需要计算了

  nthChild(nodeList, selector) {
      var ret = [],
        reg = /(-?\d*)[n]*([+-]\d+)*/,
        m = selector.match(reg);
      if (selector === m[1]) {
        // nth-child:(2) - 纯数字,直接返回
        return [nodeList[parseInt(m[1]) - 1]];
      }
      var filter = function (i) {
        ++i; //nth从1开始, elem从0开始,elem的index要+1
        if (m[2]) {
          // 类似:nth-child:(-2n-1) / nth-child(n+2)
          if ("" === m[1]) {
            // nth-child(n+2)
            m[1] = 1;
          } else if ("-" === m[1]) {
            // nth-child(-n+2)
            m[1] = -1;
          } // else nth-child(-2n-1) / nth-child(2n+10)
        } else {
          // nth-child:(2n)
          m[2] = 0;
        }
        var n = (i - parseInt(m[2])) / parseInt(m[1]);
        // 正整数返回true
        return n === parseInt(n) && n >= 0 ? true : false;
      };
      function each(obj, fn) {
        var i = 0,
          len = obj.length,
          val;
        for (; i < len; i++) {
          val = fn.call(obj[i], i, obj[i]);
          if (val === false) break;
        }
      }
      each(nodeList, function (i) {
        //each 方法需要单独写
        if (filter(i)) {
          ret.push(this);
        }
      });
      return ret;
    }



let width = this.$refs.stus.offsetWidth % 100;   //剩余宽度(最后一个盒子空隙) = 头像容器宽度 % 头像宽度(包含margin)

let num = width >= 60 ? parseInt(stus / 100) + 1 : parseInt(stus / 100); //一行显示头像的数量 = 如果剩余宽度大于等于60(头像宽度,不包括maigin)就是容器宽度除以头像宽度+1;
//如果剩余宽度小于60,则容器宽度除以头像宽度;
let stu_item = this.$refs.stu_item;   //所有头像的dom集合

var list = this.nthChild(stu_item, num + "n"); //计算出一行中最后一个dom
list.forEach((item) => {
item.style.marginRight = "0";
});

 

标签:排列,自定义,nth,头像,宽度,item,child,parseInt,css
From: https://www.cnblogs.com/guozhongbo/p/17547608.html

相关文章

  • 通过自定义指令控制按钮权限
    目录常见写法自定义指令小试牛刀常见写法通常控制按钮显示与否,会采用v-if或者v-show来控制,可能会写成以下形式,在通过动态的改变active变量的值,控制按钮的显示状态,<template><div><buttonv-if="(active='1')">按钮一</button><buttonv-else-if="(active='......
  • springboot 自定义整合caffeine 本地缓存
    1、自定义缓存配置类@Data@ConfigurationProperties(prefix="page.cache")publicclassPageCacheProperties{privateCaffeineConfigPropertiescaffeine=newCaffeineConfigProperties();//本地缓存配置privatePageCacheAsyncExecutorConfigpool=newP......
  • vue3自定义指令 拖拽 与拖拽变大小
    directives:{drag:{mounted:(el,binding)=>{constdragDom=el;conststy=dragDom.currentStyle||window.getComputedStyle(dragDom,null);el.parentElement.style.cursor='move';......
  • 基于JavaFX的扫雷游戏实现(五)——设置和自定义控件
      它来了它来了,最后一期终于来了。理论上该讲的全都讲完了,只剩下那个拖了好几期的自定义控件和一个比较没有存在感的设置功能没有讲。所以这次就重点介绍它们俩吧。  首先我们快速浏览下设置的实现,上图:  然后是控制器代码:SettingsController.javapackagecontrollers;......
  • css实现自动适配移动端的效果
    css实现自动适配移动端的效果使用的库使用到的库lib-flexible使用方法使用script标签引入<scriptsrc="http://g.tbcdn.cn/mtb/lib-flexible/{{version}}/??flexible_css.js,flexible.js"></script>使用注意事项!!!使用前必须要清掉html中的以下标签代码,不然生效不了......
  • React中编写操作树形数据的自定义Hook
    什么是Hookhook即为钩子,是一种特殊的函数,它可以让你在函数式组件中使用一些react特性,目前在react中常用的hook有以下几类useState:用于在函数组件中定义和使用状态(state)。useEffect:用于在函数组件中处理副作用,也可以模拟react生命周期useContext:用于在函......
  • 爬取新闻 ,bs4, css选择器,selenium基本使用
    目录1爬取新闻2bs4介绍遍历文档树3bs4搜索文档树3.2其他用法4css选择器5selenium基本使用5.1模拟登录百度6selenium其他用法6.1无头6.2搜索标签1爬取新闻#1爬取网页---requests#2解析 ---xml格式,用了re匹配的 ---html,bs4,lxml。。。---json: -python......
  • 判断是否是完全平方数[容易]和排列箱子[容易]
    1.1.1. 完全平方数(PerfectSquare)判断正整数y是否是完全平方数。如果能找到正整数x,使得x*x==y,则y是平方数。1. 思路条件处理x*x>y丢弃右半部分x*x==yy是完全平方数x*x<y丢弃左半部分x的取值范围是[1,y],我们用左闭右开空间,就是[1,y+1)。......
  • mapbox添加自定义控件
    需要定义一个类,然后至少重写实现onAdd、onRemove方法,示例如下<template><divref="changeViewRef"@click="changeView"class="changeViewmapboxgl-ctrl"><el-tooltipclass="box-item"effect="dark"......
  • 自定义筛选AutoFilter
    AutoFilter语法:expression.AutoFilterVBA直接输入这个是在自动筛选和关闭来回切换。AutoFilter.FilterMode属性如果工作表处于自动筛选筛选器模式,则返回 True。只读 Boolean。表达 一个代表 AutoFilter 对象的变量。语法:expression.FilterModee.g:SubClearFilter()......