vue和style样式改变

发布于 2022-09-04 14:56:32 字数 3379 浏览 16 评论 0

问题描述:vue+stylus开发中,如何根据计算出的class来写具体的样式?
代码如下,
子组件:

<template>
  <div class="it-alert" :class="[ typeClass ]" v-show="visiable">
    <i class="it-alert_icon" :class="[ iconClass, isBigIcon ]" v-if="showIcon"></i>
    <div class="it-alert_content">
      <span class="it-alert_title" :class="[ isBoldTitle ]" v-if="title">{{title}}</span>
      <p class="it-alert_description">{{description}}</p>
    </div>

    <i class="close"></i>
  </div>

</template>

<script type="text/ecmascript-6">

  const TYPE_CLASSES_MAP = {
    "success" : "icon-check_circle",
    "warning" : "icon-info",
    "error" : "icon-close"
  };

  export default {
    data () {
      return {
        visiable : true
      };
    },
    props : {
      title : {
        type : String,
        default : ""
      },
      description : {
        type : String,
        default : "aaaaa"
      },
      type : {
        type : String,
        default : "info"
      },
      closable : {
        type : Boolean,
        default : true
      },
      closeText : {
        type : String,
        defalut : ""
      },
      showIcon : {
        type : Boolean,
        defalut : false
      }
    },
    computed : {
      typeClass () {
        return `it-alert--${this.type}`;
      },
      iconClass () {
        return TYPE_CLASSES_MAP[this.type] || "it-icon-information";
      },
      isBigIcon () {
        return this.description ? "is-big" : "";
      },
      isBoldTitle () {
        return this.description ? "is-bold" : "";
      }
    }
  };

</script>

<style lang="stylus" rel="stylesheet/stylus">
  .it-alert
    border-radius : 4px
    box-sizing : border-box
    color : #fff
    display : table
    opcaty : 1
    overflow : hidden
    padding : 8px 16px
    position : relative
    transition: opacity 0.2s ease 0s;
    width : 100%
  .it-alert--success
    background : #13ce66
  .it-alert--info
    background : #50bfff
  .it-alert--warning
    background : #f7ba2a
  .it-alert--error
    background : #ff4949
    &.is-big
      font-size : 28px
      weight : 28px
    .it-alert_icon
      color : #fff
      display : table-cell
      font-size :16px
      vertical-align : middle
      width : 20px
    .it-alert_content
      display : table-cell
      padding : 0 8px
      .it-alert_title
        font-size :13px
        line-height : 18px
        &.is-bold
          font-weight : 700
    .it-alert_description
      color : #fff
      font-size: 12px
      margin: 5px 0 0
</style>

父组件:

<template>
  <div class="example">
    <div class="example-demo">
      <alert type="error" title="成功提示的例子title" description="文字说明文字说明文字说明文字说明文字说明文字说明" is-big is-bold show-icon>===</alert>
      <alert type="success" title="成功提示的例子title" description="文字说明文字说明文字说明文字说明文字说明文字说明" show-icon>===</alert>
    </div>
    <div class="example-split"></div>
    <div class="example-code"></div>

  </div>
</template>

根据父组件传入的值的不同,样式层级发生改变了,导致效果不一致。

clipboard.png

想实现的效果是绿色部分的文字也全部是白色的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

氛圍 2022-09-11 14:56:32

为什么你的样式书写的这么凌乱…… 看的眼晕。
看你的html结构it-alert_description不会受type的影响的。
你先把css部分书写规范起来……
然后借助审查元素去排查下样式的问题,最后把审查元素的截图贴出来

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文