搜索
首页web前端css教程WordPress中的造型按钮阻止主题

Styling Buttons in WordPress Block Themes

WordPress 6.1 引入的新功能为在区块编辑器和站点编辑器 UI 中直接应用阴影提供了控制,这篇文章将深入探讨在 WordPress 区块主题中设置按钮样式的方法,特别是利用 theme.json 文件。

为什么选择按钮?这是个好问题,让我们从这里开始。

不同类型的按钮

在 WordPress 区块编辑器的上下文中,我们必须区分两种不同类型的按钮:

  1. 按钮区块内的子区块。
  2. 嵌套在其他区块内的按钮(例如,“文章评论表单”区块)。

如果我们将这两种区块添加到模板中,它们默认情况下具有相同的外观。

但其标记却大相径庭:

<div>
  <a>Button 1</a>
</div>
<p>
  </p>

我们可以看到,HTML 标签名称不同。正是通用的类名——.wp-block-button.wp-element-button——确保了这两个按钮的一致样式。

如果我们编写 CSS,我们会定位这两个类。但众所周知,WordPress 区块主题有不同的样式管理方式,那就是通过 theme.json 文件。

那么,如何在不编写实际 CSS 的情况下在 theme.json 中定义按钮样式呢?让我们一起完成它。

创建基本样式

theme.json 是一个结构化的模式集,以属性:值对的形式编写。顶级属性称为“sections”,我们将使用 styles 部分。这是所有样式指令所在的位置。

我们将特别关注 styles 中的 elements。此选择器定位在区块之间共享的 HTML 元素。这是我们正在使用的基本框架:

// theme.json
{
  "version": 2,
  "styles": {
    "elements": {
      // etc.
    }
  }
}

我们需要做的就是定义一个按钮元素。

{
  "version": 2,
  "styles": {
    "elements": {
      "button": {
        // etc.
      }
    }
  }
}

该按钮对应于用于在前端标记按钮元素的 HTML 元素。这些按钮包含可能是我们两种按钮类型之一的 HTML 标签:独立组件(即按钮区块)或嵌套在另一个区块中的组件(例如,文章评论区块)。

与其必须为每个单独的区块设置样式,不如创建共享样式。让我们继续为主题中的两种按钮类型更改默认背景色和文本颜色。其中有一个颜色对象,它反过来支持背景和文本属性,我们在其中设置所需的值:

{
  "version": 2,
  "styles": {
    "elements": {
      "button": {
        "color": {
          "background": "#17a2b8",
          "text": "#ffffff"
        }
      }
    }
  }
}

这会更改两种按钮的颜色。

如果打开 DevTools 并查看 WordPress 为按钮生成的 CSS,我们会看到 .wp-element-button 类添加了我们在 theme.json 中定义的样式:

.wp-element-button {
  background-color: #17a2b8;
  color: #ffffff;
}

这些是我们的默认颜色!接下来,我们希望在用户与按钮交互时向他们提供视觉反馈。

实现交互式按钮样式

由于这是一个关于 CSS 的站点,我敢打赌你们中的许多人已经熟悉链接和按钮的交互状态。我们可以将鼠标光标悬停在它们上面(:hover),将它们制表到焦点(:focus),点击它们以使它们处于活动状态(:active)。甚至还有一个 :visited 状态,可以向用户直观地表明他们之前点击过这个。

这些是 CSS 伪类,我们使用它们来定位链接或按钮的交互。

在 CSS 中,我们可能会像这样设置 :hover 状态的样式:

<div>
  <a>Button 1</a>
</div>
<p>
  </p>

theme.json 中,我们将使用这些伪类扩展现有的按钮声明。

// theme.json
{
  "version": 2,
  "styles": {
    "elements": {
      // etc.
    }
  }
}

请注意其“结构化”特性。我们基本上遵循一个概要:

  • 元素
    • 元素
      • 对象
        • 属性

我们现在已经完成了按钮的默认和交互式样式的完整定义。但是,如果我们想设置嵌套在其他区块中的某些按钮的样式呢?

设置嵌套在各个区块中的按钮的样式

让我们假设我们希望所有按钮都具有我们的基本样式,但有一个例外。我们希望“文章评论表单”区块的提交按钮为蓝色。我们该如何实现呢?

此区块比按钮区块更复杂,因为它包含更多活动部件:表单、输入、说明性文本和按钮。为了定位此区块中的按钮,我们必须遵循与按钮元素相同的 JSON 结构,但应用于映射到 core/post-comments-form 元素的“文章评论表单”区块:

{
  "version": 2,
  "styles": {
    "elements": {
      "button": {
        // etc.
      }
    }
  }
}

请注意,我们不再在 elements 中工作了。相反,我们在 blocks 内工作,它用于配置实际的区块。相比之下,按钮被认为是一个全局元素,因为它们可以嵌套在区块中,即使它们也可以作为独立区块使用。

