HTML/CSS中是否有任何东西告诉浏览器完全忽略空白?

很多时候,当你想把两张图片放在一起时,你拼命地想保持HTML的可读性,但浏览器在它们之间放了一个空格。

所以不是这样的:

<img src="images/minithing.jpg" alt="my mini thing" />
<img src="images/minithing.jpg" alt="my mini thing" />
<img src="images/minithing.jpg" alt="my mini thing" />
<img src="images/minithing.jpg" alt="my mini thing" />

你会得到这个

<img src="images/minithing.jpg" alt="my mini thing" /><img src="images/minithing.jpg" alt="my mini thing" /><img src="images/minithing.jpg" alt="my mini thing" /><img src="images/minithing.jpg" alt="my mini thing" />

这太可怕了!


当前回答

图像是默认的内联元素,这就是为什么你会看到它们之间有空格。如果你在屏幕阅读器上听你的例子,你马上就知道为什么了:如果没有空白,你会听到:

我的小东西,小东西,小东西,小东西

所以,用我的迷你东西。(点加空格结束)作为alt文本或推与CSS一起的图像。不要只是删除代码中的空白。

其他回答

这个解决方案有什么困难之处?

css

.no-whitespace {
    line-height: 0;
    font-size: 0;
}

html

<span class="no-whitespace">

    <a href=# title='image 1'>
       <img src='/img/img1.jpg' alt='img1'/>
    </a>

    <a href=# title='image 2'>
       <img src='/img/img2.jpg' alt='img2'/>
    </a>

    <a href=# title='image 3'>
       <img src='/img/img3.jpg' alt='img3'/>
    </a>

</span>

缩小你的HTML!

在将响应呈现给浏览器之前缩小响应是一种很好的实践。

因此,除非您需要空格(并且您使用&nbsp;硬编码),否则您总是在缩小过程中删除空格。

这是一个简单的问题,但答案并不那么简单。

人们可以尝试避免源代码中的空格,这在CMS中并不总是可以实现,因为它们是由系统自动插入的。如果你想改变这一点,你必须深入挖掘CMS的核心代码。

Then you can try to use left floated images. But this is dangerous. At first you don't really have a control over vertical-alignment by definition. And secondly, you run into total chaos if you have so many floated elements, that they stretch over more than one line. And if you have a layout that relies on left floated elements (most of them do so today) you can even break some outer floating styles, if you clear floating after the images. This can be overridden, if you float any surrounding element. Rather not to be recommended.

因此,唯一的解决方案是使用CSS声明来处理空格处理过程。这不是任何标准的一部分(因为css3还没有完成)。

我更喜欢在HTML变体中没有空白。使用drupal作为CMS,这可以在你的template.php和主题文件中很容易实现。然后我选择内联块。

注: 在不同的浏览器中使用内联块相当复杂。 对于FF 2,你需要显示:-moz-inline-box。 其余的和IE8可以有display: inline-block后立即。 对于ie7,你需要在下面单独的声明中显示:inline(最好是通过条件注释)。

edit

我用来做一个元素内联块

elem.inline {
  display: -moz-inline-box; /* FF2 */ 
  display: inline-block; /* gives hasLayout in IE 6+7*/
}
/* * html hack for IE 6 */
* html elem.inline {
  display: inline; /* elements with hasLayout and display inline behave like inline-block */
}
/* * +  html hack for IE 7 */
* + html elem.inline {
  display: inline; /* elements with hasLayout and display inline behave like inline-block */
}

对此的最新解决方案是使用display: flex外部容器,您可以尝试以下示例:

代码笔→

(是的,Flexbox正在得到广泛支持:http://caniuse.com/#search=flexbox)

HTML:

<!-- Disregard spaces between inline-block elements? -->
<div class="box">
  <span></span>
  <span></span>
  <span></span>
</div>

CSS

.box {
  display: flex;
  display: -webkit-flex;    
}

span {
  display: inline-block;
  width: 30px;
  height: 30px;
  background-color: #fcf;
  border: 2px solid #f9f;
}

更新:此外,如果你想要你的项目包装(标准的内联块元素做),不要忘记添加flex-wrap: wrap到你的flexbox容器。

如果您使用的是php,这将非常有效。我在这里找到了答案。

我最初是想在用simplexml之类的东西解析html后删除仅由空白组成的文本节点,但这要便宜得多。

<?ob_start(function($html) {return preg_replace('/>\s+</','><',$html);});?>
    <img src='./mlp.png'/>
    <img src='./dbz.png'/>
    <img src='./b10af.png'/>
    <img src='./fma.png'/>
<?ob_end_flush;?>