Angular 카드 구성 요소 개요

    Angular 카드는 제목 텍스트, 설명, 이미지 스타일, 클릭 유도 버튼, 링크 등과 같은 다양한 요소를 포함하는 유연한 컨테이너를 나타냅니다. 주어진 시나리오/컨텐츠를 가장 잘 표현하기 위해 다양한 표시 옵션, 머리글, 바닥글은 물론 배경색, 애니메이션 등을 제공합니다.

    이 경량 Angular 카드 구성 요소는 모든 종류의 카드를 만드는 데 사용되며 그 중 일부는 명함, 재료 뒤집기 카드, 쌓인 카드일 수 있습니다.

    Angular Card Example

    아래에서는 이미지, 제목, 부제, 기본 카드 콘텐츠, 버튼 컨테이너와 같은 기본 카드 섹션이 포함된 잘 제작된 Ignite UI for Angular의 기본 샘플을 볼 수 있습니다.

    Getting Started with Ignite UI for Angular Card

    Ignite UI for Angular 카드 구성 요소를 시작하려면 먼저 Ignite UI for Angular 설치해야 합니다. 기존 Angular 애플리케이션에서 다음 명령을 입력합니다.

    ng add igniteui-angular
    

    Ignite UI for Angular에 대한 전체 소개를 보려면 시작하기 항목을 읽어보세요.

    다음 단계는 IgxCardModule 너의 안에 app.module.ts 파일.

    // app.module.ts
    ...
    import { IgxCardModule } from 'igniteui-angular';
    // import { IgxCardModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        ...
        imports: [..., IgxCardModule],
        ...
    })
    export class AppModule {}
    

    또는 16.0.0부터 IgxCardComponent 독립 실행형 종속성으로 가져오거나 IGX_CARD_DIRECTIVES 토큰을 사용하여 구성 요소와 모든 지원 구성 요소 및 지시어를 가져올 수 있습니다.

    // home.component.ts
    
    import { IGX_CARD_DIRECTIVES } from 'igniteui-angular';
    // import { IGX_CARD_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({
        selector: 'app-home',
        template: `
        <igx-card>
            <igx-card-media height="196px">
                <img [src]="https://images.unsplash.com/photo-1518235506717-e1ed3306a89b?ixlib=rb-1.2.1&auto=format&fit=crop&w=640&q=50">
            </igx-card-media>
    
            <igx-card-header>
                <h3 igxCardHeaderTitle>New York</h3>
                <h5 igxCardHeaderSubtitle>City in New York</h5>
            </igx-card-header>
    
            <igx-card-content>
                <p>New York City comprises 5 boroughs sitting where the Hudson River meets the Atlantic Ocean. At its core is Manhattan, a densely populated borough that’s among the world’s major commercial, financial and cultural centers.</p>
            </igx-card-content>
    
            <igx-card-actions>
                <button igxButton igxRipple>Read More</button>
                <button igxIconButton="flat" igxRipple igxRippleCentered="true">
                    <igx-icon>favorite</igx-icon>
                </button>
                <button igxIconButton="flat" igxRipple igxRippleCentered="true">
                    <igx-icon>share</igx-icon>
                </button>
            </igx-card-actions>
        </igx-card>
        `,
        styleUrls: ['home.component.scss'],
        standalone: true,
        imports: [IGX_CARD_DIRECTIVES]
        /* or imports: [IgxCardComponent,
            IgxCardHeaderComponent,
            IgxCardMediaDirective,
            IgxCardContentDirective,
            IgxCardActionsComponent,
            IgxCardFooterDirective,
            IgxCardHeaderTitleDirective,
            IgxCardHeaderSubtitleDirective,
            IgxCardThumbnailDirective,
            IgxButtonDirective,
            IgxRippleDirective] */
    })
    export class HomeComponent {}
    

    이제 Ignite UI for Angular 모듈 또는 지시문을 가져왔으므로 igx-card 구성 요소 사용을 시작할 수 있습니다.

    Using the Angular Card Component

    그런 다음 데모 카드 템플릿을 나타내기 위해 다음 코드를 추가할 수 있습니다.

    <!--card.component.html>-->
    
    <igx-card>
        <igx-card-media height="196px">
            <img [src]="https://images.unsplash.com/photo-1518235506717-e1ed3306a89b?ixlib=rb-1.2.1&auto=format&fit=crop&w=640&q=50">
        </igx-card-media>
    
        <igx-card-header>
            <h3 igxCardHeaderTitle>New York</h3>
            <h5 igxCardHeaderSubtitle>City in New York</h5>
        </igx-card-header>
    
        <igx-card-content>
            <p>New York City comprises 5 boroughs sitting where the Hudson River meets the Atlantic Ocean. At its core is Manhattan, a densely populated borough that’s among the world’s major commercial, financial and cultural centers.</p>
        </igx-card-content>
    
        <igx-card-actions>
            <button igxButton igxRipple>Read More</button>
            <button igxIconButton="flat" igxRipple igxRippleCentered="true">
                <igx-icon>favorite</igx-icon>
            </button>
            <button igxIconButton="flat" igxRipple igxRippleCentered="true">
                <igx-icon>share</igx-icon>
            </button>
        </igx-card-actions>
    </igx-card>
    

    위에서 몇 가지 사항을 확인할 수 있습니다. 우리가 원할 때 먼저 꼬리표 헤더 제목과 같은 요소 h3 제목 사이에 배치합니다. igx-card-header 태그를 지정하고 igxCardHeaderTitle 요소에 대한 지시어입니다. 반대로, 다른 제목 요소를 subtitle 우리는 igxCardHeaderSubtitle 그것에.

    Angular 카드에 표시하려는 이미지나 비디오는 igx-card-media 태그 안에 포함됩니다. igx-card-media 하면 widthheight 속성을 통해 내부에 배치된 콘텐츠의 크기를 조정할 수 있습니다. 위의 예에서는 height만 제공하여 너비를 auto로 유지하여 설정된 높이를 유지하면서 이미지가 전체 카드 표면에 걸쳐 늘어날 수 있도록 했습니다.

    igx-card-content 태그 안에는 무엇이든 넣을 수 있습니다. 일반적으로 텍스트가 거기로 이동합니다.

    마지막으로 igx-card-actions 버튼과 같은 실행 가능한 항목을 배치하는 곳입니다. 요소에 igxButton 지시문을 사용하면 영역 내부의 머티리얼 디자인 사양에 따라 자동으로 올바르게 배치됩니다.

    Media, Thumbs, and Avatars

    제목과 부제 옆의 카드 헤더에 이미지나 아이콘을 표시하려면 igxCardThumbnail 지시어를 사용하면 됩니다.

    위의 카드를 예로 들면, igx-card-header의 내용을 편집하고 igxCardThumbnail 컨테이너를 추가하여 아이콘을 담을 수 있습니다.

    <igx-card-header>
        <div igxCardThumbnail>
            <igx-icon>place</igx-icon>
        </div>
        
        <h3 igxCardHeaderTitle>Title</h3>
        <h5 igxCardHeaderSubtitle>Subtitle</h5>
    </igx-card-header>
    

    위의 예에서는 카드 헤더의 제목 및 부제 옆에 아이콘이 표시됩니다.

    또한 카드 헤더에 있는 igx-avatar 또는 igx-card-media 있는지 자동으로 감지합니다. 마치 카드 썸네일처럼 나타납니다. 그래서 당신은 할 수 있습니다 :

    <igx-card-header>
        <igx-avatar>
            <igx-icon>place</igx-icon>
        </igx-avatar>
    
        <h3 igxCardHeaderTitle>Title</h3>
        <h5 igxCardHeaderSubtitle>Subtitle</h5>
    </igx-card-header>
    

    또는 심지어 이것:

    <igx-card-header>
        <igx-card-media width="40px" height="40px">
            <img src="https://images.unsplash.com/photo-1518235506717-e1ed3306a89b?ixlib=rb-1.2.1&auto=format&fit=crop&w=80&q=50">
        </igx-card-media>
    
        <h3 igxCardHeaderTitle>Title</h3>
        <h5 igxCardHeaderSubtitle>Subtitle</h5>
    </igx-card-header>
    

    Outlined cards

    카드에는 default (생략된 경우 자동 설정) 또는 outlined 설정할 수 있는 type 속성이 있습니다. outlined 유형은 카드에서 그림자를 제거하고 이를 얇은 테두리로 대체하여 카드를 배경과 분리합니다.

    Angular Card Horizontal Layout

    기본적으로 카드의 모든 섹션(헤더, 콘텐츠, 미디어, 작업)은 수직으로 배치됩니다. 수직 공간이 많을 때 좋습니다. 카드의 모든 섹션을 수평으로 배치하고 싶다고 가정해 보겠습니다. 카드의 horizontal 속성을 사용하여 레이아웃을 설정할 수 있습니다.

    다음은 윤곽선이 있는 수평 카드의 예입니다.

    <igx-card type="outlined" [horizontal]="horizontal">
        <div class="h-sample-column">
            <igx-card-header>
                <h5 igxCardHeaderTitle>{{card.title}}</h5>
                <h5 igxCardHeaderSubtitle>{{card.subtitle}}</h5>
                <igx-card-media width="64px" height="64px">
                    <img [src]="card.imageUrl">
                </igx-card-media>
            </igx-card-header>
    
            <igx-card-content>
                <p>{{card.content}}</p>
            </igx-card-content>
        </div>
    
        <igx-divider [vertical]="horizontal"></igx-divider>
    
        <igx-card-actions layout="justify">
            <button *ngFor="let icon of card.icons;" igxIconButton="flat" igxRipple igxRippleCentered="true">
                <igx-icon>{{icon}}</igx-icon>
            </button>
        </igx-card-actions>
    </igx-card>
    

    .h-sample-column 클래스를 사용하여 igx-card-headerigx-card-content 함께 묶어 수직으로 정렬하고 카드의 다른 섹션은 수평으로 정렬합니다.

    .h-sample-column 클래스가 적용되는 스타일은 다음과 같습니다.

    .h-sample-column {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        flex: 1 1 0%;
    
        igx-card-header {
            padding-bottom: 0;
        }
    }
    

    igx-card-actions의 버튼이 이제 어떻게 vertical 레이아웃으로 전환되었는지 확인하세요. igx-card-actions 상위 항목과 inverse 레이아웃 관계를 갖습니다. 따라서 카드의 horizontal 속성이 true로 설정될 때마다 작업 vertical 속성이 true로 설정되고 그 반대의 경우도 마찬가지입니다.

    작업 영역의 vertical 속성을 명시적으로 설정하여 이 기본 동작을 재정의할 수 있습니다.

    <igx-card-actions layout="justify" [vertical]="false">
        <button *ngFor="let icon of card.icons;" igxIconButton="flat" igxRipple igxRippleCentered="true">
            <igx-icon>{{icon}}</igx-icon>
        </button>
    </igx-card-actions>
    

    모든 것이 순조롭게 진행되었다면 카드는 다음과 같아야 합니다.

    Alternative layouts

    igx-card의 레이아웃을 사용하면 더욱 창의력을 발휘할 수 있습니다.

    다음은 카드의 모든 섹션이 수직으로 배치되어 있고 카드의 수직 섹션 옆에 igx-card-media 나타나는 반수평 카드를 만드는 방법을 보여주는 예입니다.

    <igx-card [horizontal]="horizontal">
        <div igxLayout igxLayoutDir="column" igxFlex igxFlexGrow="1">
            <igx-card-header>
                <igx-avatar [src]="card.avatarUrl"></igx-avatar>
                <h5 igxCardHeaderTitle>{{card.title}}</h5>
                <h5 igxCardHeaderSubtitle>{{card.subtitle}}</h5>
            </igx-card-header>
    
            <igx-card-content>
                <p>{{card.content}}</p>
            </igx-card-content>
    
            <igx-card-actions [vertical]="false">
                <button *ngFor="let button of card.buttons;" igxButton="flat" igxRipple>
                    {{button}}
                </button>
            </igx-card-actions>
        </div>
    
        <igx-card-media width="96px">
            <img [src]="card.imageUrl">
        </igx-card-media>
    </igx-card>
    

    Angular Card Actions

    Angular 카드 작업 영역에서는 이미 언급한 내용에 대한 추가 구성을 허용합니다.

    reverse 속성을 사용하면 플랫 버튼과 버튼 아이콘의 순서를 반대로 바꿀 수 있습니다.

    <igx-card-actions [reverse]="true">
        <button igxButton>Button</button>
    
        <button igxIconButton="flat">
            <igx-icon>star</igx-icon>
        </button>
    </igx-card-actions>
    

    이제 아이콘 버튼이 플랫 스타일 텍스트 버튼 앞에 나타납니다.

    버튼이 반대쪽 끝이 아닌 전체 축에 걸쳐 배치되도록 버튼을 정렬할 수도 있습니다. 그렇게 하려면 아래와 같이 layout 속성을 사용하여 해당 값을 justify로 설정합니다.

    <igx-card-actions layout="justify">
        <button igxButton>Button</button>
    
        <button igxIconButton="flat">
            <igx-icon>star</igx-icon>
        </button>
    </igx-card-actions>
    

    스타일링

    카드 스타일링을 시작하려면 모든 테마 기능과 구성 요소 믹스인이 있는 index 파일을 가져와야 합니다.

    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    

    가장 간단한 접근 방식에 따라 card-theme 확장하고 카드 항목의 스타일을 지정하는 일부 매개 변수를 허용하는 새 테마를 만듭니다.

    $colorful-card: card-theme(
        $background: #011627,
        $header-text-color: #FEFEFE,
        $subtitle-text-color: #ECAA53,
        $content-text-color: #FEFEFE
    );
    

    보시다시피, card-theme 항목의 기본 스타일에 대한 몇 가지 유용한 매개변수를 노출합니다.

    Including themes

    마지막 단계는 애플리케이션에 구성 요소 테마를 포함하는 것입니다.

    $legacy-support​ ​true로 설정된 경우 다음과 같은 구성 요소 테마를 포함합니다.

     @include card($colorful-card);
    
    Note

    구성 요소가 Emulated ViewEncapsulation을 사용하는 경우::ng-deep 사용하여 이 캡슐화를 penetrate 해야 합니다.

    :host {
         ::ng-deep {
            @include card($colorful-card);
        }
    }
    

    $legacy-support​ ​false (기본값)로 설정된 경우 다음과 같은 구성 요소 CSS 변수를 포함합니다.

    @include css-vars($colorful-card);
    
    Note

    구성 요소가 Emulated ViewEncapsulation을 사용하는 경우 변수를 재정의하려면 전역 선택기가 필요하므로 여전히:host 사용해야 합니다.

    :host {
        @include css-vars($colorful-card);
    }
    

    Angular Card Demo

    Summary

    이 기사에서 우리는 카드 구성 요소에 대해 많은 내용을 다루었습니다. 먼저 텍스트 내용만 포함된 매우 간단한 카드를 만들었습니다. 그런 다음 카드를 좀 더 매력적으로 만들기 위해 일부 이미지를 추가했습니다. 우리는 경험을 풍부하게 하고 일부 기능을 추가하기 위해 카드, 아바타, 버튼 및 아이콘 내부의 Ignite UI for Angular 사용했습니다. 마지막으로 일부 노출된 테마 색상을 설정하고 사용자 정의 팔레트를 생성하고 스키마를 확장하여 카드 테마를 변경했습니다. 카드 구성 요소는 이 문서의 시작 부분에 있는 카드 데모에서 살펴볼 가치가 있는 더 다양한 레이아웃을 표시할 수 있습니다.

    API and Style References

    카드 API에 대한 자세한 내용은 다음 링크를 참조하세요.

    다음과 같은 기본 제공 CSS 스타일이 이 카드 레이아웃을 구현하는 데 도움이 되었습니다.

    사용된 추가 구성요소 및/또는 지시어:

    Styles:

    Theming Dependencies

    Additional Resources

    우리 커뮤니티는 활동적이며 항상 새로운 아이디어를 환영합니다.