Неразрывный без пробела в HTML - PullRequest
8 голосов
/ 18 сентября 2008

У меня есть веб-приложение для боулинга, которое позволяет вводить довольно подробную покадровую информацию. Он позволяет отслеживать, какие штифты были сбиты на каждом шаре. Для отображения этой информации я выгляжу как стойка с булавками:

o o o o
 o o o
  o o
   o

Изображения используются для представления контактов. Итак, для заднего ряда у меня есть 4 тега img, затем тег br. Прекрасно работает ... в основном. Проблема в небольших браузерах, таких как IEMobile. В этом случае, когда в таблице может быть 10 или 11 столбцов, а в каждом столбце может быть стойка выводов, IE попытается уменьшить размер столбца, чтобы он уместился на экране, и в итоге я получаю нечто подобное :

o o o
  o
o o o
 o o
  o

или

o o
o o
o o
 o
o o
 o

Структура:

<tr>
    <td>
        <!-- some whitespace -->
        <div class="..."><img .../><img .../><img .../><img .../><br/>...</div>
        <!-- some whitespace -->
    </td>
</tr>

Внутри div нет пробелов. Если вы посмотрите на эту страницу в обычном браузере, она должна отображаться нормально. Если вы посмотрите на него в IEMobile, это не так.

Любые советы или предложения? Может быть, что-то вроде & nbsp; это на самом деле не добавляет пробел?

<Ч />

Followup / Резюме

Я получил и попробовал несколько хороших предложений, в том числе:

  • Динамически генерировать все изображение на сервере. Хорошее решение, но на самом деле не соответствует моим потребностям (размещено на GAE) и немного больше кода, чем я хотел бы написать. Эти изображения также могут быть кэшированы после первого поколения.
  • Использовать объявление пустого пространства CSS. Хорошее решение на основе стандартов, с треском проваливается в представлении IEMobile.

Что я в итоге сделал

висит голова и что-то бормочет

Да, все верно, прозрачный GIF-файл в верхней части div, размером с нужную мне ширину. Код завершения (упрощенно) выглядит так:

<table class="game">
    <tr class="analysis leave">
        <!-- ... -->
        <td> <div class="smallpins"><img class="spacer" src="http://seasrc.th.net/gif/cleardot.gif" /><br/><img src="/img/pinsmall.gif"/><img src="/img/nopinsmall.gif"/><img src="/img/nopinsmall.gif"/><img src="/img/nopinsmall.gif"/><br/><img src="/img/pinsmall.gif"/><img src="/img/pinsmall.gif"/><img src="/img/nopinsmall.gif"/><br/><img src="/img/nopinsmall.gif"/><img src="/img/nopinsmall.gif"/><br/><img src="/img/nopinsmall.gif"/></div> </td>
        <!-- ... -->
    </tr>
</table>

И CSS:

div.smallpins {
    background: url(/img/lane.gif) repeat;
    text-align: center;
    padding:0;
    white-space: nowrap;
}
div.smallpins img {
    width:1em;
    height:1em;
}
div.smallpins img.spacer {
    width:4.5em;
    height:0px;
}
table.game tr.leave td{
    padding:0;
    margin:0;
}
table.game tr.leave .smallpins {
    min-width:4em;
    white-space: nowrap;
    background: none;
}

p.s. Нет, я не буду ссылаться на чью-то четкую точку в моем окончательном решении :))

Ответы [ 18 ]

24 голосов
/ 18 сентября 2008

Вы можете попробовать опцию css "nowrap" в содержащем div.

{white-space: nowrap;}

Не уверен, насколько широко это поддерживается.

3 голосов
/ 18 сентября 2008

Что будет иметь смысл, так это изменить, какое изображение отображается на лету:

<div id="pin-images">
    <img src="fivepins.jpg" />
    <img src="fourpins.jpg" />
    <img src="threepins.jpg" />
    <img src="twopins.jpg" />
    <img src="onepin.jpg" />
</div>
3 голосов
/ 18 сентября 2008

В прошлом я сталкивался с подобной проблемой, создавая динамическое создание всего изображения (с соответствующим расположением выводов) в виде одного изображения. Если вы используете ASP.NET, это довольно легко сделать с помощью вызовов GDI. Вы просто динамически создаете изображение с размещением булавки, а затем подаете на страницу одно изображение. Убирает все проблемы с выравниванием изображения (каламбур).

3 голосов
/ 18 сентября 2008

Почему бы не иметь изображение для всех возможных результатов для булавки? Не возиться с макетами для браузеров изображение это изображение

Генерируйте их на лету, кэшируя созданные изображения для повторного использования.

2 голосов
/ 18 сентября 2008

Поскольку вы все равно используете изображения, почему бы не сгенерировать изображение, представляющее весь макет на лету? Вы можете использовать что-то вроде GD или ImageMagick , чтобы сделать трюк.

2 голосов
/ 18 сентября 2008

Добавьте "nowrap" в тэг td ...

1 голос
/ 31 декабря 2008

Это было здесь некоторое время, но я просто проходил через это и нашел этот пост. Что бы я ни делал, я не мог заставить изображения идти подряд. Независимо от того, что они завернут. Я перепробовал все.

Затем я понял, что на клиенте есть настройка, в которой он может выбрать вид: 1) Один столбец, 2) Вид рабочего стола и 3) Подогнать окно. Согласно MSDN, предполагается, что по умолчанию используется окно. Но мобильный телефон IE моей жены по умолчанию был одностолбцовым. ТАК НИЧЕГО, ЧТО, это бы обернуло все в один столбец. Если бы я переключился на любой из 2 других вариантов, он выглядел бы хорошо.

Ну, вы можете установить это с метатегом:

<meta name="MobileOptimized" content="320">

установит ширину страницы в 320 пикселей. Не знаю, как заставить его перейти на авто, если кто-нибудь там знает, пожалуйста, напишите.

Это НЕ работает на Blackberry до v4.6 - вы застряли в одном столбце, если пользователь вручную не перейдет в режим рабочего стола. С 4.6 или более поздней версией должно работать следующее, но я не проверял:

<meta name="viewport" content="width=320">
1 голос
/ 18 сентября 2008

Поскольку вы стремитесь к максимальной совместимости, рассматривали ли вы создание одного изображения, представляющего кадр?

Если вы используете PHP, вы можете использовать GD для динамического создания изображений, представляющих кадры, на основе того же ввода, которое вы использовали бы для создания HTML в вашем вопросе. Самым большим преимуществом этого является то, что любой браузер, который может отображать PNG или GIF, сможет отображать ваш кадр.

0 голосов
/ 19 сентября 2008

Имеют отдельные изображения для каждого возможного расположения каждой строки .

Для этого потребуется всего 30 изображений (16 + 8 + 4 + 2)

0 голосов
/ 18 сентября 2008
  • Это тег nobr html; не уверен, насколько это хорошо поддерживается.
  • Вы можете использовать css overflow: visible и неразрывные пробелы между вашими элементами (изображениями), но не использовать другие пробелы в html для этих строк.
...