How to change angular material sort icon

前端 未结 6 1097
半阙折子戏
半阙折子戏 2021-01-12 06:27

I need to change default arrow icon from angular material matSort to a custom arrow.

The current code

 

        
相关标签:
6条回答
  • 2021-01-12 06:39
    ::ng-deep .mat-sort-header-arrow[style] {
    
      // Hide default arrow stem
      .mat-sort-header-stem {
        display: none;
      }
      .mat-sort-header-indicator {
        opacity: 1;
        color: black;
        font-weight: bold;
    
        // Hide default arrow as its composed of left, right and middle
        .mat-sort-header-pointer-left, .mat-sort-header-pointer-right, .mat-sort-header-pointer-middle  {
          display: none;
        }
      }
    }
    
    // My custom ascending arrow
    [aria-sort="ascending"] {
      ::ng-deep .mat-sort-header-arrow {
        .mat-sort-header-indicator {
          &::before {
            content: "\2191";
            top: -1.6em;
            position: absolute;
          }
        }
      }
    }
    
    // My custom descending arrow
    [aria-sort="descending"] {
      ::ng-deep .mat-sort-header-arrow {
        .mat-sort-header-indicator {
          &::before {
            content: "\2193";
            top: -2.4em;
            position: absolute;
          }
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-12 06:39

    @Artur

    You can try this

    [aria-sort='ascending'] {
      ::ng-deep .mat-sort-header-arrow{
        .mat-sort-header-indicator {
          &::before{
            font: normal normal normal 1.1rem/1 FontAwesome;
            content: "\f0d7";
            position: absolute;
            top: .2rem;
          }
        }
      }
    }
    
    [aria-sort='descending'] {
      ::ng-deep .mat-sort-header-arrow { 
        .mat-sort-header-indicator {
          &::before{
            font: normal normal normal 1.1rem/1 FontAwesome;
            content: "\f0d8";
            position: absolute;
            top: -.9rem;
          }
        }
      }
    }

    0 讨论(0)
  • 2021-01-12 06:47
    Try this.
    app.component.ts
    
    import {Component, ViewEncapsulation} from '@angular/core';
    
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css'],
      encapsulation: ViewEncapsulation.None
    })
    export class AppComponent {
      title = 'app';
    }
    
    
    app.component.css
    
        .mat-sort-header-stem {
        height: 3px !important;
        width: 10px !important;
        transform: rotate(180deg) !important;
    }
    .mat-sort-header-pointer-left, .mat-sort-header-pointer-right {
        width: 7px !important;
        height: 3px !important;
    }
    .mat-sort-header-pointer-middle{
        width: 0px !important;
        height: 0px !important;
    }
    
    0 讨论(0)
  • 2021-01-12 06:47

    Based on @amuthan solution I came up with this, it's the same arrow as dropdown uses, and it also shows up when hovering:

    .mat-sort-header-arrow[style] {
      .mat-sort-header-stem {
        display: none;
      }
      .mat-sort-header-indicator {
        opacity: 1;
        color: black;
        font-weight: bold;
    
        .mat-sort-header-pointer-left, .mat-sort-header-pointer-right, .mat-sort-header-pointer-middle  {
          display: none;
        }
      }
    }
    .mat-sort-header-indicator {
      &::before {
        content: "";
        top: 0.1em;
        position: absolute;
        color: $primary;
        width: 0;
        height: 0;
        border-left: 5px solid transparent;
        border-right: 5px solid transparent;
        border-top: 5px solid;
        margin: 0 4px;
        transform: rotate(180deg);
        opacity: 0.6;
      }
    }
    
    
    [aria-sort="ascending"] {
      .mat-sort-header-arrow {
        .mat-sort-header-indicator {
          &::before {
            top: 0.1em;
            transform: rotate(180deg);
            opacity: 1;
    
          }
        }
      }
    }
    
    [aria-sort="descending"] {
      .mat-sort-header-arrow {
        .mat-sort-header-indicator {
          &::before {
            top: -0.6em;
            transform: rotate(0);
            opacity: 1;
          }
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-12 06:53

    Similar to @Amuthan 's answer which hides the default display. This code must reside in the global css. It displays carets instead of arrows:

    /* in global css document: */
    /* this makes it so that sort header arrow is always shown: */
    .mat-sort-header-arrow.ng-trigger.ng-trigger-arrowPosition {
        opacity: 1 !important;
        color: blue;
        
      }
    /* Hide the default sort arrow display: */
    .mat-sort-header-stem {
        display: none  !important;
    }
    .mat-sort-header-pointer-left, .mat-sort-header-pointer-right {
        display: none  !important;
    }
    .mat-sort-header-pointer-middle{
        width: 0px !important;
        height: 0px !important;
    }
    /* show two carets on top of each other when not sorted takes place: */
        .mat-sort-header-arrow {
             .mat-sort-header-indicator {
               &::before {
                 content: "<>"; 
                 position: absolute;
                 opacity: 1 !important;
                 color:  blue !important;
                 font-size: 1.2em;
                 font-weight: bold;
                 transform: translate(-10%, 20%)   rotate(90deg) !important;
               }
             }
           }
    
    /* show ascending caret when sorted ascending:*/
    [aria-sort="ascending"] {
     .mat-sort-header-arrow {
          .mat-sort-header-indicator {
            &::before {
              content: "<"; 
              position: absolute;
              color:  blue !important;
              opacity: 1 !important;
              font-size: 1.2em;
              font-weight: bold;
              transform: translate(0,0) rotate(90deg) !important;
            }
          }
        }
      }
      
     /* show descending caret when sorted descending: */
      [aria-sort="descending"] {
    .mat-sort-header-arrow {
          .mat-sort-header-indicator {
            &::before {
              content: ">";
              position: absolute;
              color:  blue !important;
              opacity: 1 !important;
              font-size: 1.2em;
              font-weight: bold;
              transform: translate(0,-10%) rotate(90deg) !important;
            }
          }
        }
      }
      
    

    This is the result: Table header with carets for sorting

    0 讨论(0)
  • 2021-01-12 07:03

    that is the way that I made it

    <mat-header-cell *matHeaderCellDef (dblclick)="sortData(column.field)"> {{ column.title }}<mat-icon *ngIf="sort.active==column.field" style="font-size:11pt;color:dimgray;font-weight: 700;padding-left:5px">{{sort.direction=="asc"?"arrow_upward":"arrow_downward"}}</mat-icon></mat-header-cell>
    

    <mat-icon *ngIf="sort.active==column.field" style="font-size:11pt;color:dimgray;font-weight: 700;padding-left:5px">{{sort.direction=="asc"?"arrow_upward":"arrow_downward"}}</mat-icon>**
    
    0 讨论(0)
提交回复
热议问题