md-table - Sütun genişliği nasıl güncellenir


Yanıtlar:


140

Malzeme tabloyu oluşturduğunda, otomatik olarak sizin için her bir sütuna stil vermek için kullanabileceğiniz iki sınıf adı uygular. Aşağıdaki örnekte stiller mat-column-userIdve adı verilmiştir cdk-column-userId.

<ng-container cdkColumnDef="userId">
  <md-header-cell *cdkHeaderCellDef> ID </md-header-cell>
  <md-cell *cdkCellDef="let row"> {{row.id}} </md-cell>
</ng-container>

Şimdi bu isimleri css'de kullanabilirsiniz:

.mat-column-userId {
  flex: 0 0 100px;
}

Rahul Patil'ın cevabına benzer , ancak sütun tanımlarınıza başka bir sınıf eklemenize gerek yoktur.


Benim durumumda, böyle uygulanan stiller için önemli! İhtiyacım vardı çünkü aksi halde stil .mat-header-cellöncelikli olacaktı. Alternatif olarak, başlık hücresi için başka bir stil kuralı ekleyebilirsiniz.
Adrian Smith

Bunun belgeleri herhangi bir yerde mevcut mu ("flex" ten sonraki 3 değerin her birinin ne anlama geldiğini ve .mat-column- <colName> ilgili sütuna nasıl başvurduğunu anlamak istedim)? Teşekkürler!
rahs

1
Kullanmaya son verdiğim çözüm bu oldu, ancak esnek temeli ayarlamak yerine esnek büyümeyi ayarladım, böylece hücre diğer hücrelerden 3 kat daha büyük olacak (esnek: 3 0 0)
emulcahy 4'19

3
Benim durumumda esnek ile genişliği ayarlamak işe yaramadı. Genişlik de yapmadı. min-width yaptı (bazı nedenlerden dolayı).
Paul Evans

1
@jymdman, ekran boyutu değişikliklerinde bile sütun için aynı boyutu tanımlamanın bir yolu var mı? stackoverflow.com/questions/65296518/…
uygulama

55

Şu anda, henüz API düzeyinde ortaya çıkmadı. Ancak buna benzer bir şey kullanarak bunu başarabilirsiniz

<ng-container cdkColumnDef="userId" >
  <md-header-cell *cdkHeaderCellDef [ngClass]="'customWidthClass'"> ID </md-header-cell>
  <md-cell *cdkCellDef="let row" [ngClass]="'customWidthClass'"> {{row.id}} </md-cell>
</ng-container>

CSS'de, bu özel sınıfı eklemeniz gerekir -

.customWidthClass{
   flex: 0 0 75px;
}

Buraya sınıf veya özel genişlik eklemek için mantığı girmekten çekinmeyin. Sütun için özel genişlik uygulayacaktır.

Md-table kullandığından flexesnek bir şekilde sabit genişlik vermemiz gerekiyor. Bu basitçe açıklıyor -

0 = büyüme (esnek büyümenin kısaltması)

0 = küçültme (esnek küçültme için kısaltma)

75px = 75px'de başla (esnek tabanlı kısaltma)

Plunkr burada - https://plnkr.co/edit/v7ww6DhJ6zCaPyQhPRE8?p=preview


1
Güzel.Her ikisi de çalışıyor. Teşekkür ederim. Ancak veri daha fazlaysa, tablonun da ötesine geçiyor. Ve sözcük kaydırma da çalışmıyor
Vinutha Kumar

2
neden normal sınıf yerine [ngClass] kullanıyorsunuz?
Andre Elrico

@Rahul, ekran boyutu değişikliklerinde bile sütun için aynı boyutu tanımlamanın bir yolu var mı? stackoverflow.com/questions/65296518/…
uygulama

38

Projenizde angular / flex-layout kullanıyorsanız , mat-header-cell ve mat- cell'e fxFlex yönergesi ekleyerek sütunu ile ayarlayabilirsiniz :

 <ng-container matColumnDef="name" >
      <mat-header-cell fxFlex="100px" *matHeaderCellDef mat-sort-header>Name</mat-header-cell>
      <mat-cell  fxFlex="100px" *matCellDef="let row;" (click)="rowClick(row)">{{row.Name}}</mat-cell>
 </ng-container>

Aksi takdirde, aynı sonucu elde etmek için özel CSS ekleyebilirsiniz:

.mat-column-name{
    flex: 0 0 100px;
}

1
Ekran boyutu değişse bile sütun için aynı boyutu tanımlamanın bir yolu var mı? stackoverflow.com/questions/65296518/…
uygulama


15

Jymdman'ın ve Rahul Patil'ın yanıtlarının bir kombinasyonunun benim için en iyisi olduğunu buldum:

.mat-column-userId {
  flex: 0 0 75px;
}

Ayrıca, farklı cihazlarda her zaman belirli bir alanı kaplamak istediğiniz bir "önde gelen" sütununuz varsa, mevcut kapsayıcı genişliğini daha duyarlı bir şekilde benimsemek için aşağıdakileri oldukça kullanışlı buldum (bu kalan sütunları kalan alanı eşit olarak kullanın):

.mat-column-userName {
  flex: 0 0 60%;
}

Bu en iyi cevap.
PedroPovedaQ


9

Sütun genişliğini FlexLayout'un bize verdiği sorgu ortamına göre güncellemek için FlexLayout kullanıyorum.

fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20" fxFlex.gt-md="25"

bu sütunun varsayılan olarak satır genişliğinin% 30'unu kullanacağı anlamına gelir, gt-xs @mediaQuery karşılandığında, yeni genişlik% 15 olacak ve diğer koşullar için benzer davranış

