Bagaimanakah anda boleh menggunakan nama sifat dinamik dalam LESS, memandangkan ia tidak mempunyai ciri terbina dalam untuk suntikan dinamik?

Susan Sarandon
Lepaskan: 2024-11-07 08:30:03
asal
949 orang telah melayarinya

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

Menggunakan sifat dinamik dan interpolasi nama sifat dalam KURANG

Sesetengah rangka kerja pengaturcaraan seperti CSS SASS menyokong suntikan dinamik nama sifat menggunakan sintaks @, membolehkan anda menyuntik nama dan nilai sifat ke dalam pemilih. Ini cara yang bagus untuk mengatasi sifat biasa merentas berbilang peraturan, menggunakan perubahan dan mengurus gaya kompleks tanpa mengisytiharkannya secara langsung.

Malangnya, LESS tidak mempunyai ciri sedemikian, tetapi ia menawarkan beberapa penyelesaian menggunakan pelbagai gabungan campuran parametrik -in, suntikan berubah (fungsi e()) dan sintaks padanan corak (@{ }).

Pilihan 1: Menggunakan Fungsi e() untuk Menyuntik Nama Harta

Kaedah ini melibatkan menyuntik nama hartanah yang dicipta secara dinamik ke dalam nilai harta lain. Walaupun tidak sopan, ia berfungsi.

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

Pilihan 2: Menyuntik Sifat ke dalam Nama Kelas Mengikuti (Kurang v1.3.3)

Kaedah ini melibatkan penentuan vendor campurkan dan kemudian bina kelas/set peraturan maya yang merangkumi sifat vendor. Kelas seterusnya kemudiannya dibina menggunakan sintaks ~ untuk mengikat dua blok vendor bersama-sama.

.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);
}
Salin selepas log masuk

Pilihan 3: Menyuntik Sifat menggunakan Rekursi (Kurang v1.4.0 )

Kaedah ini menangani had yang sebelumnya apabila menggunakan kurang v1.4 , memperkenalkan rekursi untuk membina blok vendor dan menyuntiknya ke dalam pembolehubah akhir.

@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} {/**/}
}
Salin selepas log masuk

Penyelesaian ini menyediakan cara untuk mencipta sifat dinamik nama dalam LESS, walaupun ia tidak seanggun menggunakan ciri terbina dalam rangka kerja lain. Dengan keluaran LESS 1.6, interpolasi nama sifat dinamik telah dilaksanakan, menjadikan proses ini lebih mudah. Sintaks adalah serupa dengan Pilihan 2, menggunakan @{ } untuk nama sifat.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menggunakan nama sifat dinamik dalam LESS, memandangkan ia tidak mempunyai ciri terbina dalam untuk suntikan dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!