美文网首页
Vue在列表的动态渲染(scss实现)

Vue在列表的动态渲染(scss实现)

作者: 冷鸢J | 来源:发表于2018-06-03 18:50 被阅读0次

在工作中遇到如图所示的一个需求


效果图

分析之后明显可以看出,右边的label和数字都可以通过v-for中动态设置内容来实现,但是图片的变换就没有办法直接实现,最开始尝试的是设置class,但是Vue不支持通过v-for循环动态设置class,除非在class中一个一个去设置
background-position,但是这样的话代码复用率就有点低,考虑之后使用了scss中的循环+子类选择器来做

html:

  <section class="content-info">
        <div v-for="(item,i) in content_list" :key="i" class="content-info-item">
          <p>{{item.title}}</p>
          <strong>
            355.2
          </strong>
        </div>
  </section>

scss:

 .content-info {
            display: flex;
            justify-content: space-between;
            .content-info-item {
                background-color: #fff;
                position: relative;
                padding: 20px 20px 20px 80px;
                flex: 1;
                > p {
                    padding-bottom: 10px;
                }
                > strong {
                    color: $base-color;
                    font-size: 1.5em;
                }

                &::before {
                    content: "";
                    display: block;
                    width: 60px;
                    margin: 20px 0;
                    height: 60px;
                    background-color: #f00;
                    position: absolute;
                    left: 10px;
                    top: 0;
                    background: url("../../assets/images/titlenav.png")
                        no-repeat 0 0;
                    background-size: cover;
                }
                //实现循环的主要逻辑
                @for $i from 1 to 10 {
                    &:nth-child(#{$i})::before {
                        background-position-y: #{(1-$i) * 65}px;
                    }
                }
            }

            .content-info-item:nth-child(n + 2) {
                margin-left: 1%;
            }
        }
        .content-item:nth-child(n + 2) {
            margin-left: 10px;
        }

几个知识点

  • 同级选择器,或者叫父类选择器&,效果是选到上一层
    &::before就等同于.content-info-item::before
  • 直接子类选择器>,注意>之后必须跟一个空格
  • for循环 @for $i from a to b,获取i的值用的是#{$i}

相关文章

网友评论

      本文标题:Vue在列表的动态渲染(scss实现)

      本文链接:https://www.haomeiwen.com/subject/kyzjsftx.html