One approach is as follows, although it does - of course, ndash; rely on JavaScript:
function centralEllipsis(opts) {
function centralEllipsis(opts) { var settings = { 'maxLength': 7, 'ellipsis': '…', 'writeToAttribute': 'data-originaltext' }, _this = this; for (var prop in opts) { if (opts.hasOwnProperty(prop)) { settings[prop] = 'undefined' !== typeof opts[prop] ? opts[prop] : settings[prop]; } } var prefixLength = Math.ceil(settings.maxLength / 2), suffixLength = settings.maxLength - prefixLength, originalText = _this.title = _this.textContent, prefix, suffix; if (settings.maxLength < originalText.length) { _this.setAttribute(settings.writeToAttribute, originalText); prefix = originalText.substr(0, prefixLength); suffix = settings.maxLength < 2 ? '' : originalText.substr(-suffixLength); _this.innerHTML = prefix + settings.ellipsis + suffix; } } Array.prototype.forEach.call(document.querySelectorAll('.midEllipsis'), function(el) { centralEllipsis.apply(el, [{}]); });
<ul> <li class="midEllipsis">abcdefghijklm</li> </ul>
External JS Fiddle demo for experimentation.
To override the default settings, for example, to set maxLength to 4 :
Array.prototype.forEach.call(document.querySelectorAll('.midEllipsis'), function(el) { centralEllipsis.apply(el, [{ 'maxLength': 4 }]); });
function centralEllipsis(opts) { var settings = { 'maxLength': 7, 'ellipsis': '…', 'writeToAttribute': 'data-originaltext' }, _this = this; for (var prop in opts) { if (opts.hasOwnProperty(prop)) { settings[prop] = 'undefined' !== typeof opts[prop] ? opts[prop] : settings[prop]; } } var prefixLength = Math.ceil(settings.maxLength / 2), suffixLength = settings.maxLength - prefixLength, originalText = _this.title = _this.textContent, prefix, suffix; if (settings.maxLength < originalText.length) { _this.setAttribute(settings.writeToAttribute, originalText); prefix = originalText.substr(0, prefixLength); suffix = settings.maxLength < 2 ? '' : originalText.substr(-suffixLength); _this.innerHTML = prefix + settings.ellipsis + suffix; } } Array.prototype.forEach.call(document.querySelectorAll('.midEllipsis'), function(el) { centralEllipsis.apply(el, [{ 'maxLength': 4 }]); });
<ul> <li class="midEllipsis">abcdefghijklm</li> </ul>
External JS Fiddle demo for experimentation.
Or set the symbol 'ellipsis' to '& raquo;' character (for example):
Array.prototype.forEach.call(document.querySelectorAll('.midEllipsis'), function(el) { centralEllipsis.apply(el, [{ 'ellipsis': '»' }]); });
function centralEllipsis(opts) { var settings = { 'maxLength': 7, 'ellipsis': '…', 'writeToAttribute': 'data-originaltext' }, _this = this; for (var prop in opts) { if (opts.hasOwnProperty(prop)) { settings[prop] = 'undefined' !== typeof opts[prop] ? opts[prop] : settings[prop]; } } var prefixLength = Math.ceil(settings.maxLength / 2), suffixLength = settings.maxLength - prefixLength, originalText = _this.title = _this.textContent, prefix, suffix; if (settings.maxLength < originalText.length) { _this.setAttribute(settings.writeToAttribute, originalText); prefix = originalText.substr(0, prefixLength); suffix = settings.maxLength < 2 ? '' : originalText.substr(-suffixLength); _this.innerHTML = prefix + settings.ellipsis + suffix; } } Array.prototype.forEach.call(document.querySelectorAll('.midEllipsis'), function(el) { centralEllipsis.apply(el, [{ 'ellipsis': '»' }]); });
<ul> <li class="midEllipsis">abcdefghijklm</li> </ul>
External JS Fiddle demo for experimentation.
Literature:
source share