Существуют некоторые проблемы с вашими стилями:
visibility: hidden
скрывает содержимое элемента, но не освобождает пространство, в котором блокируются элементы
.mat-radio-outer-circle
видимость устанавливается скрытой, только если опция включена из-за .mat-radio-checked
- , более простой способ отключить пульсацию - этоустановите
disableRipple="true"
на мат-радиокнопке
1) Как скрыть круги в мат-радиогруппе и отключить пульсации?
Я настроил стиль, как показано ниже:
::ng-deep .mat-radio-button .mat-radio-container {
width: 0;
}
::ng-deep .mat-radio-container .mat-radio-outer-circle,
::ng-deep .mat-radio-container .mat-radio-inner-circle {
border: none;
width: 0;
}
и добавил disableRipple="true"
к кнопке-переключателю мат
<mat-radio-button disableRipple="true" [value]="answer.value">
2) Как изменить фон, если опция отмечена?
К цвету фона опции, если она отмечена, я добавил директиву атрибута ngStyle к элементам li и сравнил индексвыбранный параметр со значением, хранящимся в userAnswers для текущего вопроса:
<li [ngStyle]="{'background-color':userAnswers[currentIndex] === i+1?'blue':'transparent'}"> ... </li>
Чтобы это работало, мне пришлось изменить HTMLнемного (если вы создаете ваши параметры в цикле, вы можете сохранить несколько строк кода, и легко отключить пульсации для всех параметров одновременно):
<li class="answer"
[ngStyle]="{'background-color':userAnswers[currentIndex] === i+1?'blue':'transparent'}"
*ngFor="let answer of currentQuestion.answers; let i = index">
<mat-radio-button disableRipple="true" [value]="answer.value">
<p>{{ i+1 }}. {{ answer.text }}</p>
</mat-radio-button>
</li>
В качестве альтернативы вы могли бы ngClass
вместоngStyle
также.Просто добавьте
[ngClass]="{'active': userAnswers[currentIndex] === i+1}"
к элементу li вместо директивы ngStyle и добавьте следующее определение стиля
.answer.active {
background: lightblue;
}
Preview
Checkэтот Stackblitz , который использует оба варианта (ngClass и ngStyle)