So, while the default in HTML is to ignore multiple spaces and line breaks, you can override this using the <pre> tag. (X)HTML also allows the use of the non-breaking space ( ).
The HTML interpreter ignore white spaces by default. HTML ignore any space added after the first space between words. Any space at the start or end of a HTML tags is completely ignored. HTML interpreters also ignore line breaks by default.
We can also remove white space by setting parent element font-size to 0 and child elements font-size to 17px .
nowrap : Multiple whitespaces are collapsed into one, but the text doesn't wrap to the next line.
Oh, you can really easy accomplish that with a single line of CSS:
#parent_of_imgs { white-space-collapse: discard; }
Disadvantage, you ask? No browser has implemented this extremely useful feature (think of inline blocks in general) yet. :-(
What I did from time to time, although it's ugly as the night is dark, is to use comments:
<p><!--
--><img src="." alt="" /><!--
--><img src="." alt="" /><!--
--><img src="." alt="" /><!--
--><img src="." alt="" /><!--
--></p>
you can set the font-size
of the container to 0
and the white-space
disappears!
The browsers does ignore whitespace in most cases when it's next to a block element.
The problem with images (in this case) is that they are inline elements, so while you write them on separate lines, they are actually elements on the same line with a space between them (as the line break counts as a space). It would be incorrect for the browser to remove the spaces between the images, writing the image tags with line breaks between them should be handled the same way as writing the image tags on the same line with spaces between them.
You can use CSS to make the images block elements and float them next to each other, that solves a lot of problems with spacing, both the space between the images and the spacing on the text line below images.
The newest solution for this is using display: flex
on outside container, you can try this with following example:
Codepen →
(And yes, Flexbox is becoming widely supported: 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;
}
Update: Also, if you want your items to wrap (as standard inline-block elements do), don't forget to add flex-wrap: wrap
to your flexbox container.
Unfortunately, newlines count as space characters.
The best solution I have come up with is to use the whitespace inside the tags themselves, instead of outside:
<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" />
It's not ideal, either, I know. But at least it's not some bizarre CSS hack that relies on the size a space character is rendered or resorting to relative positioning, or JavaScript :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With