2016-02-08 32 views
11

È possibile modificare lo stile degli pseudo elementi utilizzando [style] o [ngStyle] in angular2?Cambia stile di pseudo elementi in angular2

per ottenere un effetto di sfocatura su un div che si comporta come una sovrapposizione e dovrei impostare l'immagine di sfondo sullo pseudo elemento.

ho provato qualcosa di simile

<div class="blur" [style.before.backgroundImage]="'url('+ featuredImage[i] + ')'"> 

non ha funzionato. Ho anche provato questo

<div class="blur" [ngStyle]="'{:before{ background-image:url('+ featuredImage[i] + ')}}'"> 

risposta

7

No, non è possibile. In realtà non è un problema angolare: gli pseudo elementi non fanno parte dell'albero DOM e, a causa di ciò, non espongono alcuna API DOM che possa essere utilizzata per interagire con essi.

L'approccio abituale se si desidera gestire pseudo elementi a livello di codice è indiretto: si aggiunge/rimuovi/modifica classe e in CSS questa classe influenza lo pseudoelemento corrispondente. Quindi nel tuo caso si potrebbe avere una classe più che cambia stile necessaria:

.blur:before {/* some styles */} 
.blur.background:before {/* set background */} 

Ora tutto quello che dovete fare è quello di attivare .background classe sull'elemento quando è necessario before pseudo-elemento per ottenere uno sfondo. È possibile utilizzare NgClass, ad esempio.

+0

ho bisogno di impostare la 'background-image' dinamicamente per un elenco di messaggi, in modo da non lavorare in questo modo, invece imposterò 'div.blur'background e lo erediterò in': before', grazie per la risposta. –

+0

Non è possibile impostare lo stile dello pseudo-elemento con javascript. Quindi in questo caso puoi andare con l'elemento reale e impostare lo sfondo di esso. Fai finta che sia pseudo. – dfsq

7

È possibile ottenere ciò che è necessario con le variabili CSS.

nel foglio di stile è possibile impostare l'immagine di sfondo come questo:

.featured-image:after  { content: ''; 
          background-image: var(--featured-image); } 

Dopo di che è possibile programatically impostare questa variabile sullo stesso elemento o su un più in alto l'albero del DOM:

<div class="featured-image" [ngStyle]="{'--featured-image': featuredImage}"> 

Ulteriori informazioni sulle variabili CSS qui: https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables Si noti che il supporto del browser non è ancora completo.

Si noti inoltre che si vuole bisogno di sanificare l'url/stile utilizzando sanitizer.bypassSecurityTrustResourceUrl(path) o sanitizer.bypassSecurityTrustStyle('--featured-image:url(' + path + ')')):

+0

Ricevo l'origine dell'immagine dalla risposta http, quindi non posso impostare lo sfondo dal mio foglio di stile –

+3

'[attr.style] =" sanitizer.bypassSecurityTrustStyle ('- custom:' + value) "' mi ha aiutato – slowkot