<!-- CURRENTBALANCE COLUMN-->
  <ng-container cdkColumnDef="balance_2">
    <mat-header-cell fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20"
       fxFlex.gt-md="25" fxLayout="row" fxLayoutAlign="center center"
       *cdkHeaderCellDef>{{ balanceTable.datesHeaders[2] }}</mat-header-cell>
    <mat-cell fxFlex="30" fxFlex.gt-xs="15" fxFlex.gt-sm="20" fxFlex.gt-md="25" 
      *cdkCellDef="let eventTop">
      <div fxLayout="column" fxLayoutAlign="center center">
        <!-- CELL_CONTENT-->
      </div>
    </mat-cell>
  </ng-container>
<!-- CURRENTBALANCE COLUMN-->

FlexLayout ve @MediaQueries hakkında daha fazla bilgiyi https://github.com/angular/flex-layout/wiki/Responsive-API adresinde okuyun.


FxFlex direktifini bir sütuna eklemek hepsini etkiliyor gibi görünüyor. Yalnızca bir sütunu hedeflemenin bir yolu var mı?
zakdances

6

Ben sadece kullandım:

th:nth-child(4) {
    width: 10%;
}

4'ü, genişliği ayarlamanız gereken başlığın konumu ile değiştirin. Kullanılan belgelerdeki örnekler :

td, th {
  width: 25%;
}

Bu yüzden istediğimi elde etmek için onu değiştirdim.


4

.Mat-cell sınıfını flex: 0 0 200px; flex yerine: nth-child ile birlikte 1.

.mat-cell:nth-child(2), .mat-header-cell:nth-child(2) {
    flex: 0 0 200px;
}


4

Kullandığınız yapabilirsiniz fxFlexyılında "@ açısal / esnek-düzen" den thve tdbunun gibi:

<ng-container matColumnDef="value">
      <th mat-header-cell fxFlex="15%" *matHeaderCellDef>Value</th>
            <td mat-cell *matCellDef="let element" fxFlex="15%" fxLayoutAlign="start center">
                           {{'value'}}
            </td>
       </th>
</ng-container>

2
.mat-column-skills {
    max-width: 40px;
}

Bunun en çok oylanan cevaptan farklı olduğuna emin misiniz? Muhtemelen cdkColumnDef'iniz sadece farklı?
user1781290

hayır bu hemen hemen aynı, sadece bunun benim için işe yaradığını vurgulamak istedim.
Pragati Dugar

1

Ayrıca öğe seçicilerini de kullanabilirsiniz:

mat-header-cell:nth-child(1), mat-cell:nth-child(1) {
    flex: 0 0 64px;
}

Ancak jymdman'ın cevabı çoğu durumda en çok önerilen yoldur.


1

Örnek Mat tablo sütunu ve karşılık gelen CSS:

HTML / Şablon

<ng-container matColumnDef="">
  <mat-header-cell *matHeaderCellDef>
     Wider Column Header
  </mat-header-cell>
  <mat-cell *matCellDef="let displayData">
    {{ displayData.value}}
  </mat-cell>`enter code here`
</ng-container>

CSS

.mat-column-courtFolderId {
    flex: 0 0 35%;
}

0

İsterseniz stili doğrudan biçimlendirmeye de ekleyebilirsiniz:

<ng-container matColumnDef="Edit">
     <th mat-header-cell *matHeaderCellDef > Edit </th>
     <td mat-cell *matCellDef="let element" (click)="openModal()" style="width: 50px;"> <i class="fa fa-pencil" aria-hidden="true"></i> </td>
</ng-container>

0

Çok fazla tablo sütununuz varsa ve bu sütun kullanılarak açısal tabloda ayarlanmadıysa md-table, aşağıdaki stili component.cssdosyaya yapıştırın . Yatay olarak kaydırma görünümü ile bir cazibe gibi çalışacaktır.

.mat-table__wrapper .mat-table {
    min-width: auto !important;
    width: 100% !important; }

.mat-header-row {
    width: 100%; }

.mat-row {
    width: 100%;
}

Sütununuzu ayrı ayrı değiştirmek için bu stili ekleyin.

.mat-column-{colum-name} {
    flex: 0 0 25% !important;
    min-width: 104px !important;
}

Alternatif kontrol bu bağlantıyı , (kod yukarıdan geldi) Daha fazla ayrıntı için.


0

Bir örnek alalım. Tablonuzda aşağıdaki gibi sütunlar varsa:

<!-- ID Column -->
  <ng-container matColumnDef="id" >
    <th mat-header-cell *matHeaderCellDef mat-sort-header> ID </th>
    <td mat-cell *matCellDef="let row"> {{row.sid}} </td>
  </ng-container>

 <!-- Name Column -->
  <ng-container matColumnDef="name">
    <th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th>
    <td mat-cell *matCellDef="let row"> {{row.name}} </td>
  </ng-container>

Bu iki sütun içerdiğinden. ardından sütunların genişliğini ayarlayabiliriz

.mat-column-<matColumnDef-value>{
    width: <witdh-size>% !important;
}

bu örnek için alıyoruz

  .mat-column-id{
    width: 20% !important;      
  }
  .mat-column-name{
    width: 80% !important;
  }

0

Bunun için çok kolay bir çözüm buldum - hem hücreyi hem de başlık hücresini geçersiz kılarak stil sayfasındaki sütun için farklı genişlik belirleme:

Örnek - 1. ve 5. sütun için özel genişlik ayarlama:

.mat-cell:nth-child(1),
.mat-header-cell:nth-child(1) {
  flex: 0 0 5%;
}
.mat-cell:nth-child(5),
.mat-header-cell:nth-child(5) {
  flex: 0 0 10%;
}

github

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.