>  기사  >  웹 프론트엔드  >  동적 주입을 위한 내장 기능이 없다면 LESS에서 동적 속성 이름을 어떻게 사용할 수 있습니까?

동적 주입을 위한 내장 기능이 없다면 LESS에서 동적 속성 이름을 어떻게 사용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 08:30:03950검색

How can you use dynamic property names in LESS, given that it doesn't have a built-in feature for dynamic injection?

LESS에서 동적 속성 및 속성 이름 보간 사용

CSS SASS와 같은 일부 프로그래밍 프레임워크는 @ 구문을 사용하여 속성 이름의 동적 삽입을 지원합니다. 속성의 이름과 값을 선택기에 삽입할 수 있습니다. 여러 규칙에 걸쳐 공통 속성을 재정의하고, 변환을 적용하고, 직접 선언하지 않고도 복잡한 스타일을 관리할 수 있는 좋은 방법입니다.

안타깝게도 LESS에는 이러한 기능이 없지만 다양한 매개변수 혼합 조합을 사용하여 몇 가지 해결 방법을 제공합니다. -ins, 변수 주입(e() 함수) 및 패턴 일치(@{ }) 구문.

옵션 1: e() 함수를 사용하여 속성 이름 주입

이 방법에는 동적으로 생성된 속성 이름을 다른 속성의 값에 삽입하는 작업이 포함됩니다. 비정상적이지만 작업은 수행됩니다.

.vendors(@property, @value...){
    -webkit-@{e(@property)}: @value;
       -moz-@{e(@property)}: @value;
        -ms-@{e(@property)}: @value;
         -o-@{e(@property)}: @value;
            @{e(@property)}: @value;
}

옵션 2: 다음 클래스 이름에 속성 주입(v1.3.3 미만)

이 방법에는 공급업체 정의가 포함됩니다. 혼합한 다음 공급업체 속성을 포함하는 가상 클래스/규칙 세트를 구성합니다. 그런 다음 ~ 구문을 사용하여 두 공급업체 블록을 함께 바인딩하는 다음 클래스가 구성됩니다.

.vendors(@property, @value, @rest:"") {
    @inject:~"@{rest} -webkit-@{property}: @{value}; -moz-@{property}: @{value}; -ms-@{property}: @{value}; -o-@{property}: @{value}; @{property}: @{value};";
}

.test(@nextclass){
    .vendors(transform, "matrix(2,0,0,2,20,20)");
    .vendors(transform-origin,"10px 10px", @inject);
    (~"{@{inject}} .@{nextclass}"){/*next class properties*/};
}

.this-class{
    .test(next-class);
}

옵션 3: 재귀를 사용하여 속성 주입(v1.4.0 미만)

이 방법은 v1.4를 덜 사용할 때 이전 방법의 제한 사항을 해결하며 재귀를 도입하여 공급업체 블록을 구성하고 이를 최종 변수에 삽입합니다.

@nl: `"\n\t"`; 

.multi(@props,@vals,@i,@inj) {
    @property: extract(@props, 1);
    @value: extract(@vals, 1);
    @inject:~"@{inj}@{nl}-webkit-@{property}: @{value};@{nl}-moz-@{property}: @{value};@{nl}-ms-@{property}: @{value};@{nl}-o-@{property}: @{value};@{nl}@{property}: @{value};";
}

.multi(@props,@vals,@i,@inj:"") when (@i > 0) {
    @property: extract(@props, @i);
    @value: extract(@vals, @i);
    @injnext:~"@{inj}@{nl}-webkit-@{property}: @{value};@{nl}-moz-@{property}: @{value};@{nl}-ms-@{property}: @{value};@{nl}-o-@{property}: @{value};@{nl}@{property}: @{value};";
    .multi(@props,@vals,(@i - 1),@injnext);
}

@properties: "transform-origin" "transform";
@values: "10px 10px" "matrix(2,0,0,2,20,20)";

@p: ~"@{nl}width:20px; @{nl}height:12px; @{nl}background-color:#000;";

.this-class {
    .multi(@properties,@values,2,@p);
    @inj: ~"{@{inject}`'\n'`} `'\n'`.next-class ";
    @{inj} {/**/}
}

이러한 해결 방법은 동적 속성을 생성하는 방법을 제공합니다. 다른 프레임워크의 내장 기능을 사용하는 것만큼 우아하지는 않지만 LESS의 이름입니다. LESS 1.6이 출시되면서 동적 속성 이름 보간이 구현되어 이 프로세스가 훨씬 간단해졌습니다. 구문은 속성 이름에 @{ }를 사용하는 옵션 2와 유사합니다.

위 내용은 동적 주입을 위한 내장 기능이 없다면 LESS에서 동적 속성 이름을 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.