」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 具有樣式和變體的 Flexbox 按鈕

具有樣式和變體的 Flexbox 按鈕

發佈於2024-11-08
瀏覽:792

该按钮使用 CSS Flexbox 进行样式化,包括主要、次要和第三级样式,所有这些样式都在嵌套 CSS 中构建,以提高清晰度和可维护性,其变化形式如下:

  • 带文字
  • 带有文字和图标(左/右/左&右)
  • 只有图标
  • 状态
  • 全角
  • 残疾人类型

Flexbox button with tyles and variations

HTML代码:

Link


Primary

Button text Button text Button text Button text

Secondary

Button text Button text Button text Button text

Tertiary

Button text Button text Button text Button text

Width modifier

Categories Categories Categories

Disabled

Button text Button text Button text

Status

CSS代码:

/* ---------------------------------------------------------- */
/*                     Snippflow Button                       */
/* ---------------------------------------------------------- */

.sf-button {
    --sf-button-gap: 8px;
    --sf-button-padding-top: 12px;
    --sf-button-padding-bottom: 12px;
    --sf-button-padding-left: 16px;
    --sf-button-padding-right: 16px;
    --sf-button-border-radius: 8px;
    --sf-button-box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);

    --sf-button-primary-color: #fff;
    --sf-button-primary-bg: #46a787;
    --sf-button-primary-border: #3f9b7d;
    --sf-button-primary-hover-color: #fff;
    --sf-button-primary-hover-bg: #3c9376;
    --sf-button-primary-hover-border: #378c70;

    --sf-button-secondary-color: #121924;
    --sf-button-secondary-bg: #F8F8F9;
    --sf-button-secondary-border: #cbd5e1;
    --sf-button-secondary-hover-color: #121924;
    --sf-button-secondary-hover-bg: #fff;
    --sf-button-secondary-hover-border: #cbd5e1;

    --sf-button-tertiary-color: #121924;
    --sf-button-tertiary-bg: transparent;
    --sf-button-tertiary-border: transparent;
    --sf-button-tertiary-hover-color: #121924;
    --sf-button-tertiary-hover-bg: #e0e5ea;
    --sf-button-tertiary-hover-border: transparent;

    --sf-button-tertiary-status: #c82020;
}

a.sf-button,
input[type="submit"].sf-button,
input[type="reset"].sf-button,
input[type="button"].sf-button,
button.sf-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--sf-button-gap);
    position: relative;
    box-sizing: border-box;
    font-size: inherit;
    font-weight: 500;
    line-height: 1;
    padding: var(--sf-button-padding-top) var(--sf-button-padding-right) var(--sf-button-padding-bottom) var(--sf-button-padding-left);
    border: 1px solid;
    border-radius: var(--sf-button-border-radius);
    white-space: nowrap;
    outline: unset;
    text-decoration: none;
    cursor: pointer;
    transition: all 0.3s ease-in-out;

    &[aria-expanded="true"],
    &:hover {
        text-decoration: none;
    }

    /* Is fit  (100%)*/
    &.is-fit {
        width: 100%;
    }

    /*   Is fit margin */
    &   .is-fit {
        margin-top: 10px; /* btn under other is-fit btm */
    }

    /* Has status */
    &.has-status {
        :after {
            content: "";
            display: block;
            width: 8px;
            height: 8px;
            border-radius: 100%;
            background-color: var(--sf-button-tertiary-status);
            position: absolute;
            right: 5px;
            top: 5px;
            animation: sp-status-pulse 1s infinite ease-in-out alternate;
        }
    }

    /* Is disabled */
    &.disabled,
    &:disabled,
    &[aria-disabled="true"] {
        cursor: default;
        filter: saturate(0%);
        opacity: .7;
        background: transparent;
        transform: none;
        box-shadow: none;
        outline: none;

        &:hover {
            color: initial;
            pointer-events: none;
        }
    }

    /*  Icon */
     & > i {
        min-width: 18px;
        font-style: normal;
        text-align: center;
    }

    /* Has only icon */
    &.has-only-icon {
        padding: var(--sf-button-padding-top);
    }

    /* Primary button */
    &.is-primary {
        color: var(--sf-button-primary-color);
        background-color: var(--sf-button-primary-bg);
        border-color: var(--sf-button-primary-border);
        box-shadow: var(--sf-button-box-shadow);

        &:hover:not(:disabled) {
            color: var(--sf-button-primary-color);
            background-color: var(--sf-button-primary-hover-bg);
            border-color: var(--sf-button-primary-hover-border);
        }
    }

    /* Secondary button */
    &.is-secondary {
        color: var(--sf-button-secondary-color);
        background-color: var(--sf-button-secondary-bg);
        border-color: var(--sf-button-secondary-border);
        box-shadow: var(--sf-button-box-shadow);

        &:hover:not(:disabled) {
            color: var(--sf-button-secondary-color);
            background-color: var(--sf-button-secondary-hover-bg);
            border-color: var(--sf-button-secondary-hover-border);
        }
    }

    /* Tertiary button */
    &.is-tertiary {
        color: var(--sf-button-tertiary-color);
        background-color: var(--sf-button-tertiary-bg);
        border-color: var(--sf-button-tertiary-border);

        &:hover:not(:disabled) {
            color: var(--sf-button-tertiary-color);
            background-color: var(--sf-button-tertiary-hover-bg);
            border-color: var(--sf-button-tertiary-hover-border);
        }
    }

}

