MudGuard: Opera und CSS - zwei Welten prallen aufeinander ...

Hi,

folgendes CSS:

p { border:1px solid black; padding:0.5em; }
.zusammen { white-space:pre; }

und folgendes HTML:

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

erzeugt im Gecko die erwartete Ausgabe:
der Zeilenumbruch im Absatz erfolgt gruppenweise.

Im IE (der ja Probleme mit white-space:pre hat) wird wortweise umgebrochen (das ist zwar nicht so schön, weil die Gruppen zerlegt werden, aber noch einigermaßen akzeptabel).

Aber was Opera produziert, spottet jeder Beschreibung.
Obwohl für p kein white-space:pre gesetzt ist, weigert sich Opera (7.53), überhaupt umzubrechen - der Absatz ist einzeilig, der Text läuft rechts aus dem Rahmen raus.
Dabei ist doch whitespace vorhanden zwischen den einzelnen spans, es könnte also umgebrochen werden.
Auch ein explizit angegebenes white-space:normal für p ändert im Opera nichts.
Irgendwie scheint der Mistbrowser das white-space:pre ans _Eltern_element zu vererben ...

Ist das in anderen (neueren?) Opera-Versionen auch so?

Testseite: http://temp.andreas-waechter.de/testseite.html

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  1. Irgendwie scheint der Mistbrowser das white-space:pre ans _Eltern_element zu vererben ...

    Andreas,
    Hab keinen Opera zum Testen da, aber hält ihn vielleicht
      span.zusammen { white-space:pre; }
      ^^^^
    davon ab?

    Gruß,
    Gunnar

    --
    „Solang wir noch tanzen können
    und richtig echte Tränen flennen,
    ist noch alles offen,
    ist noch alles drin.“
    (Gundermann)
    1. Hi,

      Irgendwie scheint der Mistbrowser das white-space:pre ans _Eltern_element zu vererben ...

      Hab keinen Opera zum Testen da, aber hält ihn vielleicht
        span.zusammen { white-space:pre; }
        ^^^^
      davon ab?

      Nö - für p ist ja kein white-space:pre gesetzt. Also muß bei Überschreitung der Breite zwischen den spans umgebrochen werden. So wie es die Geckos ja auch machen.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hab keinen Opera zum Testen da, aber hält ihn vielleicht
          span.zusammen { white-space:pre; }
          ^^^^
        davon ab?

        Nö - für p ist ja kein white-space:pre gesetzt.

        Ja, schon klar. Aber vielleicht begeht Opera den Fehler ja nicht, wenn nicht nur die Klasse, sondern explizit das Element genannt wird.

        Die Wege der Bugs sind unergründlich... War nur ’ne Idee.
        Gunnar

        --
        „Solang wir noch tanzen können
        und richtig echte Tränen flennen,
        ist noch alles offen,
        ist noch alles drin.“
        (Gundermann)
        1. Hallo,

          Ja, schon klar. Aber vielleicht begeht Opera den Fehler ja nicht, wenn nicht nur die Klasse, sondern explizit das Element genannt wird.

          Doch das tut er.

          Grüße
          Thomas

  2. Hallo,

    <span class="zusammen">bla bla bla bla bla </span>

    Wenn man das Leerzeichen vor den schließenden span-Tags entfernt, funktioniert es übrigens.
    Melde den Bug bitte trotzdem, bei Opera 8 existiert er noch.

    Mathias

    1. Hallo Mathias

      Melde den Bug bitte trotzdem, bei Opera 8 existiert er noch.

      Bug?

      Eine beliebige Anzahl Leerzeichen, Zeilenumbrüche oder Tabs im Text wie auch
      innerhalb von und zwischen Inlineelementen werden jeweils zu einem
      Leerzeichen zusammengefasst.
      Da ist der Opera auch in diesem Beispiel konsequent.
      Das Leerzeichen innerhalb der Spans darf er nicht weglassen (wegen pre),
      also ignoriert er die Leerzeichen bzw. Zeilenwechsel dazwischen.

      Mir ist bisher nicht aufgefallen, wo in den Specs, das Verhalten für diesen
      Fall eindeutig anders gefordert wäre.

      Auf Wiederlesen
      Detlef

      --
      - Wissen ist gut
      - Können ist besser
      - aber das Beste und Interessanteste ist der Weg dahin!
      1. 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 (&#x000D;), a line feed (&#x000A;), 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>                               &iexcl;                <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

        1. Hi,

          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.

          Nein, muß es nicht. Denn es handelt sich um ein Leerzeichen, nicht um einen Linebreak.
          (A line break is defined to be a carriage return (&#x000D;), a line feed (&#x000A;), or a carriage return/line feed pair.)

          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").

          blubb</b> </span> bla</p>

          Hier handelt es sich nicht um eine Sequenz von Whitespace, sondern um 2 - denn dazwischen steht non-white-space (das ende-tag des span).

          Und das macht Opera falsch. Denn er ignoriert hier nicht nur Zeilenumbrüche sondern auch "normale" leerzeichen.

          Sehe ich auch so.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo,

            D.h. Z.B.:
            ... </span>  das Leerzeichen zwischen dem letzten Punkt und </span> muss ignoriert werden.

            Nein, muß es nicht.

            Hmm, ja, muss nicht ist (zwar) richtig, aber http://www.w3.org/TR/html401/struct/text.html#h-9.1. (letzter Absatz mit dem Bsp. (bezieht sich auf die Autoren))

            Grüße
            Thomas

  3. Aber was Opera produziert, spottet jeder Beschreibung.
    Obwohl für p kein white-space:pre gesetzt ist, weigert sich Opera (7.53), überhaupt umzubrechen - der Absatz ist einzeilig, der Text läuft rechts aus dem Rahmen raus.

    Ich hab hier 7.11 und wenn ich das richitg sehe macht er genau das was du willst.

    Struppi.

    1. Hallo.

      Ich hab hier 7.11 und wenn ich das richitg sehe macht er genau das was du willst.

      Ich verwende die 7.54 und die zeigt genau den Bug, der von MudGuard hier beschrieben wurde

      Gruß, Ashura

      --

      Selfcode: sh:( fo:| ch:? rl:? br:^ n4:& ie:% mo:| va:) de:[ zu:| fl:( ss:{ ls:# js:|
    2. Hi,

      Aber was Opera produziert, spottet jeder Beschreibung.
      Obwohl für p kein white-space:pre gesetzt ist, weigert sich Opera (7.53), überhaupt umzubrechen - der Absatz ist einzeilig, der Text läuft rechts aus dem Rahmen raus.
      Ich hab hier 7.11 und wenn ich das richitg sehe macht er genau das was du willst.

      D.h. daß der Opera immer schlechter wird ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.