Skip to content

vue3-truncate-html

Props

PropTypeDescriptionAccepted ValuesDefault
modelValuebooleanControls truncation state (required)true or falserequired
textstringText or HTML to be truncatedany string''
lengthnumberLength of text after truncationany number100
hideButtonbooleanHide more/less buttontrue or falsefalse
typestringContent type'text' or 'html''text'
buttonsButtonsButton text configurationButtons object{ more: 'Read More', less: 'Show Less' }
classesClassesCSS classes for customizationClasses objectsee below
sanitizeOptionsIOptionsOptions for HTML sanitizationIOptions objectundefined

Buttons Type

typescript
type Buttons = {
  more: string  // "Show more" button text
  less: string  // "Show less" button text
}

Classes Type

typescript
type Classes = {
  container: string      // Container class
  content: string        // Content class
  contentHtml: string    // HTML content class
  contentText: string    // Text content class
  button: string         // Button class
  buttonMore: string     // "More" button class
  buttonLess: string     // "Less" button class
}

Default Classes

typescript
const defaultClasses: Classes = {
  container: 'vue-truncate-html',
  content: 'vue-truncate-html__content',
  contentHtml: 'vue-truncate-html__content_html',
  contentText: 'vue-truncate-html__content_text',
  button: 'vue-truncate-html__button',
  buttonMore: 'vue-truncate-html__button_more',
  buttonLess: 'vue-truncate-html__button_less',
}

Events

EventDescriptionParameters
update:modelValueTriggered on state changeboolean - new value

Slots

SlotDescriptionScope
defaultDefault slot for custom button-

Usage Examples

Basic Text Example

vue
<template>
  <vue-truncate-html
    v-model="isTruncated"
    :text="text"
    :length="150" />
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const text = `
  Lorem ipsum dolor sit amet, consectetur adipisicing elit.
  Adipisci animi autem beatae consequuntur debitis delectus deleniti ducimus enim,
  facere hic id impedit labore laboriosam magni molestiae nemo non numquam officiis porro,
  quibusdam tempora totam vel voluptate voluptatem voluptatum.
`
</script>

HTML Example

vue
<template>
  <vue-truncate-html
    v-model="isTruncated"
    :text="html"
    type="html"
    :length="200" />
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const html = `
  <b>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</b>
  <ul>
    <li><a href="https://example.com">Link</a> - description</li>
    <li>Second list item</li>
  </ul>
  <i>Italic text</i>
`
</script>

Custom Buttons

vue
<template>
  <vue-truncate-html
    v-model="isTruncated"
    :text="text"
    :buttons="customButtons" />
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const text = "Long text..."
const customButtons = {
  more: 'Show full text',
  less: 'Collapse'
}
</script>

Custom CSS Classes

vue
<template>
  <vue-truncate-html
    v-model="isTruncated"
    :text="text"
    :classes="customClasses" />
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const text = "Long text..."
const customClasses = {
  container: 'my-truncate',
  content: 'my-truncate__content',
  button: 'my-truncate__button',
  // ... other classes
}
</script>

Custom Button with Slot

vue
<template>
  <vue-truncate-html v-model="isTruncated" :text="text">
    <button 
      @click="isTruncated = !isTruncated"
      class="custom-button">
      {{ isTruncated ? '📖 Read more' : '📕 Collapse' }}
    </button>
  </vue-truncate-html>
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const text = "Long text..."
</script>

HTML Sanitization

vue
<template>
  <vue-truncate-html
    v-model="isTruncated"
    :text="unsafeHtml"
    type="html"
    :sanitize-options="sanitizeOptions" />
</template>

<script setup>
import { ref } from 'vue'
import { VueTruncateHtml } from 'vue3-truncate-html'

const isTruncated = ref(true)
const unsafeHtml = `
  <p>Safe content</p>
  <script>alert('Unsafe script')</script>
`

const sanitizeOptions = {
  allowedTags: ['p', 'b', 'i', 'strong', 'em', 'ul', 'ol', 'li', 'a'],
  allowedAttributes: {
    'a': ['href']
  }
}
</script>

Interactive Example

Простой текст

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci animi autem beatae consectetur co

HTML содержимое

&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Первый пункт списка&lt;/li&gt; &lt;li&gt;Второй