游乐游手机版
首页/前端开发/文章详情

TinyRobot Container优雅构建AI对话容器

时间:2026-06-15 06:58
TinyRobot的TrContainer组件为AI对话应用提供开箱即用的容器方案,解决定位布局、全屏切换与响应式适配难题。支持显示隐藏控制、全屏模式、自定义标题与操作区,底部输入区稳定固定,并通过丰富CSS变量灵活定制样式。

TinyRobot Container:打造优雅的AI对话容器组件

在构建AI对话应用时,容器组件看似简单,实则暗藏诸多挑战。它绝不仅仅是一个普通的“外壳”——需要处理定位布局、全屏切换、响应式适配,还要为对话区域、输入框和操作栏精确分配空间。如果你曾手动实现这些功能,一定经历过定位错乱、全屏适配失控、输入框挤压消息显示区域的痛苦。

TinyRobot Container构建优雅的AI对话容器

TinyRobot 的 TrContainer 组件,正是为解决这些痛点而设计。开箱即用,它提供了AI对话容器所需的全部能力:显示/隐藏控制、全屏模式、可自定义的标题栏、固定底部的输入区,以及丰富的CSS变量,方便你随心定制样式。

基础用法

TrContainer 的核心功能是通过 v-model:show 实现容器的显示与隐藏。这是一个必填属性,你可以在任何页面中轻松切换AI对话面板的可见性。


借助 v-model:show 双向绑定,容器的显示状态完全由你的数据控制。当用户关闭容器时,你还可以监听 close 事件,执行清理或状态重置等操作:


全屏模式

在AI对话场景中,侧边栏与全屏的切换非常频繁——简单交流时用侧边栏足够,深入讨论时则希望占据整个屏幕。TrContainer 通过 v-model:fullscreen 提供了一种优雅的切换方案。


进入全屏模式后,Container 组件会自动添加 fullscreen 类名。你可以利用这个选择器自定义全屏时的内容布局,例如在大屏幕上限制内容宽度并居中显示,避免文本行过长影响阅读体验。

自定义标题与操作区

默认标题栏显示的是 "OpenTiny NEXT"。你既可以通过 title 属性修改文字,也可以使用 title 插槽完全掌控标题区域的渲染内容。而 operations 插槽则允许你在标题栏右侧添加任意操作按钮——新建会话、查看历史记录,一切都由你决定。


Footer 插槽:配合 Sender 组件使用

footer 插槽是搭建完整对话UI的关键部分。它固定在容器底部,天然适合放置 TrSender 输入组件——无论对话内容滚动多长,输入框始终稳稳地停在底部,确保用户随时可以输入。


CSS 变量定制

TrContainer 提供了丰富的CSS变量,让你无需修改组件源码即可深度定制容器外观——颜色、尺寸、间距等均可通过变量灵活调整。

全局变量

:root {
  /* 容器尺寸和边框 */
  --tr-container-width: 600px;
  --tr-container-bg-color: #ffffff;
  --tr-container-border-color: #e5e7eb;
  --tr-container-border-width: 1px;  /* 头部区域 */
  --tr-container-header-padding: 16px 24px;
  --tr-container-header-operations-gap: 4px;  /* 标题样式 */
  --tr-container-title-color: #1f2937;
  --tr-container-title-font-size: 16px;
  --tr-container-title-font-weight: 600;
  --tr-container-title-line-height: 24px;
}

全屏模式变量

全屏模式拥有独立的CSS变量,可单独配置全屏时的标题大小、头部内边距等:

:root {
  --tr-container-title-font-size-fullscreen: 20px;
  --tr-container-title-line-height-fullscreen: 28px;
  --tr-container-header-padding-fullscreen: 0 200px 24px;
}

实战:暗色主题定制

:root {
  --tr-container-bg-color: #1a1a2e;
  --tr-container-border-color: #2d2d44;
  --tr-container-title-color: #e0e0ff;
  --tr-container-title-font-size: 18px;
  --tr-container-title-font-weight: 700;
  --tr-container-width: 480px;
}

