C#/Blazor

[Blazor] BlazorComponentUtilities 의 CssBuilder, StyleBuilder 사용하기

kjun.kr 2023. 8. 3. 22:33
728x90
728x170

BlazorComponentUtilities 의 CssBuilder, StyleBuilder 사용하면 내가 원하는 스타일을 코드로 지정할 수 있습니다.

1. BlazorComponentUtilities Nuget package 설치

_Imports.razor 에 @using BlazorComponentUtilities 추가합니다.

2. 간단한 Style 적용 예시

@page "/"

<PageTitle>Index</PageTitle>

<button style="@testButtonStyle" onclick="@Onclick">
    test
    </button>

@code
{
    private bool isTest {get;set;} = false;

    private string testButtonStyle => new StyleBuilder()
                                    .AddStyle("width", "100%", isTest)
                                    .AddStyle("color", "red", isTest)
                                    .Build();

    private void Onclick(MouseEventArgs e)
    {
        isTest = !isTest;
    }
}

위처럼 StyleBuilder 를 통해 어떤 조건에 부합되는 경우 style 을 적용할 수 있습니다.

isTest 가 true 인 경우 width:100% 가 적용되며

isTest 가 false 인 경우 color:red 가 적용됩니다.

[결과 화면]

3. Component 를 이용한 적용 예시

ButtonStyle.cs

namespace Blazor.ComponentUtiitiesTest.Shared
{
    public enum ButtonStyle
    {
        Primary, Secondary, Outlined
    }
}

TestButton.razor

<button class="@buttonClass" style="@buttonStyle @Style" disabled="@IsDisabled" @onclick="OnClick">
    @Text 
</button>

@code {

    /// <summary>
    /// 적용할 Style
    /// </summary>
    [Parameter]
    public ButtonStyle ButtonStyle { get; set; } = ButtonStyle.Primary;

    /// <summary>
    /// 버튼에 표시될 Text
    /// </summary>
    [Parameter]
    public string? Text { get; set; }

    /// <summary>
    /// 너비 100% 로 할것인지 여부
    /// </summary>
    [Parameter]
    public bool IsFullWidth { get; set; }

    /// <summary>
    /// Disable 여부
    /// </summary>
    [Parameter]
    public bool IsDisabled { get; set; }

    /// <summary>
    /// 클릭 이벤트
    /// </summary>
    [Parameter]
    public EventCallback<MouseEventArgs> OnClick { get; set; }

    /// <summary>
    /// Class
    /// </summary>
    [Parameter]
    public string? Class { get; set; }

    /// <summary>
    /// Style
    /// </summary>
    [Parameter]
    public string? Style { get; set; }

    private string buttonClass => new CssBuilder()
                                .AddClass("button")
                                .AddClass("primary", ButtonStyle == ButtonStyle.Primary) // ButtonStyle 이 Primary 인 경우 primary 적용
                                .AddClass("secondary", ButtonStyle == ButtonStyle.Secondary) // ButtonStyle 이 Secondary 인 경우 secondary 적용
                                .AddClass("outlined", ButtonStyle == ButtonStyle.Outlined) // ButtonStyle 이 Outlined 인 경우 outlined 적용
                                .AddClass("disabled", IsDisabled)
                                .AddClass("Class", !string.IsNullOrWhiteSpace(Class))
                                .Build();

    private string buttonStyle => new StyleBuilder()
                                .AddStyle("width", "100%", IsFullWidth)
                                .AddStyle("color", "red", IsFullWidth)
                                .Build();
}

TestButton.razor.css

.button {
    border: none;
    padding: 10px 40px;
    margin : 5px;
    font-size: 20px;
    transition: 0.3s;
    cursor: pointer;
}

    .button:hover:enabled {
        background-color: #CCCCCC;
    }

.primary {
    background-color: #302D83;
    color: white;
}

.secondary {
    background-color: #7362D8;
    color: lightgray;
}

.outlined {
    background-color: transparent;
    color: black;
    border: 1px solid black;
}

.disabled {
    cursor: not-allowed;
    opacity: 0.5;
}

Index.razor

@page "/"

<PageTitle>Index</PageTitle>
<TestButton Text="First Button" ButtonStyle="ButtonStyle.Primary" />
<TestButton Text="Secondary Button" ButtonStyle="ButtonStyle.Secondary" />
<TestButton Text="Outlined Button" ButtonStyle="ButtonStyle.Outlined" OnClick="Onclick" />
<TestButton Text="Disabled FullWidth Button"
            Style="border: 3px solid blue;" Class="mt-4" IsDisabled="true" IsFullWidth="true" />

<button style="@testButtonStyle" onclick="@Onclick">
    test
</button>

@code
{
    private bool isTest {get;set;} = false;

    private string testButtonStyle => new StyleBuilder()
                                    .AddStyle("width", "100%", isTest)
                                    .AddStyle("color", "red", !isTest)
                                    .Build();

    private void Onclick(MouseEventArgs e)
    {
        isTest = !isTest;
    }
}

위 코드를 보면 알수 있듯이 CssBuilder 를 이용하여 css 에 정의된 내용을 선택하여 적용할 수 있으며 사용자가 정의한 Style 도 적용가능합니다.

실행결과

[Source]

https://github.com/kei-soft/Blazor.AppTest/tree/master/Blazor.ComponentUtiitiesTest

 

728x90
그리드형