最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 少年啊,使用Less来打造你前端样式的武器库吧! - (1)基础样式篇

    正文概述 掘金(紫菜苔同学)   2020-11-27   599

    我们很多时候会使用一些样式库来快捷实现css样式的使用以及重用, 以此来方便我们开发UI. 但是我们也可以Less来打造自己的前端样式库,作为自己的弹药库方便之后的项目开发.

    下面我们一起来创建一个用于日常项目开发的样式弹药库吧!

    少年啊,来使用Less来打造你前端样式的武器库吧! - (1)基础样式篇

    少年啊,来使用Less来打造你前端样式的武器库吧! - (2)Flex布局篇

    字体大小


    通过创建字体大小的样式可以方便我们快捷设置字体大小,我们可以按照自己的需要使用自定义的字体大小.

    @min-font-size: 10;
    @max-font-size: 80;
    
    .font-size-loop(@n, @i:@min-font-size) when (@i <= @n) {
        .font-size-@{i} {
            font-size: 1px * @i;
        }
        .font-size-loop(@n, (@i + 1));
    }
    
    .font-size-loop(@max-font-size)
    

    我们使用@min-font-size@max-font-size来指定需要生成的最大字体和最小字体,可以通过 1px * @i将对应的index转换为px的单位值,然后通过less来遍历生成我们需要的字体大小样式即可.

    这样我们就可以直接使用font-size-{number}来设置字体大小了

    <div class="font-size-14>屠龙吧,少年</div>
    

    常用字体大小设置


    除了设置自定义字体大小,我们一般需要设置常用字体大小,来保持我们在很多地方的字体大小的一致性.

    @size: small, default, large;
    @font-size-value: 10px, 14px, 18px;
    
    .font-size-iterate(@data, @i: 1) when(@i =< length(@data)) {
        @item: extract(@data, @i);
        @value: extract(@font-size-value, @i);
    
        .font-size-@{item} {
            font-size: @value;
        }
        .font-size-iterate(@data, (@i + 1));
    }
    
    .font-size-iterate(@size);
    

    通过设置了@font-size-keys@font-size-value我们指定了常用的small,default,large三种类型的字体大小,通过less遍历@font-size-keys,然后取出对应的@font-size-value的值即可设置对应类型的字体大小.

    这样我们就可以直接使用font-size-{small | normal | large}来设置字体大小了

    <div class="font-size-small>屠龙吧,少年</div>
    <div class="font-size-default>屠龙吧,中年</div>
    <div class="font-size-large>屠龙吧,老年</div>
    

    字体粗细设置


    我们按照上面的方法可以继续设置字体的粗细.

    // #region font-weight-loop
    @min-font-weight: 100;
    @max-font-weight: 700;
    
    .font-weight-loop(@n, @i: @min-font-weight) when(@i =< @n) {
        .font-weight-@{i} {
            font-weight: @i;
        }
        .font-weight-loop(@n,@i + 100);
    }
    .font-weight-loop(@max-font-weight);
    // #endregion
    
    @weight:  lighter bold bolder;
    
    .font-weight(@data, @i: 1) when(@i =< length(@data)) {
        @item: extract(@data, @i);
    
        .font-weight-@{item} {
            font-weight: @item;
        }
        .font-weight(@data, (@i + 1));
    }
    .font-weight(@weight);
    

    类似之前的方法,我们就得到了font-weight-{number}font-weight-{ lighter | bold | bolder }开设置字体的粗细.

    <div class="font-weight-400>屠龙吧,400</div>
    <div class="font-weight-lighter>屠龙吧,lighter</div>
    

    布局设置(Margin&Padding)


    为了方便使用我们可以设计一个我们习惯的布局样式规则,比如

    {margin|padding}-{direction}-{size}
    
    • 第一位我们表示是使用margin还是padding
    • 第二位我们表示是具体使用Margin或Padding的方向
    • 第三位我们表示是需要设置的大小

    好了,这样我们就可以把常见的Margin或Padding使用统一的方式表示.为了简短我们在样式中把Padding写作p,把Margin写作m,方向我们使用l,r,t,b,x,y,a分别来代表left,right,top,bottom,horizontal,vertical,all.

    // m - margin | p - padding
    // l - left | r - right | t - top | b -bottom | x - horizontal | y - vertical | a - all
    
    .m-l-10		 // margin-left-10px
    .m-y-10		// margin-vertical-10px
    .p-x-10		// margin-horizontal-10px
    .p-a-10		// margin-all-10px
    

    设置好了规则,下来我们就使用less来实现我们的样式库

    @padding-direction: t, b, l, r, x, y;
    @min-padding-value: 1;
    @max-padding-value: 80;
    
    .padding-direction-loop(@data,  @value, @i: 1) when(@i =< length(@data)) {
        @direction: extract(@data, @i);
    
        .p-@{direction}-@{value} when (@direction = l) {
            padding-left: @value * 1px;
        }
    
        .p-@{direction}-@{value} when (@direction = r) {
            padding-right: @value * 1px;
        }
    
        .p-@{direction}-@{value} when (@direction = t) {
            padding-top: @value * 1px;
        }
    
        .p-@{direction}-@{item} when (@direction = b) {
            padding-bottom: @value * 1px;
        }
    
        .p-@{direction}-@{item} when (@direction = x) {
            padding: 0 @value * 1px;
        }
    
        .p-@{direction}-@{item} when (@direction = y) {
            padding: @value * 1px 0;
        }
    
        .padding-direction-loop(@data, @value, (@i + 1));
    }
    
    .padding-loop(@n, @i: @min-padding-value) when(@i =< @n ) {
        .p-a-@{i} {
            padding: 1px * @i;
        }
    
        .padding-direction-loop(@padding-direction, @i);
        .padding-loop(@n, (@i + 1));
    }
    
    .padding-loop(@max-padding-value);
    

    通过设置@min-padding-value@max-padding-value我们设定了具体支持的大小范围.@padding-direction是我们支持的方向,其中a在外侧循环实现了所以没有放在padding-direction-loop中.

    通过padding-direction-loop来生成对应方向的样式,需要注意的是.padding-loop循环嵌套着.padding-direction-loop的循环,其中.padding-loop负责生成每个大小的样式,而padding-direction-loop负责生成了每个方向的样式.

    我们也可以设置一些常用值来保持我们页面中样式的统一性

    @size: small, default, large;
    @padding-direction: t, b, l, r, x, y;
    @padding-value:5px 10px 15px;
    
    .padding-direction-iterate(@data, @item, @value, @i: 1)
        when(@i =< length(@data)) {
        @direction: extract(@data, @i);
    
        .p-@{direction}-@{item} {
            padding-@{direction}: @value;
        }
    
        .p-@{direction}-@{item} when (@direction = l) {
            padding-left: @value;
        }
    
        .p-@{direction}-@{item} when (@direction = r) {
            padding-right: @value;
        }
    
        .p-@{direction}-@{item} when (@direction = t) {
            padding-top: @value;
        }
    
        .p-@{direction}-@{item} when (@direction = b) {
            padding-bottom: @value;
        }
    
        .p-@{direction}-@{item} when (@direction = x) {
            padding: 0 @value;
        }
    
        .p-@{direction}-@{item} when (@direction = y) {
            padding: @value 0;
        }
    
        .padding-direction-iterate(@data,  @item, @value, (@i + 1));
    }
    
    .padding-iterate(@data, @i: 1) when(@i =< length(@data)) {
        @item: extract(@data, @i);
        @value: extract(@padding-value, @i);
    
        .p-a-@{item} {
            padding: @value;
        }
    
        .padding-direction-iterate(@padding-direction, @item, @value);
        .padding-iterate(@data, (@i + 1));
    }
    
    .padding-iterate(@size);
    

    我们使用了上面类似的方法,不过我们没有设置大小的范围,而是使用small, default, large来设置了三组默认只尺寸,这样我们在页面中可以使用到统一大小的布局样式.

    .p-x-small
    .p-a-large
    .p-r-default
    

    我们对margin也进行添加类似的操作,就可以实现我们之前设计的样式规则.

    @size: small, default, large;
    @margin-direction: t, b, l, r, x, y;
    @margin-value:5px 10px 15px;
    
    .margin-direction-iterate(@data, @item, @value, @i: 1)
        when(@i =< length(@data)) {
        @direction: extract(@data, @i);
    
        .m-@{direction}-@{item} {
            margin-@{direction}: @value;
        }
    
        .m-@{direction}-@{item} when (@direction = l) {
            margin-left: @value;
        }
    
        .m-@{direction}-@{item} when (@direction = r) {
            margin-right: @value;
        }
    
        .m-@{direction}-@{item} when (@direction = t) {
            margin-top: @value;
        }
    
        .m-@{direction}-@{item} when (@direction = b) {
            margin-bottom: @value;
        }
    
        .m-@{direction}-@{item} when (@direction = x) {
            margin: 0 @value;
        }
    
        .m-@{direction}-@{item} when (@direction = y) {
            margin: @value 0;
        }
    
        .margin-direction-iterate(@data,  @item, @value, (@i + 1));
    }
    
    .margin-iterate(@data, @i: 1) when(@i =< length(@data)) {
        @item: extract(@data, @i);
        @value: extract(@margin-value, @i);
    
        .m-a-@{item} {
            margin: @value;
        }
    
        .margin-direction-iterate(@margin-direction, @item, @value);
        .margin-iterate(@data, (@i + 1));
    }
    
    .margin-iterate(@size);
    
    // #endregion;
    
    
    @margin-direction: t, b, l, r, x, y;
    @min-margin-value: 1;
    @max-margin-value: 80;
    
    .margin-direction-loop(@data,  @value, @i: 1) when(@i =< length(@data)) {
        @margin: extract(@data, @i);
    
        .m-@{direction}-@{value} when (@direction = l) {
            margin-left: @value * 1px;
        }
    
        .m-@{direction}-@{value} when (@direction = r) {
            margin-right: @value * 1px;
        }
    
        .m-@{direction}-@{value} when (@direction = t) {
            margin-top: @value * 1px;
        }
    
        .m-@{direction}-@{item} when (@direction = b) {
            margin-bottom: @value * 1px;
        }
    
        .m-@{direction}-@{item} when (@direction = x) {
            margin: 0 @value * 1px;
        }
    
        .m-@{direction}-@{item} when (@direction = y) {
            margin: @value * 1px 0;
        }
    
        .margin-direction-loop(@data, @value, (@i + 1));
    }
    
    .margin-loop(@n, @i: @min-margin-value) when(@i =< @n ) {
        .m-a-@{i} {
            margin: 1px * @i;
        }
    
        .margin-direction-loop(@margin-direction, @i);
        .margin-loop(@n, (@i + 1));
    }
    
    .margin-loop(@max-margin-value);
    // #endregion
    

    好了,这样我们就拥有了一套基础的样式库,方便我们在项目中快速开发,使用Sass也是类似的实现逻辑,只需要按对应的函数进行实现就好.



    起源地下载网 » 少年啊,使用Less来打造你前端样式的武器库吧! - (1)基础样式篇

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元