css - 可以减少散列循环吗?

标签 css less less-mixins

在开始拍摄我之前,我必须说我对less完全陌生,所以请不要拍摄! :)

我想做的是编写一些类来根据屏幕尺寸对齐文本,而不是手动编写代码,我想使用 less 循环(当然如果可能的话)生成我的类(class)。

所以我想做的是这样的:

.text-sm-left {
    text-align : left;
}

.text-sm-right {
    text-align : right;
}

.text-sm-center {
    text-align : center;
}

.text-sm-justify {
    text-align : justify;
}

但正如我已经说过的,我不喜欢使用手写代码来做到这一点。

那么在less中是否有一种方法可以使用一种数组哈希并循环它以生成所需的代码?

数组哈希应仅包含字符串leftrightcenter, 对齐

如果可能的话,另一个选择是循环遍历我的屏幕尺寸,例如 smmdlg

非常感谢。

最佳答案

最后我找到了解决方案,如下:

@align: left, right, center, justify;

/* Small devices (tablets, 768px and up) */
@media (min-width : @screen-sm-min)
{
    .createMediaQueries(@iterator:1) when (@iterator <= length(@align))
    {
        @direction: extract(extract(@align, @iterator), 1);

        .text-sm-@{direction}
        {
            text-align : @direction !important;
        }

        .createMediaQueries((@iterator + 1));
    }
    .createMediaQueries();
}

/* Medium devices (desktops, 992px and up) */
@media (min-width : @screen-md-min)
{
    .createMediaQueries(@iterator:1) when (@iterator <= length(@align))
    {
        @direction: extract(extract(@align, @iterator), 1);

        .text-md-@{direction}
        {
            text-align : @direction !important;
        }

        .createMediaQueries((@iterator + 1));
    }
    .createMediaQueries();
}

/* Large devices (large desktops, 1200px and up) */
@media (min-width : @screen-lg-min)
{
    .createMediaQueries(@iterator:1) when (@iterator <= length(@align))
    {
        @direction: extract(extract(@align, @iterator), 1);

        .text-lg-@{direction}
        {
            text-align : @direction !important;
        }

        .createMediaQueries((@iterator + 1));
    }
    .createMediaQueries();
}

非常感谢您的关注。

更新

以下是解决我的问题的更好解决方案:

@align: left, right, center, justify;
@screen : @screen-sm-min, @screen-md-min, @screen-lg-min;
@sizes  : sm, md, lg;

.createMediaQueryRules(@mediaIterator:1) when (@mediaIterator <= length(@screen))
{
    @mediaQuery : extract(extract(@screen, @mediaIterator), 1);
    @size : extract(extract(@sizes, @mediaIterator), 1);

    @media (min-width : @mediaQuery)
    {
        .createTextAlignRules(@iterator:1) when (@iterator <= length(@align))
        {
            @direction: extract(extract(@align, @iterator), 1);

            .text-@{size}-@{direction}
            {
                text-align : @direction !important;
            }

            .createTextAlignRules((@iterator + 1));
        }
        .createTextAlignRules();
    }

    .createMediaQueryRules((@mediaIterator + 1));
}
.createMediaQueryRules();

关于css - 可以减少散列循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28367967/

相关文章:

css - 更少的 CSS - 减少重复

javascript - grunt 将所有 less 文件替换为 css 文件

Visual Studio 2010 Express 中的 LESS 支持

html - 对图像使用 CSS 转换 - 无法将中间 DIV 居中

html - 滚动折叠菜单 Bootstrap 内的内容

css - 如何在 Less 中使用逗号传递参数

css - 我可以定义一个 LESS mixin 来生成一个具有可变数量参数的转换属性吗?

css - 您如何编写供多个类使用的 LESS 规则?

html - 如何使 Bootstrap 导航栏居中并具有不响应或静态宽度的特定宽度?

javascript - 设置没有 "px"的元素宽度