SASS Интерполяция в цикле, преобразовывающая приращение в строку - PullRequest
0 голосов
/ 23 октября 2018

У меня есть цикл SASS для создания некоторых служебных классов:

@for $i from 1 through 10 {
    &border-white-#{($i * 10)} {
        border-color: color($color-white, #{$i / 10});
    }
}

Эта цветовая функция устанавливает альфа-значение RGBA, но в настоящее время SASS говорит, что альфа-значение должно быть целым числом, а строкапри условии.

При проверке type_of значения отображается строка.

Как преобразовать это интерполированное значение в целое число?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Удалить # {} внутри цвета "($ color-white, # {$ i / 10});" .В этом нет необходимости, поскольку вы не выводите это значение в собственную функцию CSS.Я бы также предложил использовать sassmeister.com для быстрой отладки Sass.

Допущения в этом ответе:

  • Функция Color - это ваша пользовательская функция sass, которая используетФункция Sass RGBA.
0 голосов
/ 23 октября 2018

У меня есть следующая функция, которая должна преобразовать строку в целое число.Кажется, эта функция взята из: https://codepen.io/corysimmons/pen/mVLVbo. Тем не менее, она написана на scss, поэтому вам, возможно, все же придется решить некоторые проблемы:

@function number( $value ) {
    @if type-of( $value ) == 'number' {
        @return $value;
    } @else if type-of( $value ) != 'string' {
        $_: log( 'Value for `to-number` should be a number or a string.' );
    }

    $result: 0;
    $digits: 0;
    $minus: str-slice( $value, 1, 1 ) == '-';
    $numbers: ( '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9 );

    @for $i from if( $minus, 2, 1 ) through str-length( $value ) {
        $character: str-slice( $value, $i, $i) ;

        @if not ( index( map-keys( $numbers ), $character ) or $character == '.') {
            @return to-length( if( $minus, -$result, $result ), str-slice( $value, $i ) )
        }

        @if $character == '.' {
            $digits: 1;
        } @else if $digits == 0 {
            $result: $result * 10 + map-get( $numbers, $character );
        } @else {
            $digits: $digits * 10;
            $result: $result + map-get( $numbers, $character ) / $digits;
        }
    }

    @return if( $minus, -$result, $result );
}

Однако, как указано.Вы уже работаете с целыми числами, но преобразуете его в строку #{$i / 10}.

Просто попробуйте повторить то, что вы уже сделали.

&border-white-#{($i * 10)} {
     border-color: color($color-white, ($i / 10));
}

Проблема, однако, может бытьчто RGBA() ожидает . нотное значение, например: rgba(255, 255, 255, .5)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...