美文网首页Web前端之路
用一个类让你理解 CSS `flex` 属性

用一个类让你理解 CSS `flex` 属性

作者: 一半晴天 | 来源:发表于2018-06-01 15:21 被阅读47次

    在 Flexbox 布局中 flex 属性是一个复合属性。
    也就是对于 flex-grow,flex-shrinkflex-basis 的简写。我发现不少人包括我有时容易对 flex 属性设置的值记不太清它们的对应关系。今天看了下文档 flex property
    总结出如下一个类的构造描述。希望可以帮助到大家。

    class flex {
      flexGrow: number;
      flexShrink: number;
      flexBasis: number | string;
      constructor() {
        // 开始设置为默认值
        this.flexGrow = 0;
        this.flexShrink = 1;
        this.flexBasis = "auto";
        const arg1 = arguments[0];
        const arg2 = arguments[1];
        const arg3 = arguments[1];
        switch (arguments.length) {
          case 1:
            // 当只有一个参数时。 即 flex : auto  等。
            if (arg1 === "auto") {
              this.flexGrow = 1;
            } else if (arg1 === "initial") {
              // 默认
            } else if (arg1 === "none") {
              this.flexShrink = 0;
            } else if (typeof arg1 === "number") {
              // 如果是一个数字
              this.flexGrow = arg1;
            } else {
              this.flexBasis = arg1;
            }
            break;
          case 2:
            this.flexShrink = arg1;
            if (typeof arg2 === "number") {
              this.flexGrow = arg2;
            } else {
              this.flexBasis = arg2;
            }
            break;
          case 3:
            this.flexGrow = arg1;
            this.flexShrink = arg2;
            this.flexBasis = arg3;
            break;
          default:
            // error
            break;
        }
      }
    }
    // 把 flex: auto 想像成  flex("auto")
    // const f1 = flex("auto");
    // assert(f1.flexGrow === 1)
    

    相关文章

      网友评论

        本文标题:用一个类让你理解 CSS `flex` 属性

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