![GitHub](https://img.shields.io/github/license/ajobi/vue-snip) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/vue-snip)


Keywords
clamp, ellipsis, snip, snip-text, cut-text, clamp-text, truncate-text, multiline-text, vue, vue2, vue3, vuejs, vue-directive, vue-plugin
License
MIT
Install
npm install vue-snip@2.0.1

Documentation

vue-snip

GitHub js-standard-style npm bundle size

Vue.js directive that clamps the content of a text element if it exceeds the specified number of lines.

Key features:

  • two snipping approaches (CSS / JavaScript) picked on a per-element basis
  • no need to specify line heights
  • re-snipping on element resize and reactive data change

To get a hands-on experience try the Interactive Demo.

Installation

# install with npm
npm install vue-snip

# or with yarn
yarn add vue-snip

Vue 2

import Vue from 'vue'
import VueSnip from 'vue-snip'
import App from './App'

Vue.use(VueSnip)

new Vue({ render: h => h(App) }).$mount('#app')

Vue 3

import { createApp } from 'vue'
import VueSnip from 'vue-snip'
import App from './App'

createApp(App).use(VueSnip).mount('#app')

Usage

<!-- minimal example -->
<template>
  <p v-snip> ... </p>
</template>
<!-- with options -->
<template>
  <p v-snip="{ lines: 3 }"> ... </p>
</template>
<!-- with several options -->
<template>
  <p v-snip="{ lines: 3, mode: 'js', midWord: false }"> ... </p>
</template>
<!-- with options and callback -->
<template>
  <p v-snip="{ lines: 3, onSnipped }"> ... </p>
</template>

<script>
export default {
  data () {
    return {
      hasEllipsis: false,
    }
  },
  methods: {
    onSnipped (newState) {
      this.hasEllipsis = newState.hasEllipsis
    }
  }
}
</script>

How it works

The library uses js-snip under the hood. You can find more about the options and how snipping works in its documentation.

Change Log

All changes are documented in the change log.