Saya memiliki komponen dalam Angular 2 yang disebut my-comp:
<my-comp></my-comp>
Bagaimana satu gaya elemen host komponen ini di Angular 2?
Di Polymer, Anda akan menggunakan pemilih ": host". Saya mencobanya di Angular 2. Tetapi tidak berhasil.
:host {
display: block;
width: 100%;
height: 100%;
}
Saya juga mencoba menggunakan komponen sebagai pemilih:
my-comp {
display: block;
width: 100%;
height: 100%;
}
Kedua pendekatan itu tampaknya tidak berhasil.
Terima kasih.
css
angular
css-selectors
angular-components
Ravi Teja Gudapati
sumber
sumber
my-selector { color : red}
css saya dan berfungsi dengan baik.Jawaban:
Ada bug, tetapi sudah diperbaiki sementara itu.
:host { }
berfungsi dengan baik sekarang.Juga didukung
:host(selector) { ... }
untukselector
mencocokkan atribut, kelas, ... pada elemen host:host-context(selector) { ... }
untukselector
mencocokkan elemen, kelas, ... pada komponen indukselector /deep/ selector
(aliasselector >>> selector
tidak berfungsi dengan SASS) agar gaya cocok dengan batas-batas elemenUPDATE: SASS sudah usang
/deep/
.Angular (TS dan Dart) ditambahkan
::ng-deep
sebagai pengganti yang juga kompatibel dengan SASS.UPDATE2:
::slotted
::slotted
sekarang didukung oleh semua browser baru dan dapat digunakan dengan `ViewEncapsulation.ShadowDomhttps://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
Lihat juga Memuat gaya css eksternal ke dalam Komponen 2 Sudut
/deep/
dan>>>
yang tidak terpengaruh oleh combinators pemilih yang sama yang di Chrome yang usang.Angular mengemulasi (menulis ulang) mereka, dan karenanya tidak bergantung pada browser yang mendukungnya.
Ini juga mengapa
/deep/
dan>>>
tidak bekerja denganViewEncapsulation.Native
yang memungkinkan DOM bayangan asli dan tergantung pada dukungan browser.sumber
@Component({selector: 'some-selector', template: 'xxx', styles: [':host { display: block; background-color: green; border: solid 1px red; }']}) export class SomeClass {}
ViewEncapsularion.Emulated
(default) tetapi tidak denganNative
.:host { p { font-size: 80%; } }
bekerja di ... file component.css. Segera setelah saya mencoba menggunakannya denganstyles: [:host { p { font-size: 80%; } }]
itu tidak lagi berfungsi. Sangat aneh.Saya telah menemukan solusi bagaimana mendesain elemen elemen saja. Saya belum menemukan dokumentasi cara kerjanya, tetapi Anda dapat memasukkan nilai atribut ke dalam direktif komponen, di bawah properti 'host' seperti ini:
UPDATE: Seperti yang dikatakan Günter Zöchbauer, ada bug, dan sekarang Anda dapat menata elemen host bahkan dalam file css, seperti ini:
sumber
!important
untuk menimpanya). Pasti ada waayy yang lebih baik: \host{}
dalamstylesUrl
berkas tidak bekerja. kebutuhan:host
.@HostBinding('style.background-color') private color = 'lime';
Google akan menemukan Anda banyak contoh dan artikel.Lihat masalah ini . Saya pikir bug akan teratasi ketika logika prekompilasi template baru akan diimplementasikan. Untuk saat ini saya pikir yang terbaik yang dapat Anda lakukan adalah membungkus template Anda
<div class="root">
dan gaya inidiv
:Lihat penyedot ini
sumber
Dalam Komponen Anda, Anda dapat menambahkan .class ke elemen host Anda jika Anda ingin memiliki beberapa gaya umum yang ingin Anda terapkan.
sumber
Bagi siapa pun yang ingin menata elemen anak di
:host
sini adalah contoh cara menggunakannya::ng-deep
:host::ng-deep <child element>
misalnya
:host::ng-deep span { color: red; }
Seperti yang orang lain katakan
/deep/
sudah usangsumber
Coba: host> / deep /:
Tambahkan berikut ini ke file parent.component.less
Ganti komponen aplikasi-anak dengan pemilih anak Anda
sumber