Запрошенная вами функциональность может быть достигнута с помощью свойства css position
.
мы можем заключить символы в div, имеющий css position:absolute
, и родительский div с классом button-row
может иметь css position:relative
.
Я обновил вашу демонстрацию stackblitz, как описано выше.https://stackblitz.com/edit/stackoverflow-56936645
ваш шаблон будет выглядеть так:
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef> Symbol</th>
<td mat-cell *matCellDef="let element; let i = index">
<!--.button-row starts, it is a parent row with position relative-->
<div class="button-row" style="">
<!--.float-button-container starts, it is a wrapper div with position:absolute-->
<div class="float-button-container" [class.active]="showFloatingButtons[i] == true">
<mat-icon mat-fab color="primary" class="floating-buttons">offline_pin
</mat-icon>
<mat-icon mat-fab color="primary" class="floating-buttons">query_builder
</mat-icon>
<mat-icon mat-fab color="primary" class="floating-buttons" disabled>restore
</mat-icon>
<mat-icon mat-fab color="primary" class="floating-buttons">
play_circle_filled
</mat-icon>
</div>
<!--.float-button-container ends-->
<mat-icon (click)="toggleFloat(i)" class="sky_blue">more_horiz</mat-icon>
</div>
<!--.button-row ends-->
</td>
</ng-container>
, а ваши стили будут выглядеть так:
.button-row {
position: relative;
}
.float-button-container {
display: flex;
position: absolute;
left: 0;
top: 0;
transform: translateX(-100%);
background-color: #ffffff;
width: 0px;
transition: width 150ms ease-in-out;
overflow: hidden;
}
.float-button-container.active {
width: 100px;
transition: width 150ms ease-in-out;
}
Ваша проблема почти такая же, как выпадающий список, которыйоткрывается на левой стороне.Подробнее о создании выпадающих меню с помощью css читайте здесь: https://www.w3schools.com/css/css_dropdowns.asp
Надеюсь, это поможет.