@keyframes sp-status-pulse {
    from { transform: scale(0.8); }
    to { transform: scale(1.1); }
}

请参阅以下 Codepen 进行演示:

PS。我希望它会有用;)

完整文章:https://snippflow.com/snippet/flexbox-button-with-3-styles-and-variations/
CSS 片段

版本聲明 本文轉載於:https://dev.to/snippflow/flexbox-button-with-3-styles-and-variations-5al?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 最大化效能:深入探討 PixiJS 最佳化
    最大化效能:深入探討 PixiJS 最佳化
    利用先进的策略和技术将您的 PixiJS 应用程序提升到新的水平 前言 这篇文章介绍了在 CPU / 内存方面可以最好地优化 pixiJS 中多个元素的渲染的不同方法。例如,考虑在没有任何缓存的情况下重新渲染每一帧(在 CPU 使用率方面表现良好)或将渲染的图形缓存在内存中之间的差异...
    程式設計 發佈於2024-11-08
  • 如何更改 C++ 中的目前工作目錄?
    如何更改 C++ 中的目前工作目錄?
    更改 C 中的當前工作目錄 處理文件和 I/O 時經常遇到需要調整當前工作目錄的情況運作。 C 透過使用 std::filesystem::current_path 函數為此任務提供了一個獨立於平台的解決方案。 C 17 解決方案:std::filesystem::current_path 在C 1...
    程式設計 發佈於2024-11-08
  • 將 CSV 轉換為 JSON:快速指南 + 線上工具
    將 CSV 轉換為 JSON:快速指南 + 線上工具
    CSV(逗號分隔值)是一種廣泛使用的儲存表格資料的格式,常見於電子表格和資料交換。雖然 CSV 對於資料儲存來說簡單且有效,但 JSON(JavaScript 物件表示法)已成為在 Web 應用程式中處理結構化資料的首選格式。無論您是建立 API、匯入/匯出數據,還是只是處理 JavaScript ...
    程式設計 發佈於2024-11-08
  • RGFW 底層:XDrag &#n Drop
    RGFW 底層:XDrag &#n Drop
    Introduction To handle Drag 'n Drop events with X11, you must use the XDnD protocol. Although the XDnD protocol is significantly more complic...
    程式設計 發佈於2024-11-08
  • 關於 React useState Hook 你需要了解的一切 - 裡面的實際例子
    關於 React useState Hook 你需要了解的一切 - 裡面的實際例子
    ReactJS useState Hook:初学者指南 介绍 ReactJS 是一个用于构建用户界面的流行 JavaScript 库,引入了 hooks 来简化和增强组件逻辑。 React 中最常用的钩子之一是 useState 钩子,它管理组件的状态。了解其工作原...
    程式設計 發佈於2024-11-08
  • 招聘 Django 開發人員
    招聘 Django 開發人員
    大家好,我是Nicholas,一名軟體開發人員,在建立強大的Web 應用程式方面擁有3 年經驗,利用Python、JavaScript 和Ruby 提供最新行業的業務解決方案我目前正在尋找全職機會來學習和發展我的技能,同時也提供我獨特的能力,例如毅力,團隊合作、有效溝通、跟隨力等。我希望與我們這一代...
    程式設計 發佈於2024-11-08
  • 我用C開發了神經網路庫
    我用C開發了神經網路庫
    用Python開發人工智慧對我來說相當困難,因為我以前從未使用過Python。但我懂 C 和數學,那為什麼我不能用 C 開發它? 我的故事就是這樣開始的。我決定開發它。 我首先在C播放清單中觀看了Tsoding Daily的ml。這對我來說是一個很好的資源。數學和神經網路的解釋非常棒!所以我用這...
    程式設計 發佈於2024-11-08
  • 四種原始形態的故事
    四種原始形態的故事
    在Computoria王国,一个充满逻辑和神秘的国度,住着四位高贵的存在,每一位都掌握着编程本身核心的钥匙。他们不像普通公民或流浪的陌生人;他们不像普通人。它们是存在的本质,是代码和计算蓬勃发展的土地上创造的气息和骨骼。 他们被所有人,无论老少,都知道这些永恒的名字:Int、Float、Str和Bo...
    程式設計 發佈於2024-11-08
  • 如何在 Python 中修改函數內的列表:透過引用傳遞或就地修改?
    如何在 Python 中修改函數內的列表:透過引用傳遞或就地修改?
    修改函數內的列表在函數中使用列表參數時,傳遞給函數的引用指向原始列表。函數內對 list_arg 變數所做的任何修改都僅限於其局部範圍,不會影響原始列表。 要規避此問題並修改原始列表,需要直接將元素分配給列表而不是將整個列表重新分配給新值。這是一個例子:def function1(list_arg)...
    程式設計 發佈於2024-11-08
  • React Hooks:詳細說明
    React Hooks:詳細說明
    React Hooks 是允許您從功能元件「掛鉤」React 狀態和生命週期功能的函數。 Hooks 在 React 16.8 中引入,讓您無需編寫類別元件即可使用狀態和其他 React 功能。 我們來分解Hooks背後的核心概念: 1. 為什麼要使用 React Hooks? 在...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 產生器:強大的程式碼流控制工具
    了解 JavaScript 產生器:強大的程式碼流控制工具
    生成器是 JavaScript 中最强大的功能之一,它允许我们编写可以根据需要暂停和恢复的代码。与一次执行所有代码的常规函数​​不同,生成器使用延迟执行,增量返回值,从而更容易处理数据序列、迭代或长时间运行的进程。 发电机如何工作? 在JavaScript中,生成器是使用functi...
    程式設計 發佈於2024-11-08
  • 如何在 groupby 作業期間維護 Pandas DataFrame 中的其他欄位?
    如何在 groupby 作業期間維護 Pandas DataFrame 中的其他欄位?
    在Groupby 操作期間維護其他列對pandas 資料框執行groupby 操作時,通常需要保留不屬於的列參與分組或聚合過程。預設情況下,操作完成後將刪除這些其他欄位。如果保留的列包含有價值的信息,這可能會出現問題。 考慮以下資料框: item diff otherstuff ...
    程式設計 發佈於2024-11-08
  • 根據您文章的內容,以下是一些適合問答格式的標題選項:

