Divider 分割线
分割线组件,用于分隔内容区域。
基础用法
方式 1:自动初始化(推荐)
通过 class="sa-divider" 自动初始化,无需编写 JavaScript 代码。
html
<p>这是一段文字</p>
<div class="sa-divider"></div>
<p>这是另一段文字</p>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
方式 2:JavaScript 方式
html
<div id="demo-divider"></div>
<script>
const divider = new SaDivider('#demo-divider', {
direction: 'horizontal',
contentPosition: 'center',
content: '分割线文本'
});
</script>加载 SanoUI 组件中...
带文字的分割线
可以在分割线中添加文字。
html
<p>这是一段文字</p>
<div class="sa-divider">文字</div>
<p>这是另一段文字</p>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
文字位置
通过 data-content-position 配置文字位置。
html
<div class="sa-divider" data-content-position="left">左对齐</div>
<div class="sa-divider" data-content-position="center">居中</div>
<div class="sa-divider" data-content-position="right">右对齐</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
垂直分割线
通过 data-direction="vertical" 配置垂直分割线。
html
<div style="display: flex; align-items: center; height: 40px;">
<span>文字</span>
<div class="sa-divider" data-direction="vertical"></div>
<span>文字</span>
<div class="sa-divider" data-direction="vertical"></div>
<span>文字</span>
</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
API
构造函数参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
container | 容器选择器或元素 | string | HTMLElement | - |
config.direction | 方向 | 'horizontal' | 'vertical' | 'horizontal' |
config.contentPosition | 文字位置 | 'left' | 'center' | 'right' | 'center' |
config.content | 分割线中间的内容文本 | string | '' |
自动初始化属性
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
class="sa-divider" | 启用自动初始化 | - | - |
data-content-position | 文字位置 | 'left' | 'center' | 'right' | 'center' |
data-direction | 方向 | 'horizontal' | 'vertical' | 'horizontal' |
实例方法
| 方法名 | 说明 | 参数 | 返回值 |
|---|---|---|---|
setDirection(direction) | 设置分割线方向 | direction: 'horizontal' | 'vertical' | this |
destroy() | 销毁分割线实例 | - | this |
静态方法
| 方法名 | 说明 | 参数 | 返回值 |
|---|---|---|---|
initAll(container?) | 初始化容器内所有分割线 | container?: string | HTMLElement | SaDivider[] |
示例代码
HTML 方式
html
<!-- 水平分割线 -->
<div class="sa-divider"></div>
<!-- 带文字的水平分割线 -->
<div class="sa-divider">分割文字</div>
<!-- 文字左对齐 -->
<div class="sa-divider" data-content-position="left">左对齐</div>
<!-- 垂直分割线 -->
<div class="sa-divider" data-direction="vertical"></div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
实际使用场景
场景 1:表单分组
使用分割线将表单字段分组。
html
<form class="sa-form" style="max-width: 500px;" data-label-position="right" data-label-width="100px">
<div class="sa-form-item">
<label class="sa-form-item__label">用户名</label>
<div class="sa-form-item__content">
<div class="sa-input" data-placeholder="请输入用户名" style="width: 100%;"></div>
</div>
</div>
<div class="sa-form-item">
<label class="sa-form-item__label">邮箱</label>
<div class="sa-form-item__content">
<div class="sa-input" data-type="email" data-placeholder="请输入邮箱" data-autocomplete="email" style="width: 100%;"></div>
</div>
</div>
<div class="sa-divider" data-content-position="left">密码设置</div>
<div class="sa-form-item">
<label class="sa-form-item__label">密码</label>
<div class="sa-form-item__content">
<div class="sa-input" data-type="password" data-placeholder="请输入密码" data-autocomplete="new-password" style="width: 100%;"></div>
</div>
</div>
<div class="sa-form-item">
<label class="sa-form-item__label">确认密码</label>
<div class="sa-form-item__content">
<div class="sa-input" data-type="password" data-placeholder="请再次输入密码" data-autocomplete="new-password" style="width: 100%;"></div>
</div>
</div>
</form>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
场景 2:内容分隔
使用分割线分隔不同的内容区块。
html
<div style="max-width: 600px;">
<div style="padding: 1rem;">
<h3>第一部分内容</h3>
<p>这是第一部分的内容描述</p>
</div>
<div class="sa-divider"></div>
<div style="padding: 1rem;">
<h3>第二部分内容</h3>
<p>这是第二部分的内容描述</p>
</div>
<div class="sa-divider" data-content-position="center">分隔线</div>
<div style="padding: 1rem;">
<h3>第三部分内容</h3>
<p>这是第三部分的内容描述</p>
</div>
</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
场景 3:导航菜单分隔
在导航菜单中使用垂直分割线分隔不同的菜单项。
html
<div style="display: flex; align-items: center; gap: 12px; padding: 1rem; background: #f5f5f5; border-radius: 4px;">
<a href="#" style="text-decoration: none; color: #333;">首页</a>
<div class="sa-divider" data-direction="vertical" style="height: 20px;"></div>
<a href="#" style="text-decoration: none; color: #333;">产品</a>
<div class="sa-divider" data-direction="vertical" style="height: 20px;"></div>
<a href="#" style="text-decoration: none; color: #333;">服务</a>
<div class="sa-divider" data-direction="vertical" style="height: 20px;"></div>
<a href="#" style="text-decoration: none; color: #333;">关于</a>
</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
场景 4:卡片内容分隔
在卡片中使用分割线分隔不同的内容区域。
html
<div style="max-width: 400px; border: 1px solid #ddd; border-radius: 8px; padding: 1rem;">
<div style="margin-bottom: 1rem;">
<h3 style="margin: 0 0 0.5rem 0;">标题</h3>
<p style="margin: 0; color: #666;">这是标题的描述信息</p>
</div>
<div class="sa-divider"></div>
<div style="margin-top: 1rem;">
<h4 style="margin: 0 0 0.5rem 0;">详细信息</h4>
<p style="margin: 0; color: #666;">这是详细信息的描述</p>
</div>
<div class="sa-divider" data-content-position="center">操作区域</div>
<div style="margin-top: 1rem; display: flex; gap: 10px;">
<button class="sa-button sa-button--primary">确认</button>
<button class="sa-button">取消</button>
</div>
</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
场景 5:列表项分隔
在列表中使用分割线分隔不同的列表项。
html
<div style="max-width: 400px; border: 1px solid #ddd; border-radius: 8px; overflow: hidden;">
<div style="padding: 1rem;">
<h4 style="margin: 0 0 0.5rem 0;">列表项 1</h4>
<p style="margin: 0; color: #666;">这是第一个列表项的描述</p>
</div>
<div class="sa-divider"></div>
<div style="padding: 1rem;">
<h4 style="margin: 0 0 0.5rem 0;">列表项 2</h4>
<p style="margin: 0; color: #666;">这是第二个列表项的描述</p>
</div>
<div class="sa-divider"></div>
<div style="padding: 1rem;">
<h4 style="margin: 0 0 0.5rem 0;">列表项 3</h4>
<p style="margin: 0; color: #666;">这是第三个列表项的描述</p>
</div>
</div>
<script>
SA.init('body');
</script>加载 SanoUI 组件中...
注意事项
- 自动初始化:分割线组件会在
SA.init()时自动初始化所有带有class="sa-divider"的元素。通过MutationObserver自动监听 DOM 变化,动态添加的分割线元素也会自动初始化 - 文本内容:分割线文本可以从元素的
textContent自动读取,也可以通过构造函数参数content指定 - 垂直分割线:垂直分割线需要在 flex 布局中使用,并设置合适的高度
- 文字位置:文字位置仅对水平分割线有效,垂直分割线不支持文字