css 里面写if else 条件判断

  • 定义时使用 @mixin name(params) 声明

  • 调用时通过 @include name(args) 引入样式

  • mixins.scss文件中:

    复制代码
    @import './variables.scss';
    
    // 弹性布局
    @mixin flex($direction: row, $justify: flex-start, $align: stretch, $wrap: nowrap) {
      display: flex;
      flex-direction: $direction;
      justify-content: $justify;
      align-items: $align;
      flex-wrap: $wrap;
    }
    
    // 居中对齐
    @mixin flex-center {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    // 两端对齐
    @mixin flex-between {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
    
    // 文本截断
    @mixin text-truncate {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    
    // 多行文本截断
    @mixin text-truncate-multiline($lines: 2) {
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: $lines;
      -webkit-box-orient: vertical;
    }
    
    // 响应式布局
    @mixin responsive($breakpoint) {
      @if $breakpoint == sm {
        @media (min-width: $breakpoint-sm) { @content; }
      } @else if $breakpoint == md {
        @media (min-width: $breakpoint-md) { @content; }
      } @else if $breakpoint == lg {
        @media (min-width: $breakpoint-lg) { @content; }
      } @else if $breakpoint == xl {
        @media (min-width: $breakpoint-xl) { @content; }
      }
    }
    
    // 状态颜色
    @mixin status-color($status) {
      @if $status == 'normal' or $status == '正常' {
        background-color: $color-success;
        color: $color-white;
      } @else if $status == 'warning' or $status == '警告' {
        background-color: $color-warning;
        color: $color-dark;
      } @else if $status == 'error' or $status == '异常' {
        background-color: $color-danger;
        color: $color-white;
      } @else {
        background-color: $color-secondary;
        color: $color-white;
      }
    } 

    引用的vue文件:

    复制代码
    <template>
      <div class="switch-node">
        <!-- 交换机图标和名称 -->
        <div class="d-flex align-items-center mb-2">
          <div class="switch-node__icon">
            <svg class="switch-node__icon-svg" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" />
            </svg>
          </div>
          <div class="switch-node__content">
            <p class="switch-node__title" :title="nodeData.label">
              {{ nodeData.label }}
            </p>
            <p class="switch-node__subtitle">
              {{ nodeData.district }}
            </p>
          </div>
        </div>
        
        <!-- 状态指示器 -->
        <div class="switch-node__footer">
          <span>状态:</span>
          <span class="switch-node__status" :class="statusClass">
            <span class="switch-node__status-indicator"></span>
            {{ nodeData.status }}
          </span>
        </div>
        
        <!-- 设备计数指示器 -->
        <div class="switch-node__devices">
          设备: {{ nodeData.devices ? nodeData.devices.length : 0 }}
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'SwitchNode',
      props: {
        nodeData: {
          type: Object,
          required: true
        }
      },
      computed: {
        statusClass() {
          switch(this.nodeData.status) {
            case '正常': return 'status-normal';
            case '警告': return 'status-warning';
            case '异常': return 'status-error';
            default: return '';
          }
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    @import '@/assets/styles/variables.scss';
    @import '@/assets/styles/mixins.scss';
    
    .status-normal {
      @include status-color('正常');
    }
    
    .status-warning {
      @include status-color('警告');
    }
    
    .status-error {
      @include status-color('异常');
    }
    </style> 
相关推荐
snow@li11 分钟前
前端:前端/浏览器 可以录屏吗 / 实践 / 录制 Microsoft Edge 标签页、应用窗口、整个屏幕
前端·浏览器录屏·前端录屏·web录屏
李贺梖梖17 分钟前
CSS学习
前端·css
蚂小蚁25 分钟前
一文吃透:宏任务、微任务、事件循环、浏览器渲染、Vue 批处理与 Node 差异(含性能优化)
前端·面试·架构
狼性书生38 分钟前
uniapp实现的Tab 选项卡组件模板
前端·uni-app·vue·组件·插件
吃饺子不吃馅42 分钟前
前端画布类型编辑器项目,历史记录技术方案调研
前端·架构·github
拜晨1 小时前
使用motion实现小宇宙贴纸墙效果
前端·交互设计
拜晨1 小时前
使用motion实现小宇宙节目广场的效果
前端·交互设计
知花实央l2 小时前
【Web应用实战】 文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)
前端·学习·网络安全·安全架构
华仔啊2 小时前
JavaScript + Web Audio API 打造炫酷音乐可视化效果,让你的网页跟随音乐跳起来
前端·javascript