”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 具有样式和变体的 Flexbox 按钮

具有样式和变体的 Flexbox 按钮

发布于2024-11-08
浏览:684

该按钮使用 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]删除
最新教程 更多>
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-12-23
  • OpenCV 的 `cvWaitKey()` 函数如何管理用户交互和窗口事件?
    OpenCV 的 `cvWaitKey()` 函数如何管理用户交互和窗口事件?
    探索 OpenCV 的“cvWaitKey()”功能OpenCV 的“cvWaitKey()”函数在管理用户交互方面发挥着至关重要的作用OpenCV 窗口。让我们深入研究其内部工作原理和典型用例:功能概述cvWaitKey(x) 提供两个主要功能:击键检测:它等待用户在 OpenCV 窗口上按指定的...
    编程 发布于2024-12-23
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-12-23
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-23
  • PHP 中的 `echo`、`print`、`print_r` 和 `var_dump` 有什么区别?
    PHP 中的 `echo`、`print`、`print_r` 和 `var_dump` 有什么区别?
    PHP中Echo、Print、Print_r和Var_dump的区别许多PHP开发者经常使用echo和print_r来输出数据。然而,令人惊讶的是,印刷品很少被使用。尽管它们有明显的相似之处,但这些语言结构具有不同的特征。Echo 与 Printecho 和 print 都主要用于显示字符串。然而,...
    编程 发布于2024-12-23
  • 如何使用 jQuery 高效创建 DOM 元素?
    如何使用 jQuery 高效创建 DOM 元素?
    使用 jQuery 创建 DOM 元素如果您希望增强 JavaScript 代码,您会对利用 jQuery 的功能来简化 DOM 操作感到好奇.jQuery 确实提供了创建 DOM 元素的替代方法,正如您在 $.create("div") 中注意到的那样。然而,这种方法不是 jQ...
    编程 发布于2024-12-23
  • 如何在 Eclipse 中轻松配置 Java 项目的本机库路径?
    如何在 Eclipse 中轻松配置 Java 项目的本机库路径?
    Eclipse 中的 Java 库发现困境:揭开秘密许多开发人员都在努力解决在 Eclipse 中配置 Java 库路径的艰巨任务,当应用程序执行由于缺少 .dll/.so/.jnilib 文件而停止时,会遇到挫败感。针对特定运行配置调整 VM 参数的传统方法通常被证明是无效的。相反,关键在于 Ec...
    编程 发布于2024-12-23
  • CSS 样式只能设置半个字符吗?还是图像是唯一的选择?
    CSS 样式只能设置半个字符吗?还是图像是唯一的选择?
    CSS 只能应用于半个字符吗?许多人寻求一种技术来仅设计半个字符的样式,因为例如,通过使一半透明。然而,尽管搜索了诸如“将 CSS 应用到字符的 50%”之类的方法,但到目前为止,还没有找到运气。话虽这么说,是否存在 CSS 或 JavaScript 解决方案,还是求助于图像是唯一的选择?新颖的解决...
    编程 发布于2024-12-23
  • 如何在 Ubuntu 10.04 LTS 上安装用于 C++ 开发的 OpenSSL 库?
    如何在 Ubuntu 10.04 LTS 上安装用于 C++ 开发的 OpenSSL 库?
    在 Ubuntu 10.04 LTS 上安装 OpenSSL 库以进行 C 开发正如您在询问中提到的,使用 OpenSSL 构建代码需要适当的库。在您的情况下,您遇到了指示 OpenSSL 库文件丢失的错误。本指南将通过解释如何在 Ubuntu 10.04 LTS 上安装所需的 OpenSSL C ...
    编程 发布于2024-12-23
  • 如何在 WordPress 中处理带有 IN() 条件的准备语句?
    如何在 WordPress 中处理带有 IN() 条件的准备语句?
    在 WordPress 中使用 IN() 条件处理准备语句WordPress 提供准备语句来防止 SQL 注入攻击并提高查询性能。但是,在字符串中使用具有多个值的 IN() 条件可能会带来挑战。问题陈述:考虑以下情况:$villes = '"paris","fes&qu...
    编程 发布于2024-12-23
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-12-23
  • 泛型如何提高 Go 中代码的可重用性和类型安全性?
    泛型如何提高 Go 中代码的可重用性和类型安全性?
    理解 Go 中的泛型:开发人员指南泛型是编程中的一个基本概念,它允许开发人员创建可与多种数据类型。在像 Ruby 这种动态类型语言这样的语言中,通用概念可能并不熟悉。本文将深入解释 Go 这种静态类型语言中泛型的含义。了解静态类型与动态类型在动态类型语言中,变量可以保存任何类型的数据,无需显式声明。...
    编程 发布于2024-12-23
  • Python 中的表达式和语句有什么区别?
    Python 中的表达式和语句有什么区别?
    Python 中的表达式与语句在 Python 中,表达式和语句构成了代码的基本构建块。虽然两者在程序中具有不同的用途,但区分它们对于有效的编码实践至关重要。理解表达式表达式是表示值或执行操作的语法结构。计算。它们通常由标识符、文字和运算符组成,例如算术和布尔运算符、函数调用、切片运算符等。表达式的...
    编程 发布于2024-12-23
  • C++跨平台如何获取当前时间和日期?
    C++跨平台如何获取当前时间和日期?
    在 C 跨平台中获取当前时间和日期C 标准库现在提供了一种方便且可移植的方式来检索当前时间并通过 std::chrono::system_clock 类获取日期。在 C 11 中引入,此类提供了一个独立于系统的接口,用于访问高分辨率计时信息。语法:auto now = std::chrono::sy...
    编程 发布于2024-12-23
  • JavaScript 对象解构如何简化函数参数?
    JavaScript 对象解构如何简化函数参数?
    解开函数参数中 JavaScript 对象解构的语法如果你想用这样的对象参数定义函数:function moo({ a, b, c }) { // valid syntax! print(a); // prints 4 }...你没有出现幻觉。这种语法称为解构,允许您将对象属性直接解压到函数...
    编程 发布于2024-12-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3