react-lines-ellipsis
Poor man's multiline ellipsis component for React.JS https://xiaody.github.io/react-lines-ellipsis/
Installation
To install the stable version:
npm install --save react-lines-ellipsis
Usage
import LinesEllipsis from 'react-lines-ellipsis'
<LinesEllipsis
text='long long text'
maxLine='3'
ellipsis='...'
trimRight
basedOn='letters'
/>
Options
props.text {String}
The text you want to clamp.
props.maxLine {Number|String}
Max count of lines allowed. Default 1
.
props.ellipsis {Node}
Text content of the ellipsis. Default β¦
.
props.trimRight {Boolean}
Trim right the clamped text to avoid putting the ellipsis on an empty line. Default true
.
props.basedOn {String}
Split by letters
or words
. By default it uses a guess based on your text.
props.component {String}
The tagName of the rendered node. Default div
.
props.onReflow {Function} (version >= 0.13.0)
Callback function invoked when the reflow logic complete.
Type: ({ clamped: boolean, text: string }) => any
handleReflow = (rleState) => {
const {
clamped,
text,
} = rleState
// do sth...
}
render() {
const text = 'lorem text'
return (
<LinesEllipsis
text={text}
onReflow={this.handleReflow}
maxLine={3}
/>
)
}
Methods
isClamped() {Boolean}
Is the text content clamped.
Limitations
- not clamps text on the server side or with JavaScript disabled
- only accepts plain text by default. Use
lib/html.js
for experimental rich html support - can be fooled by some special styles:
::first-letter
, ligatures, etc. - requires modern browsers env
Experimental html truncation
Instead of props.text
, use props.unsafeHTML
to pass your content.
Also, props.ellipsis
here only supports plain text,
use props.ellipsisHTML
is to fully customize the ellipsis style.
The props.onReflow
gives you html
instead of text
.
props.trimRight
is not supported by HTMLEllipsis
.
import HTMLEllipsis from 'react-lines-ellipsis/lib/html'
<HTMLEllipsis
unsafeHTML='simple html content'
maxLine='5'
ellipsis='...'
basedOn='letters'
/>
Responsive to window resize and orientation change
import LinesEllipsis from 'react-lines-ellipsis'
import responsiveHOC from 'react-lines-ellipsis/lib/responsiveHOC'
const ResponsiveEllipsis = responsiveHOC()(LinesEllipsis)
// then just use ResponsiveEllipsis
Loose version
This is a non-standardized css-based solution for some webkit-based browsers. It may have better render performance but also can be fragile. Be sure to test your use case if you use it. See https://css-tricks.com/line-clampin/#article-header-id-0 for some introduction. Also, you may want to star and follow https://crbug.com/305376.
import LinesEllipsisLoose from 'react-lines-ellipsis/lib/loose'
<LinesEllipsisLoose
text='long long text'
maxLine='2'
lineHeight='16'
/>