angular - html - значок шрифта awesome смещен по правой стороне div
У меня есть список div, каждый со значком, текстом и другим значком (кружком), который должен быть справа. Для этого я установилmargin-left
свойство, но, конечно, поле рассчитывается на основе длины текста, а не на родительской позиции div. Это приводит к смещению кругов справа. Я использую набор иконок font awesome.
То, что показано на изображении, получается с помощью цикла, который для каждой итерации генерирует <app-item-icon>
составная часть
<app-item-icon>
<i icon class="fas fa-2x fa-clipboard-list"></i>
<span class="span-list-item">{{ item.name }}</span>
<i class="fas fa-circle" [ngClass]="{'is-active': item.is_active, 'is-not-active': !item.is_active}" ></i>
</app-item-icon>
Второй <i>
тег имеет один из двух следующих классов css благодаря ngClass
свойство. ИМХО вот где прячется моя проблема
.is-active {
color: green;
margin-left: 90vw !important;
}
.is-not-active {
color: red;
margin-left: 90vw !important;
}
Это html-файл для <app-item-icon>
:
<div class="container">
<ng-content select="[icon]" ></ng-content>
<ng-content></ng-content>
</div>
Я использую фреймворк Angular с контент-проекцией.<ng-content>
директива будет заменена на <div>
контейнер на визуализированном шаблоне. Первоеng-content
ловит первый значок слева, а второй ng-content
улавливает текст и значок круга, что вызывает проблему mi.
Это CSS для <app-item-icon>
.container {
display: flex;
align-items: center;
padding: 0;
}
:host ::ng-deep *{
float: left;
}
:host ::ng-deep i {
padding: 3px 1px;
margin-right: 6px !important;
}
:host ::ng-deep :not(i) {
margin-left: 2px;
margin-top: 2px;
margin-bottom: 2px;
}
ЧТО Я ПОПРОБОВАЛ ТАК:
float: right
на кружочках: абсолютно не действует;position: absolute
на кружочках: это действительно работает, но неожиданно иконки становятся не центрированными по вертикали, немного сдвигаются вверх;text-align: end
на контейнерный класс: не влияет;- установка
margin-right
вместо левого на кружках: никакого эффекта, потому что, я думаю, у них нет никаких элементов с правой стороны;
ОБ УГЛОВОЙ: Я не знаю почему, но с помощью инструмента проверки браузера я заметил, что значки кружков имеют::before
набор псевдоэлементов. Я думаю, это связано с контент-проекцией Angular. Может быть, будет полезно найти решение
1 ответ
Я вижу ваш класс.container display: flex
. Если вы включите свой диапазон в первый<ng-content>
добавив [icon], вы можете изменить свой класс.container следующим образом:
.container {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0;
}
В justify-content: space-between;
будет отображать каждый <ng-content>
с одной стороны, и длина текста не имеет значения. Обычно вам больше не понадобитсяmargin-left: 90vw !important;
в вашем .is-active .is-not-active
классы.