API 参考

Props

属性类型必填默认值说明
model:showboolean-控制容器是否显示
model:fullscreenbooleanfalse是否启用全屏模式
titlestring'OpenTiny NEXT'容器的标题文字

Slots

插槽名说明
default容器主体内容区域
title自定义标题区域的渲染内容
operations标题栏右侧的操作按钮区域
footer底部操作栏的内容(如输入组件)

Events

事件名参数说明
close-容器关闭时触发的事件

CSS 变量

全局变量(:root

变量名说明
--tr-container-bg-color容器背景色
--tr-container-border-color容器边框颜色
--tr-container-border-width容器边框宽度
--tr-container-header-operations-gap操作按钮之间的间距
--tr-container-header-padding头部内边距
--tr-container-title-color标题文字颜色
--tr-container-title-font-size标题字体大小
--tr-container-title-font-weight标题字体粗细
--tr-container-title-line-height标题行高
--tr-container-width容器宽度

全屏模式变量

变量名说明
--tr-container-header-padding-fullscreen全屏模式下的头部内边距
--tr-container-title-font-size-fullscreen全屏模式下的标题字体大小
--tr-container-title-line-height-fullscreen全屏模式下的标题行高
来源:https://juejin.cn/post/7649977961551691826
上一篇TinyRobot智能建议弹出框组件使用方法 下一篇TinyRobot SuggestionPills紧凑型建议按钮组组件新版功能特性解析
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
checked表单属性与CSS变量实现换肤原理
前端开发 · 2026-07-02

checked表单属性与CSS变量实现换肤原理

先聊一个有意思的现象:不需要编写任何 JavaScript,仅靠一个 :checked 伪类,就能驱动整个主题切换系统。听起来很神奇,但原理其实并不复杂——核心在于,:checked 是浏览器原生状态的实时镜像,而不是 JS 模拟出来的开关。 用户点击 ,或者用键盘空格键选中它,状态更新的那一刻,C

HTML meta标签页面定时跳转实现
前端开发 · 2026-07-02

HTML meta标签页面定时跳转实现

说到前端开发中最简洁的页面跳转方式,meta http-equiv= "refresh " 绝对算得上一个经典方案。不过别看它结构简单,格式上稍有疏忽,页面就可能原地卡死,或者直接跳到一个错误地址。下面把几个最容易踩坑的细节彻底讲清楚,帮你避开这些常见陷阱。 使用 http-equiv= "refresh

Cypress跨测试用例状态传递的不推荐但可选方案
前端开发 · 2026-07-02

Cypress跨测试用例状态传递的不推荐但可选方案

Cypress 默认的设计哲学很干脆:每个测试用例都必须是独立小王国,谁也不靠谁。这意味着 it() 执行前,浏览器上下文会被“一键还原”——页面状态、LocalStorage、Cookies 统统清空,强制维护测试隔离。这一规则让很多新手头疼:明明前一个测试已经创建了员工,后一个测试怎么就没法直接

全面深度解析HTML主体main标签唯一性原则与使用规范
前端开发 · 2026-07-02

全面深度解析HTML主体main标签唯一性原则与使用规范

在进行前端无障碍审计时,不少开发者会遇到一个奇怪的场景:浏览器不报错,但Lighthouse却直接标红“duplicate-main”。这其实是语义层与渲染层之间的根本差异。 为什么浏览器不报错但 Lighthouse 直接标红 duplicate-main 关键原因就在于:`main` 是语义锚点

HTML main标签在文档结构中的唯一性详解
前端开发 · 2026-07-02

HTML main标签在文档结构中的唯一性详解

先做一个快速检测:打开你最近开发的一个页面,按下 Ctrl+F 搜索 。如果搜索结果里出现2个以上,那这篇文章建议你认真读完。 本期要聊的主题,是HTML标签中一个看似简单、实际极易踩坑的核心知识点:main标签的唯一性。很多开发者知道这个标签的存在,但真正写到项目里,尤其是用了React、Vue这