humanmade/hm-tabs-block

WordPress块编辑器的简单标签块

安装: 566

依赖: 0

建议者: 0

安全: 0

星标: 12

关注者: 15

分支: 0

开放问题: 2

语言:JavaScript

类型:wordpress-plugin

1.0.0 2024-02-14 10:25 UTC

This package is auto-updated.

Last update: 2024-09-14 11:50:50 UTC


README

这是一个非常简单的WordPress块编辑器标签块。

目标是创建一个极具灵活性的工具,提供简单的标记而不包含任何样式,便于您轻松将其与主题集成。

它还旨在提高可访问性。实现方式参考了MDN Aria标签角色文档

性能也非常重要。JavaScript轻量且无依赖。

标签块由2个块组成。一个是容器标签块,另一个是子标签项块。标签项块只是一个包装器,允许您添加任何您希望的内容。

保存的标记。

本块的一个目标是将保存的HTML保持在非常简洁。即使此插件被禁用,也应该看起来不错。

所有功能和交互元素都是即时创建的,无论是服务器端渲染还是在JavaScript中构建。

标签的样式。

标签是功能性的,但没有样式。

以下是一个标记示例,展示了您可以使用来样式的类。

<div class="hm-tabs hm-tabs--is-initialized">
    <div class="hm-tabs__nav" role="tablist">
        <button class="hm-tabs__nav-button hm-tabs__nav-button--is-active">Tab 1</button>
        <button class="hm-tabs__nav-button">Tab 2</button>
        ...
    </div>
    <div class="hm-tabs__content">
        <div class="wp-block-hm-tabs-item hm-tabs-item">
            <h2 class="hm-tabs-item__title">Tab 1</h2>
            <div class="hm-tabs-item__content">
            </div>
        </div>
        <div class="wp-block-hm-tabs-item hm-tabs-item">
            <h2 class="hm-tabs-item__title">Tab 2</h2>
            <div class="hm-tabs-item__content">
            </div>
        </div>
        ...
    </div>
</div>

示例样式

以下是一些用于美化复古风格的标签的CSS。

.hm-tabs__nav {
	display: flex;
	position: relative;
	z-index: 1;
	margin: 0 0 -1px 0;
}

.hm-tabs__nav-button {
	background-color: #ddd;
	border: 1px solid #aaa;
	padding: 12px 16px;
	margin: 0;
	font-size: 12px;
}

.hm-tabs__nav-button + .hm-tabs__nav-button {
	border-left: none;
}

.hm-tabs__nav-button--is-active {
	background-color: #fff;
	border-bottom-color: #fff;
}

.hm-tabs__content {
	background-color: #fff;
	border: 1px solid #aaa;
	padding: 16px;
}

一些有用的样式和动画类。

  • .hm-tabs--is-initialized 当JavaScript初始化标签功能时添加。
  • .hm-tabs--is-visible 当标签首次滚动到视图中时添加。
  • `.hm-tabs--is-focused`` 当标签处于活动状态时添加。
  • .hm-tabs-item--is-active 当标签显示后添加,之后移除。

动画示例

除了上述样式外,使用此样式在切换标签时创建滑动/淡入效果。

@keyframes testFadeInLeft {
	from {
		visibility: hidden;
		opacity: 0;
		-webkit-transform: translate3d(-100%, 0, 0);
		transform: translate3d(-100%, 0, 0);
	}

	1% {
		visibility: visible;
	}

	to {
		opacity: 1;
		-webkit-transform: translateZ(0);
		transform: translateZ(0);
	}
}

@keyframes testFadeOutRight {
	from {
		opacity: 1;
		visibility: visible;
	}

	99% {
		visibility: visible;
	}

	to {
		opacity: 0;
		-webkit-transform: translate3d(100%, 0, 0);
		transform: translate3d(100%, 0, 0);
		visibility: hidden;
	}
}

.hm-tabs__content {
	position: relative;
	display: grid;
	overflow: hidden;

	.hm-tabs-item {
		grid-column: 1;
		grid-row: 1;

		&[hidden="true"] {
			display: block;
			opacity: 0;
			visibility: hidden;
		}
	}
}

.hm-tabs-item {
	position: relative;

	&:not(.hm-tabs-item--is-active) {
		animation-duration: 0.25s;
		animation-name: testFadeOutRight;
	}

	&--is-active {
		opacity: 1;
		animation-duration: 0.25s;
		animation-name: testFadeInLeft;
	}
}