Chuda
Гость
|
|
« : 22-01-2007 06:27 » |
|
есть супермегазадача. лента новостей. дизайнер утверждает, что в ленте должно показываться исключительно по три строчки из каждой новости, а остальное по кнопке "далее". с точки зрения скрипта одна строка - это многабукфф(неважно сколько), которые заканчиваются на \n. Если вырезать по количеству символов - тоже не вариант, ведь заранее не известно, сколько получится в вырезанном переносов. Более того - надо, чтоб эти три строчки выглядели прямоугольно, т.е. text-align: justify; В общем, я пока не совсем понимяу, как такое сделать.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 22-01-2007 06:35 » |
|
Идея на вскидку: определить шрифт в писелях и max-height. Только, помнится, у IE6 и раньше max-height не поддерживается.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Chuda
Гость
|
|
« Ответ #2 : 22-01-2007 06:39 » |
|
хм... да если так, то и просто height можно. или поиграться со свойством clip. ты примерно это имел в виду? мне кажется, что действовать оно должно в большинстве случаев категорически правильно, но безнадёжно ломаться в тот момент, когда пользователь поменяет размер шрифта у себя.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 22-01-2007 07:29 » |
|
У этого способа один существенный недотаток: обрезание произодет не обязательно по границе строки - может получиться некрасиво.
Кстати, дизайнер не учел, что страница может иметь разную ширину - точно три строки никогда не будет. Или нужно ограничивать размер блоков.
Продублирую аську для остальных.
Вариант 2: Задать каждому символу вес (нечто вроде ширины) и набирать в результирующую строку не более чем ... Недостаток: в разных браузерав все равно будет выглядеть по разному.
Вариант 3: Чтобы ширину символов можно было измерять с точностью до пикселей, реализовать их в виде набора картинок. Недостаток: массивно и не очень красиво в процессе загрузки.
Вариант 4: Блок текста заменить картинкой.
Вариант 0: Дизайнер не прав.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #4 : 22-01-2007 07:37 » |
|
Chuda, Твой вариант (или вариант скрипта) три строчки - это три строчки, а после этого кнопка далее (где здесь проблема?) Или три строчки в блоке - независмо сколько строчек в ленте (где здесь проблема?). но здесь может произойти обрезание в самый неприятный момент (но это можно обойти - обрезать по словам)
или есть какие-то ограничения на размер блока
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #5 : 22-01-2007 08:07 » |
|
Sla, ты никогда не пробовал добить одинакового отображения страницы в разных браузерах? В данном случае задача еще жестче поставлена: в блоке ровно три строки. Как ты на сервере поймешь, что в браузере отобразилось именно три строки, а не две или четыре? Разница может быть: 1. один и тот же шрифт может отобразится по разному. 2. ширина блока будет различна. 3. человек, который будет вводить текст, наверняка будет не дизайнером и не будет выравнивать строчки руками - программа должна рачитать и обрезать как надо.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #6 : 22-01-2007 08:19 » |
|
RXL, пробовал - ничего не получилось 1. объяснить дизайнеру, что он не прав 2. заточить под 3 браузера (ие,фф,оперу) Offtopic: 3. определить тип браузера, если ИЕ большими букфами вывести вверху Вы пользуетесь глючным браузером
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
|
|
« Ответ #7 : 22-01-2007 08:27 » |
|
Sla, IE есть на двух платформах, Mozilla (+ FF) и Opera - на большем числе. Еще есть Safari (Mac), Konqueror и еще несколько. А сколько есть версий... Все варианты учесть просто нельзя. Дизайнер должен пойти на компромис!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Chuda
Гость
|
|
« Ответ #8 : 22-01-2007 08:32 » |
|
IE есть на двух платформах
разве??? я тестирую в ИЕ на четырёх...
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #9 : 22-01-2007 08:34 » |
|
в общем, путём проб и ошибок наваялась супермегафункция. надеюсь за сегодня её привести в порядок. Но в общем, уже как-то работает. function TextCrop($text,$maxnumstr,$strmaxlen){ /* обрезает текст $text до $maxnumstr строк в каждой из которых не более $strmaxlen символов */ $numstr = 0; $stringset = explode("\n",$text); while($numstr < $maxnumstr){ $substrset = explode( "\n",iconv("windows-1251","utf-8",wordwrap( iconv( "utf-8","windows-1251", $stringset[$numstr] ), $strmaxlen ) ) ); $subwhile = 0; while($numstr < $maxnumstr && $subwhile < count($substrset)){ $result .= $substrset[$subwhile]." "; $numstr++; $subwhile++; } }
return $result; }
|
|
|
Записан
|
|
|
|
Chuda
Гость
|
|
« Ответ #10 : 22-01-2007 08:42 » |
|
да, кстати, если кому-то показалось странным, что текст переводится из утф-8 в ср1251, а потом обратно: в ТЗ сказано: делать в утф-8. пхп же не умеет работать с утф-8, длину строк считает по количеству байт в оной. единственный язык сайта - русский, так что подобное издевательство над строкой допустимо.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #11 : 22-01-2007 09:23 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
tishka17
Участник
Offline
Не разбрасывайте мусор
|
|
« Ответ #12 : 22-01-2007 09:24 » |
|
у меня возникла простейшая идея на html'е: <pre> строка 1 строка 2 строка 3 </pre> кнопка далее...
|
|
« Последнее редактирование: 16-12-2007 14:35 от Алексей1153++ »
|
Записан
|
//1001101010110100010100110011101111000010110111010101110011
|
|
|
Razor
|
|
« Ответ #13 : 22-01-2007 09:30 » |
|
немного ОФФ: насчет страница может быть любой ширины - а может дизайнер ее динамичной сделал? а вообще я читал по поводу этого статью, что делают обрезку текста и "Далее" - в общем там к мнению пришли что это самый ужасный вариант... может как тут сделать ему предложить? типо пред-анонс того, что будет написано в новости...и помойму для посетителей будет понятнее сори за офф небольшой
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #14 : 22-01-2007 09:35 » |
|
tishka17, конечно - пусть дизайнер переходит на моноширинные шрифты - нечего баловать! Этот метот ничем не лучше - ширина символа остается величиной неопределенной.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|