Элементы списка материалов Angular с кнопками, красиво, пожалуйста

Мне нужен список Angular Material v18.1 с выделенным содержимым и парой кнопок, что-то вроде этого:

Но когда я добавляю, скажем, директиву matListItemTitle к имени, всё идёт наперекосяк:

Конечно, я могу явно стилизовать элементы, но я подумал, что директивы Angular Material List будут немного более полезными. Любая информация о том, что я делаю неправильно?

<main>
  <mat-list>
    @for (c of contacts; track c) {
    <mat-list-item>
      <mat-icon matListItemIcon>folder</mat-icon>
      <div class = "contact-details">
        <!-- without matListItemTitle display is okay -->
        <div matListItemTitle>{{c.name}}</div>
        <div>{{c.email}}</div>
        <div>{{c.description}}</div>
      </div>
      <button matListItemMeta mat-stroked-button color = "primary">Compose</button>
      <button matListItemMeta mat-stroked-button color = "warn">Remove</button>
    </mat-list-item>
    <mat-divider></mat-divider>
    }
  </mat-list>
</main>
:host {
  width: 100%;
}

main {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 95%;
  margin: 20px;
}

mat-list {
  width: 80%;
}

mat-list-item {
  display: flex;
  flex-direction: row;
}

.contact-details {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  gap: 10px 30px;
}
import { MatButtonModule } from '@angular/material/button';
import { MatDividerModule } from '@angular/material/divider';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [MatButtonModule, MatDividerModule, MatIconModule, MatListModule],
  templateUrl: './list.html',
  styleUrl: './list.css',
})
export class App {
  contacts = [
    { name: 'one', email: '1@one', description: 'The one.' },
    { name: 'two', email: '2@one', description: 'The two.' },
  ];
}

Пожалуйста, предоставьте код здесь, в Stack Overflow, а не в виде ссылки где-либо еще.

Heretic Monkey 31.07.2024 01:50

Добавлен код @HereticMonkey.

Jan Nielsen 31.07.2024 01:53

@JanNielsen Проблема не возникает в stackblitz :(

Naren Murali 31.07.2024 09:34
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
3
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема в том, что вы стилизуете свои кнопки с помощью matListItemMeta, поэтому они выглядят неправильно.

Попробуйте обернуть matListItemMeta в span следующим образом:

<span matListItemMeta>
  <button mat-stroked-button>This is a button</button>
</span>

Действительно, размещение matListItemMeta и matListItemTitle на промежутках устраняет несовпадение.

Jan Nielsen 02.08.2024 22:41

Другие вопросы по теме