HTML中不间断的非空格

时间:2020-03-06 14:21:40  来源:igfitidea点击:

我有一个保龄球Web应用程序,它允许相当详细的逐帧信息输入。它允许做的一件事是跟踪每个球上的哪些销被击倒。为了显示此信息,我使它看起来像一排别针:

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中查看它,则不会。

有任何提示或者建议吗?也许其中的某种实际上并没有增加空间?

随访/总结

我收到并尝试了一些好的建议,包括:

  • 在服务器上动态生成整个映像。好的解决方案,但不能真正满足我的需要(托管在GAE上),并且代码比我想写的要多。这些图像也可以在第一代之后进行缓存。
  • 使用CSS空格声明。好的基于标准的解决方案在IEMobile视图中失败了。

我最终做了什么

垂头咕and

是的,没错,是div顶部的透明gif,大小与我需要的宽度相同。结束代码(简化)如下所示:

<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.不,我不会在最终解决方案中热链接其他人的清晰点:)

解决方案

为什么不为引脚的所有可能结果提供图像?浏览器的布局不会混乱图像就是图像

快速生成它们,将创建的图像缓存以供重用。

我们可能需要在分号后紧跟一个实际空间

我过去通过动态创建整个图像(具有适当的引脚排列)作为单个图像来解决此类问题。如果我们使用的是ASP.NET,则使用GDI调用非常容易。我们只需使用大头针位置动态创建图像,然后将其作为单个图像提供给页面。将所有对齐问题从图片中删除(双关语意味)。

由于无论如何都在使用图像,为什么不动态生成代表整个布局的图像?我们可以使用GD或者ImageMagick之类的方法来完成此操作。

尝试在与<td> ... </ td>相同的行上使用<div>标签。

我可能会误解了追求,但我认为我们可以做我对地图上的徽标所做的事情。

绘制地图背景图块,然后告知每个图像向左浮动,并提供一些有趣的边距,以便将它们定位在我希望的位置(查看源代码以了解其效果)。

这样做会不会更容易?

<div id="container">
  <div id="row1">
    <img/><img/><img/><img/>
  </div>
  <div id="row2">
    <img/><img/><img/>
  </div>
  <div id="row3">
    <img/><img/>
  </div>
  <div id="row4">
    <img/>
  </div>
</div>

CSS将如何处理对齐方式?

.container div{
  text-align:center;
}

我们可以在包含的div中尝试使用CSS的" nowrap"选项。

{white-space: nowrap;}

不确定支持的范围。

最有意义的是更改即时显示哪个图像:

<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>

在td标签中添加" nowrap" ...

使用单词木偶字符U + 2060(即``)''

也许这只是一种情况,我们可以使用表来强制布局。这不是最佳选择,我知道我们不应该将表格用于非表格形式的事物,但是我们可以执行以下操作。

<table>
<tr>
<td><img src="Pin.jpg"></td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> ></td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td><img src="Pin.jpg"></td>
</tr>
<tr>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td><img src="Pin.jpg"></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>

由于要获得最大的兼容性,因此我们是否考虑过生成代表框架的单个图像?

如果我们使用的是PHP,则可以使用GD根据用于创建问题HTML的相同输入来动态创建表示框架的图像。这样做的最大好处是,任何可以显示PNG或者GIF的浏览器都可以显示框架。

我们是否尝试为列定义宽度?类似于&lt;td width =" 123px">或者&lt;td style =" width:123px">。也许也适合div?

我们可以将img替换为span,并在每个span上使用背景图片,具体取决于css类:

<p class="..."><span class="pin"></span><span> </span><span class="pin"></span>...
<p class="..."><span class="pin"></span><span> </span><span class="pin"></span>...
<p class="..."><span class="pin"></span><span> </span><span class="pin"></span>...
<p class="..."><span class="pin"></span><span> </span><span class="pin"></span>...

(个人观点,我认为最好将4行带有p标签而不是将单个div与br一起使用)

在CSS中,我们可以有类似以下内容:

p.smallpins {
    margin: 0;
    padding: 0;
    height: 11px;
    font-size: 1px;
}
p.smallpins span {
    width: 11px;
    background-image: url(nopinsmall.gif);
    background-repeat: ...
    background-position: ...
}
p.smallpins span.pin {
    background-image: url(pinsmall.gif);
}

  • 这里有nobr html标签;不过,不知道这有多好的支持。
  • 我们可以在元素(图像)之间使用css溢出:可见的和不间断的空格,但这些行中的html中没有其他空格。

每行的每种可能布置都有单独的图像。

那只需要30张图像(16 + 8 + 4 + 2)

这已经有一段时间了,但是我只是仔细阅读了一下,发现了这篇文章。无论我做什么,我都无法连续获取图像。无论如何,它们都会包裹起来。我尝试了一切。

然后我发现客户端上有一个设置,他们可以选择以下视图:1)单列,2)桌面视图和3)适合窗口。根据MSDN,默认值应该是适合窗口。但是我妻子的IE手机默认为"单列"。没什么要紧的,它会将所有内容包装到单个列中。如果我切换到其他2个选项中的任何一个,它看起来都很好。

好吧,我们可以使用meta标签进行设置:

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

将页面宽度设置为320px。不知道如何使其自动运行,如果有人知道,请发布。

在v4.6之前的blackberry上,这无法正常工作,除非我们手动更改为桌面视图,否则我们只能使用单列。在4.6或者更高版本中,以下代码应该可以工作,但我尚未进行测试:

<meta name="viewport" content="width=320">