Lyror
Lyror

Reputation: 964

Angular Material 2 Card Header Buttons set Right

I use the Angular Material 2 and I want in a card-header icon buttons. How can I set the buttons to the right side?

My plan: enter image description here

Current Website: enter image description here

I want to set the buttons rop right in the header. How can i do it? I exlude the category code because there is no problem. In the typescript code is only a for loop to add more cards and a dummy method for click on a card.

.healthy-search {
    width: 100%
}

.healthy-card {
    margin-right: 5px;
    margin-bottom: 5px;
}
<div class="flex-container" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center center" fxLayoutAlign.xs="start">
  <div class="flex-item" fxFlex="90%" fxFlex.xs="90%">
    <mat-form-field class="healthy-search">
      <textarea matInput placeholder="Suche"></textarea>
    </mat-form-field>
  </div>
</div>
<div class="flex-container" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center center" fxLayoutAlign.xs="start">
  <div class="flex-item" fxFlex="85%" fxFlex.xs="85%">
    <mat-expansion-panel>
    
     <!-- Here is the Category -->
     

     <!--Elements of Category -->

      <div class="flex-container" fxLayoutWrap fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center center" fxLayoutAlign.xs="start">
        <div class="flex-item healthy-card" fxFlex="400px" *ngFor="let number of numbers" (click)="cardClick()">
          <mat-card class="example-card">
            <mat-card-header>
              <mat-card-title>Title {{number}}</mat-card-title>
              <button mat-icon-button fxLayoutAlign="right">
                <mat-icon aria-label="Example icon-button with a heart icon">Edit</mat-icon>
              </button>
              <button mat-icon-button fxLayoutAlign="right">
                <mat-icon aria-label="Example icon-button with a heart icon">Delete</mat-icon>
              </button>
            </mat-card-header>
            <img mat-card-image src="https://material.angular.io/assets/img/examples/shiba2.jpg" alt="Photo of a Shiba Inu">
            <mat-card-content>
              <p>
                The Shiba Inu is the smallest of the six original and distinct spitz breeds of dog from Japan. A small, agile dog that copes
                very well with mountainous terrain, the Shiba Inu was originally bred for hunting.
              </p>
            </mat-card-content>
          </mat-card>
        </div>
      </div>
    </mat-expansion-panel>
  </div>
</div>

Lyror

Upvotes: 14

Views: 28738

Answers (4)

SteveL
SteveL

Reputation: 107

The usage of mat-card-title-group + matSuffix to button works as expected for me. The title is at the left and button at the right.

  <mat-card-header>    
    <mat-card-title-group>
      <mat-card-title> Card Title </mat-card-title>
      <button
        mat-icon-button
        matSuffix
        (click)="clearClick($event)">
        <mat-icon color="accent">clear</mat-icon>
      </button>
    </mat-card-title-group>
  </mat-card-header>

Upvotes: 2

outrowender
outrowender

Reputation: 401

In angular material 7, this looks good for me:

<mat-card>
 <mat-card-header>
  <mat-card-title-group>
    <mat-card-title>
      Title
    </mat-card-title>
    <mat-card-subtitle>
      Subtitle
    </mat-card-subtitle>
  </mat-card-title-group>
  <div fxFlex></div>
  <div fxLayoutAlign="center center">
    <button mat-stroked-button>Click me!</button>
  </div>
 </mat-card-header> 
</mat-card>

Upvotes: 3

Nicolas Gehlert
Nicolas Gehlert

Reputation: 3263

This post is quite old but maybe someone else stumble upon this as well. (As of writing this answer the current version is Angular Material 6)

I recommend using the <mat-card-title-group> attribute. From the docs (https://material.angular.io/components/card/overview):

<mat-card-title-group> can be used to combine a title, subtitle, and image into a single section.

This way the title and description will be bundled into one single div and the fxFlex container actually works. This also allows to add buttons / icons to the left.

An example could look like this:

<mat-card-header>
    <mat-icon>help</mat-icon>
    <mat-card-title-group>
        <mat-card-title>
            Title
        </mat-card-title>
        <mat-card-subtitle>
            Subtitle
        </mat-card-subtitle>
    </mat-card-title-group>
    <div fxFlex></div>
    <button mat-button>Click me!</button>
</mat-card-header> 

Upvotes: 19

Michael Warneke
Michael Warneke

Reputation: 263

First take away the fxLayoutAlign="right" from the buttons. fxLayoutAlign is for containers.

You need to at a div or some other placeholder with fxFlex between the title and the buttons. This will push the buttons to the end.

<md-card-header fxLayout="row">
  <md-card-title >Title </md-card-title>
  <div fxFlex></div>
  <button md-button>Something</button>
</md-card-header>

Upvotes: 9

Related Questions