#php #html #cakephp
#php #HTML #cakephp
Вопрос:
У меня есть следующий код для генерации некоторых интервалов с использованием помощника cakephp
<div id="numberRow">
<?php echo $this->Paginator->numbers(array('class' => 'numbers', 'separator' => '', 'before' => '', 'after' => '', 'first' => 1, 'last' => 1)); ?>
</div>
Это генерирует следующий код:
<div id="numberRow">
<span class="current">1</span><span><a href="/posts/show/barter/page:2" class="numbers">2</a></span>
</div>
Проблема в том, что браузер отображает пробел после <span>
, который мне не нужен.
Мое решение на данный момент состоит в том, чтобы написать cake следующим образом:
<div id="numberRow">
<span class="current">1</span><span><a href="/posts/show/barter/page:2" class="numbers">2</a></span></div>
с закрывающим тегом в той же строке, что и <span>
но это нарушает формат и затрудняет чтение исходного кода.
Есть ли способ лучше?
Комментарии:
1. затрудняет чтение исходного кода. Не тратьте слишком много времени на беспокойство по этому поводу. Потратьте их на то, чтобы разметка, стиль и код работали. 🙂
2. Можем ли мы получить код для этой функции:
$this->Paginator->number
?3. @Levi — Я бы предположил, что это помощник CakePHP. Может быть, это: api13.cakephp.org/file/cake/libs/view/helpers/paginator.php
Ответ №1:
Хорошие новости! Существует стиль CSS, который нацелен на решение именно этой проблемы. Это называется white-space-collapse
, и в вашей таблице стилей это выглядит следующим образом:
#numberRow {white-space-collapse: discard;}
В браузерах, которые поддерживают это, это приведет к удалению пробелов между тегами внутри <div>
, если вокруг них нет других символов.
Теперь о плохих новостях … пока не существует ни одного браузера, который это поддерживает. 🙁
Более быстрые браузеры, вероятно, будут поддерживать его очень скоро — я готов поспорить, что он появится в Chrome, по крайней мере, к концу года, — но этой поддержки будет недостаточно, чтобы им стоило пользоваться в течение некоторого времени.
В то же время, это распространенная проблема, от которой страдают многие разработчики сайтов.
Наиболее распространенным решением является простое удаление пробелов из вашего исходного кода, согласно примеру, который вы привели в вопросе. Это не идеально, но это решает проблему, и без каких-либо грязных взломов.
Если вы полны решимости поддерживать порядок в своем исходном коде (или вы просто не можете избежать этого из-за используемой вами платформы или чего-то еще), есть еще несколько хакерских решений:
Первое — использовать замену строки Javascript при загрузке страницы, чтобы убрать ненужные пробелы. Это неаккуратно, но работает, за исключением редких случаев, когда пользователь отключил javascript. У вас могут возникнуть некоторые проблемы с обновлением страницы, поскольку сначала она загружается с одним макетом, а затем сразу же синхронизируется с правильным макетом, но это, вероятно, будет минимальным (в зависимости от скорости браузера и масштаба проблемы).
Еще более запутанное решение, но, несомненно, умный взлом, заключается в том, чтобы установить font-size:0;
для родительского элемента (в вашем случае <div>
), а затем установить font-size
обратно правильный размер для элементов содержимого. например:
#numberRow {font-size:0;}
#numberRow>span {font-size:12px;}
(заменяя ’12px’ любым размером, который вы, конечно, хотите, чтобы они были)
Недостатками этого являются: во-первых, это ужасный взлом; во-вторых, это ужасный взлом; и в-третьих, это может затруднить контроль размера вашего шрифта, если вы используете форматирование на основе em, а не шрифты фиксированного размера в пикселях. Но это работает.
В целом, моя рекомендация — пойти с простым ответом и удалить пробелы в вашем PHP-коде. По крайней мере, до тех пор, пока в браузерах большинства пользователей не будет установлено надлежащее CSS-решение.
Надеюсь, это поможет.
Комментарии:
1. Хороший пост. ИМО, безрассудно вводить хак специально для «приукрашивания» разметки для человеческих глаз, но я видел, как люди прыгают через обручи для этого.
2. Хороший ответ, хотя он приводит к тому же выводу, что и мой пример, и другой ответ, мне это нравится намного больше, поскольку он предоставляет потенциальное исправление для использования в будущем и некоторые другие альтернативы (с анализом плюсов и минусов), а не просто повторяет мой собственный пример. Я просто использую более уродливую разметку на данный момент, поскольку это не имеет большого значения, но я буду иметь в виду сокращение пробелов на будущее, когда это станет более поддерживаться. Спасибо!
Ответ №2:
Не могли бы вы просто сделать это?
<div id="numberRow"><?php echo $this->Paginator->numbers(array('class' => 'numbers', 'separator' => '', 'before' => '', 'after' => '', 'first' => 1, 'last' => 1)); ?></div>
Комментарии:
1. Да, это работает, и это то, что я делаю в настоящее время, мне просто было любопытно, возможно ли сохранить исходное форматирование. Поскольку такого рода проблемы ранее не возникали в других случаях
2. @Razor — Вы могли бы попробовать
white-space
свойства наNumberRow
. quirksmode.org/css/whitespace.html