Intereting Posts
Сделать необходимое число совпадений соответствует char_length столбца Показать 1k вместо 1000 обнаруживать отображение сетчатки (HD) на стороне сервера PHP: переменные сеанса перезаписываются объявленными переменными с тем же именем Как POST формировать данные из таблицы в PHP Отправка более одного html-тега вызывает ошибку 404 в Codeigniter и Grocery Crud? Автозаполнение в формате .php, похоже, больше не работает Ярлык для: $ foo = explode ("", "bla ble bli"); echo $ foo Попытка подключиться к MQ с помощью PHP; почти готово Какой шифр PHP mcrypt является самым безопасным? Сохранение вывода openssl_random_pseudo_bytes в Postgres с использованием php? Я получаю сообщение об ошибке: неверная последовательность байтов для кодирования "UTF8" Ошибка Http 500 Отправка сообщения с помощью PHP54 и Twilio Сложное поведение с PHP (5.3), статическое наследование и ссылки PHP Как закрыть теги html из этого массива? Zend Framework: Каковы различия между функциями init () и preDispatch () в объектах контроллера?

Ограничение символов до определенной ширины

Я несколько раз сталкивался с этой проблемой. У меня нет проблем с ограничением символов в строке конкретным числом. Тем не менее, некоторые символы длиннее других, поэтому он переносится на другую строку или делает мой элемент DIV более широким и неравномерным с остальной частью моего веб-сайта.

Например:

Literacy - Is it the Sa Machu Picchu, Cuzco, Pe 

– это точно такое же количество символов (23), включая пробелы, но Machu Pichu длиннее с точки зрения фактической ширины на экране.

Есть ли способ иметь одинаковый размер для строки, основанной на ширине фактической строки, а не на количестве символов? Кто-то должен был решить это раньше?

  • Первое (очевидное) решение: переключиться на шрифт с фиксированной шириной, такой как Courier, Lucida Console, Consolas и т. Д.
  • Второе решение: используйте библиотеку GD для записи строк в графический объект и измерения этого объекта.

Вам, вероятно, придется играть с GD и imagefontwidth (): http://ar2.php.net/manual/es/function.imagefontwidth.php

Не записывая алгоритм в PHP для ограничения символов на основе «font-widths» для конкретного шрифта, который вы используете, вы можете использовать моноширинный шрифт.

В качестве альтернативы, я уверен, что JavaScript-решение можно было бы также написать, чтобы проверить ширину, но я не уверен, как от верхней части головы.

Это не может быть сделано в PHP – лучшее, что вы можете сделать, является приблизительным. Различные браузеры и различные операционные системы отличаются шириной шрифта для одного и того же шрифта. Поэтому, даже если вы вручную сохранили массив ширины шрифта символов для шрифта в вашем браузере и os, он может не совпадать с другими.

Обычно лучше работать с дизайном вокруг возможности шрифтов различной ширины, чем пытаться заставить его.

При этом это может быть сделано отлично (без аппроксимации) в javascript, хотя и с небольшим количеством взлома. Существует несколько возможных методов, но вот один из них: Начните с рендеринга полной строки в div, который имеет ширину, которую вы ищете, затем измерьте высоту div. Если оно больше одной строки, возможно, запустите цикл, постепенно удаляя последнее слово. Продолжайте движение, пока высота div не будет для одной линии.

Используйте CSS для форматирования, чтобы все они имели равномерную ширину – без зубчатых краев с правой стороны. Что-то вроде этого:

 p { text-align: justify; } 

Если бы какое-то удовольствие работало над этим решением CSS + JS. Он не тестировался интенсивно (Firefox + IE7 / 8), но он должен работать нормально …

 <script type="text/javascript" src="jquery.js"></script> <style> .monospaced, .not-monospaced{ font: normal normal 16px/16px Verdana; /* not monospaced font */ clear: both; } .monospaced span{ float: left; display: block; width: 16px; text-align: center; } </style> <script> $(document).ready(function(){ $('.monospaced').each(function(){ var monospace = $(this).html(); // .trim() does not work at IE http://api.jquery.com/jQuery.trim/ (view comments) monospace.replace(/(^[\s\xA0]+|[\s\xA0]+$)/g, ''); mono = monospace.split(''); for(i = 0; i < mono.length; i++){ if(mono[i] == ' ') mono[i] = '&nbsp;'; mono[i] = '<span>'+mono[i]+'</span>'; } $(this).html(mono.join('')); }); }); </script> </head> <body> <div class="not-monospaced"> This is supposed to be monospaced... </div> <div class="not-monospaced"> mmmm mm mmmmmmmm mm mm mmmmmmmmmm... </div> <div class="monospaced"> This is supposed to be monospaced... </div> <div class="monospaced"> mmmm mm mmmmmmmm mm mm mmmmmmmmmm... </div> </body>