Изменение стиля псевдоэлементов в angular2

можно ли изменить стиль псевдо-элементов с помощью [style] или [ngStyle] в angular2?

чтобы получить эффект размытия на div действует как наложение, и я должен настроить фоновое изображение на псевдо-элементе.

я попробовал что-то вроде

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

это не сработало. Я также пробовал это

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

2 ответов


нет, это невозможно. На самом деле это не угловая проблема: псевдо-элементы не являются частью дерева DOM и из-за этого не предоставляют API DOM, который можно использовать для взаимодействия с ними.

обычный подход, если вы хотите иметь дело с псевдоэлементами программно, является косвенным: вы добавляете/удаляете / изменяете класс и в CSS заставляете этот класс влиять на соответствующий псевдоэлемент. Поэтому в вашем случае у вас может быть еще один класс, который необходимо изменить стиль:

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

теперь все, что вам нужно сделать, это тумблер .background класс на элементе, когда вам нужно before псевдо-элемент для получения фона. Вы можете использовать NgClass, например.


вы можете достичь того, что вам нужно с переменными CSS.

в вашей таблице стилей вы можете установить фоновое изображение следующим образом:

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

после этого вы можете программно установить эту переменную на том же элементе или на одном более высоком дереве DOM:

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

подробнее о переменных CSS здесь:https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables обратите внимание, что поддержка браузера еще не завершена.

Также обратите внимание, что вам нужно будет санировать url / style с помощью sanitizer.bypassSecurityTrustResourceUrl(path) или sanitizer.bypassSecurityTrustStyle('--featured-image:url(' + path + ')')):