Hallo,
Bug?
Ja, doch.
Eine beliebige Anzahl Leerzeichen, Zeilenumbrüche oder Tabs im Text wie auch
innerhalb von und zwischen Inlineelementen werden jeweils zu einem
Leerzeichen zusammengefasst.
Korrekt.
Da ist der Opera auch in diesem Beispiel konsequent.
Nein.
Das Leerzeichen innerhalb der Spans darf er nicht weglassen (wegen pre),
Korrekt.
also ignoriert er die Leerzeichen bzw. Zeilenwechsel dazwischen.
Falsches Verhalten.
Mir ist bisher nicht aufgefallen, wo in den Specs, das Verhalten für diesen
Fall eindeutig anders gefordert wäre.
Die spez. sagt:
SGML (see [ISO8879], section 7.6.1) specifies that a line break immediately following a start tag must be ignored, as must a line break immediately before an end tag. This applies to all HTML elements without exception.
D.h. Z.B.:
... </span> das Leerzeichen zwischen dem letzten Punkt und </span> muss ignoriert werden.
So weit so gut.
A line break is defined to be a carriage return (
), a line feed (
), or a carriage return/line feed pair. All line breaks constitute white space.
---
Line breaks are also white space characters.
---
For all HTML elements except PRE, sequences of white space separate "words" (we use the term "word" here to mean "sequences of non-white space characters"). When formatting text, user agents should identify these words and lay them out according to the conventions of the particular written language (script) and target medium.
...
In particular, user agents should collapse input white space sequences when producing output inter-word space. This can and should be done even in the absence of language information
------
Und das macht Opera falsch. Denn er ignoriert hier nicht nur Zeilenumbrüche sondern auch "normale" leerzeichen.
Versuche mal folgendes (zwischen dem 3. und 4. <span> gibt eine Menge Leerzeichen) und beobachte das Verhalten beim bloßen text um bei den <span>s.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>testseite</title>
<style type="text/css">
p { border:1px solid black; padding:0.5em; }
.zusammen { white-space:pre; }
</style>
</head>
<body>
<p>
<span class="zusammen">bla bla bla bla bla </span> ¡ <span class="zusammen">blubb blubb blubb blubb blubb </span>
<span class="zusammen">bla bla bla bla bla </span> <span class="zusammen">blubb blubb blubb blubb blubb </span>
<span class="zusammen">laber laber laber laber laber </span>
<span class="zusammen">bla bla bla bla bla </span>
<span class="zusammen">blubb blubb blubb blubb blubb </span>
<span class="zusammen">laber laber laber laber laber </span>
<span class="zusammen">bla bla bla bla bla </span>
<span class="zusammen">blubb blubb blubb blubb blubb </span>
<span class="zusammen">laber laber laber laber laber </span>
In
particular,
user
agents
should
collapse
input
white
space
sequences
when
producing
output
inter-word
space.
</p>
</body>
</html>
Grüße
Thomas