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

这太可怕了!


当前回答

缩小你的HTML!

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

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

其他回答

不幸的是,换行符也算作空格字符。

我提出的最好的解决方案是在标签内部使用空白,而不是在标签外部:

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

我知道这也不理想。但至少它不是一些奇怪的CSS黑客,依赖于一个空间字符的大小被渲染或诉诸于相对定位,或JavaScript:)

对此的最新解决方案是使用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;?>

在大多数情况下,当空格位于块元素旁边时,浏览器会忽略它。

图像(在本例中)的问题是它们是内联元素,因此当您将它们写在单独的行上时,它们实际上是同一行上的元素,它们之间有一个空格(因为换行符也算作空格)。浏览器删除图像之间的空格是不正确的,在它们之间使用换行符编写图像标记应该与在同一行中使用空格编写图像标记的处理方式相同。

你可以使用CSS来让图像块元素和浮动它们彼此相邻,这解决了很多关于间距的问题,包括图像之间的空间和图像下面的文本行上的间距。

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

人们可以尝试避免源代码中的空格,这在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 */
}