Skip to content

Textarea 文本域

新粗野主义风格多行文本输入框,支持变体、尺寸和 v-model。

预览

Preview

变体

尺寸

状态

v-model 绑定

值:

安装

pnpm dlx brutx-vue@latest add textarea

用法

vue
<script setup>
import { ref } from 'vue'
import { Textarea } from 'brutx-ui-vue'

const message = ref('')
</script>

<template>
    <Textarea v-model="message" placeholder="Type your message here..." />
</template>

带标签

vue
<script setup>
import { ref } from 'vue'
import { Textarea, Label } from 'brutx-ui-vue'

const bio = ref('')
</script>

<template>
    <div class="space-y-2">
        <Label for="bio">Bio</Label>
        <Textarea id="bio" v-model="bio" placeholder="Tell us about yourself..." />
    </div>
</template>

禁用状态

vue
<script setup>
import { Textarea } from 'brutx-ui-vue'
</script>

<template>
    <Textarea disabled placeholder="Disabled textarea" />
</template>

只读状态

通过 readonly 属性设置只读文本域。只读状态下文本域不可编辑但可聚焦选择文本,光标样式为 cursor-default,不会降低透明度(区别于 disabled)。

vue
<script setup>
import { ref } from 'vue'
import { Textarea } from 'brutx-ui-vue'

const content = ref('这是一段只读内容,用户可以选中和复制文本,但无法修改。适用于展示协议条款、历史记录等场景。')
</script>

<template>
    <Textarea v-model="content" readonly />
</template>

错误消息

通过 variant="error"errorMessage 属性显示错误消息。错误消息使用 role="alert" 确保屏幕阅读器自动播报。

vue
<script setup>
import { ref } from 'vue'
import { Textarea } from 'brutx-ui-vue'

const message = ref('')
</script>

<template>
    <Textarea
        v-model="message"
        variant="error"
        error-message="消息内容不能为空"
        placeholder="请输入消息..."
    />
</template>

变体

变体说明
default标准边框
error危险色边框,主色聚焦阴影
success成功色边框,辅助色聚焦阴影

通过 variant 属性设置不同的边框样式:

vue
<template>
    <Textarea variant="default" placeholder="Default variant" />
    <Textarea variant="error" placeholder="Error variant" />
    <Textarea variant="success" placeholder="Success variant" />
</template>

尺寸

尺寸内边距字体大小
smpx-3 py-2text-sm
defaultpx-4 py-3text-base
lgpx-5 py-4text-lg

通过 size 属性设置不同的尺寸:

vue
<template>
    <Textarea size="sm" placeholder="Small size" />
    <Textarea size="default" placeholder="Default size" />
    <Textarea size="lg" placeholder="Large size" />
</template>

Props

属性类型默认值说明
modelValuestring绑定值,支持 v-model
variant'default' | 'error' | 'success''default'边框样式变体
size'sm' | 'default' | 'lg''default'尺寸
disabledbooleanfalse是否禁用
readonlybooleanfalse是否只读(不可编辑但可选中复制,光标为 cursor-default,不降低透明度)
placeholderstring国际化回退文本占位符文本
errorMessagestring错误消息文本,仅在 variant="error" 时显示
ariaLabelstring无障碍标签
ariaLabelledbystring关联的标签元素 ID
ariaDescribedbystring描述元素 ID
ariaInvalidboolean是否标记为无效
ariaRequiredboolean是否标记为必填
classstring自定义 CSS 类

事件

事件参数说明
update:modelValuestring值变化时触发

方法(defineExpose)

通过 ref 访问组件实例后可调用以下方法:

方法说明
focus()聚焦文本域
blur()移除焦点
select()选中文本域中的文本
vue
<script setup>
import { ref } from 'vue'
import { Textarea } from 'brutx-ui-vue'

const textareaRef = ref(null)

function handleFocus() {
    textareaRef.value?.focus()
}
</script>

<template>
    <Textarea ref="textareaRef" placeholder="Click button to focus" />
    <button @click="handleFocus">Focus Textarea</button>
</template>

可访问性

  • ARIA 属性:支持 aria-labelaria-labelledbyaria-describedbyaria-invalidaria-required 属性,便于辅助技术(如屏幕阅读器)正确朗读
vue
<script setup>
import { ref } from 'vue'
import { Textarea } from 'brutx-ui-vue'

const bio = ref('')
</script>

<template>
    <Textarea
        v-model="bio"
        aria-label="个人简介"
        aria-required="true"
        aria-invalid="false"
        placeholder="请输入个人简介..."
    />
</template>

样式定制

Textarea 默认设置了 resize-none。如需允许调整大小,可通过自定义 class 覆盖:

vue
<script setup>
import { Textarea } from 'brutx-ui-vue'
</script>

<template>
    <Textarea class="resize-y" placeholder="Resizable textarea" />
</template>

蛮力铸就。