選項 1(直接):

* 如何從 OpentelemetryContext Pr 中的字串追蹤 ID 建構跨度
    根據您文章的內容,以下是一些適合問答格式的標題選項: 選項 1(直接): * 如何從 OpentelemetryContext Pr 中的字串追蹤 ID 建構跨度
    在 Opentelemetry 中根據追蹤 ID 建構 Span上下文傳播通常用於檢索父追蹤 ID 並建立子 Span。但是,在使用標頭進行訊息交換的情況下,需要替代方法。 要從字串追蹤ID 建立範圍,可以依照下列步驟操作:建構一個解析Trace 和Span ID 的函式:func construc...
    程式設計 發佈於2024-11-08
  • 如何將 JSON 字串轉換為 Python 字典?
    如何將 JSON 字串轉換為 Python 字典?
    如何將JSON 字串轉換為Python 字典JSON(JavaScript 物件表示法)是一種流行的資料格式,通常以於表示複雜的資料結構。在 Python 中,您可以使用 json 模組來處理 JSON 資料。 一個常見的任務是將 JSON 字串轉換為 Python 字典。這允許您以鍵值對的形式存取...
    程式設計 發佈於2024-11-08
  • 治療高血壓的整體阿育吠陀方法
    治療高血壓的整體阿育吠陀方法
    管理高血壓的整體阿育吠陀方法 阿育吠陀治療高血壓提供了一種自然和整體的方法來管理這一常見的健康問題。在阿育吠陀中,高血壓通常與能量的不平衡有關,特別是皮塔和瓦塔。這種古老的醫學體系旨在透過個人化治療和生活方式改變來恢復平衡並促進整體健康。 治療高血壓的阿育吠陀療法包括使用特定草藥,如阿朱那、南非醉...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3