Вы должны решить эту проблему с помощью CSS, а не Ruby.Вы делаете что-то, что влияет на макет DOM, и нет никакого способа программно разработать решение, которое будет работать согласованно.
Допустим, у вас работает гем HTML-анализатора и вы нашли наименьшее количество общих знаменателейэто будет работать большую часть времени.
Что произойдет, если вы измените размер шрифта или макет вашего сайта?Вам нужно будет снова пересчитать количество символов.
Или, допустим, в вашем html есть что-то вроде этого: <p><br /></p><br />
Это ноль символов, однако это приведет к вставке большого фрагмента пустого текста.,Это может быть даже тег <blockquote>
или <code>
со слишком большим количеством отступов или полей, чтобы полностью вывести ваш макет из строя.
Или обратный, скажем, у вас есть этот 3 ≅ λ
(3 ≅ λ) Это длина 26 символов, но для целей отображения это всего 5.
Дело в том, что количество символов ничего не говорит вам о том, как что-то будет отображаться в браузере.Не говоря уже о том, что парсеры HTML - это огромные фрагменты кода, которые иногда могут быть ненадежными.
Вот несколько хороших CSS для решения этой проблемы.Псевдокласс: after добавит белое затухание в последнюю строку содержимого.Очень хороший переход.
body { font-size: 16px;}
p {font-size: 1em; line-height: 1.2em}
/* Maximum height math is:
line-height * #oflines - 0.4
the 0.4 offset is to make the cutoff look nicer */
.lines-3{height: 3.2em;}
.lines-6{height: 6.8em;}
.truncate {overflow: hidden; position:relative}
.truncate:after{
content:"";
height: 1em;
display: block;
width: 100%;
position:absolute;
background-color:white;
opacity: 0.8;
bottom: -0.3em
}
Вы можете добавить столько классов .lines-x
, сколько считаете нужным.Я использовал их, но px так же хорош.
Затем примените это к вашему элементу: <div class="truncate lines-3">....lots of stuff.. </div>
и скрипту: http://jsfiddle.net/ke87h/