JSON 结构支持元素内的元素。因此,如果“文章评论表单”区块中存在按钮元素,我们可以在 core/post-comments-form 区块中定位它:

{
  "version": 2,
  "styles": {
    "elements": {
      "button": {
        "color": {
          "background": "#17a2b8",
          "text": "#ffffff"
        }
      }
    }
  }
}

此选择器意味着我们不仅定位特定区块——我们还定位包含在该区块中的特定元素。现在,我们有一组应用于主题中所有按钮的默认按钮样式,以及一组应用于包含在“文章评论表单”区块中的特定按钮的样式。

WordPress 生成的 CSS 因此具有更精确的选择器:

.wp-element-button {
  background-color: #17a2b8;
  color: #ffffff;
}

如果我们想为“文章评论表单”按钮定义不同的交互式样式呢?这与我们为默认样式所做的方法相同,只是这些样式是在 core/post-comments-form 区块内定义的:

<div>
  <a>Button 1</a>
</div>
<p>
  </p>

非区块中的按钮怎么办?

WordPress 会自动生成并应用正确的类来输出这些按钮样式。但是,如果您使用支持区块和全站编辑但还包含“经典”PHP 模板的“混合”WordPress 主题怎么办?或者,如果您创建了一个自定义区块,甚至有一个包含按钮的旧版短代码怎么办?这些都不受 WordPress 样式引擎处理!

别担心。在所有这些情况下,您都将在模板、区块或短代码标记中添加 .wp-element-button 类。然后将应用 WordPress 生成的样式。

在某些情况下,您可能无法控制标记。例如,某些区块插件可能过于武断,并随意应用其自己的样式。这时,您通常可以转到区块设置面板中的“高级”选项并在那里应用该类:

总结

虽然一开始在 theme.json 中编写“CSS”可能会感觉很别扭,但我发现它会成为第二天性。与 CSS 一样,您可以使用正确选择器广泛或非常精确地应用有限数量的属性。

并且不要忘记使用 theme.json 的三个主要优点:

  1. 样式应用于前端视图和区块编辑器中的按钮。
  2. 您的 CSS 将与未来的 WordPress 更新兼容。
  3. 生成的样式与区块主题和经典主题都兼容——无需在单独的样式表中复制任何内容。

如果您在项目中使用了 theme.json 样式,请分享您的经验和想法。我期待阅读任何评论和反馈!

以上是WordPress中的造型按钮阻止主题的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
什么是CSS网格?什么是CSS网格?Apr 30, 2025 pm 03:21 PM

CSS网格是创建复杂,响应式Web布局的强大工具。它简化了设计,提高可访问性并提供了比旧方法更多的控制权。

什么是CSS Flexbox?什么是CSS Flexbox?Apr 30, 2025 pm 03:20 PM

文章讨论了CSS FlexBox,这是一种布局方法,用于有效地对齐和分布响应设计中的空间。它说明了FlexBox用法,将其与CSS网格进行了比较,并详细浏览了浏览器支持。

我们如何使用CSS使网站迅速响应?我们如何使用CSS使网站迅速响应?Apr 30, 2025 pm 03:19 PM

本文讨论了使用CSS创建响应网站的技术,包括视口元标签,灵活的网格,流体媒体,媒体查询和相对单元。它还涵盖了使用CSS网格和Flexbox一起使用,并推荐CSS框架

CSS盒装属性有什么作用?CSS盒装属性有什么作用?Apr 30, 2025 pm 03:18 PM

本文讨论了CSS盒装属性,该属性控制了元素维度的计算方式。它解释了诸如Content-Box,Border-Box和Padding-Box之类的值,以及它们对布局设计和形式对齐的影响。

我们如何使用CSS动画?我们如何使用CSS动画?Apr 30, 2025 pm 03:17 PM

文章讨论使用CSS,关键属性并与JavaScript结合创建动画。主要问题是浏览器兼容性。

我们可以使用CSS向我们的项目添加3D转换吗?我们可以使用CSS向我们的项目添加3D转换吗?Apr 30, 2025 pm 03:16 PM

文章讨论了Web项目的3D转换,关键属性,浏览器兼容性和性能注意事项的讨论。(角色计数:159)

我们如何在CSS中添加梯度?我们如何在CSS中添加梯度?Apr 30, 2025 pm 03:15 PM

文章讨论了使用CSS梯度(线性,径向,重复)来增强网站视觉效果,添加深度,焦点和现代美学。

CSS中的伪元素是什么?CSS中的伪元素是什么?Apr 30, 2025 pm 03:14 PM

文章讨论了CSS中的伪元素,它们在增强HTML样式方面的使用以及与伪级的差异。提供实用的例子。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),