henry: print Ausgabe mit css

Hallo,

ich quäle mich gerade mit css um eine Druckausgabe zu beinflussen.

aktuelle habe ich es so gelöst

Eine eigene datei.css

@media print { #noprint { display:none; }
               .menu { display: none; }
               @page { size: 297mm 210mm landscape; }
             }

Beim debuggen eines anderen Problems, zeigt mir der debugger (konsole) von Firefox an, das die css "size" nicht erkannt wird. Vermutlich ein Formatfehler. :-(

Ich sehe es aber nicht .... muss ich eigentlich ein ";" am Ende jeder css Zeile machen ? Fragen über Fragen ;-)

Danke henry

  1. Hallo

    ich quäle mich gerade mit css um eine Druckausgabe zu beinflussen.

    Viel Spaß dabei.

    Eine eigene datei.css

    @media print { #noprint { display:none; }
                   .menu { display: none; }
                   @page { size: 297mm 210mm landscape; }
                 }
    

    Beim debuggen eines anderen Problems, zeigt mir der debugger (konsole) von Firefox an, das die css "size" nicht erkannt wird. Vermutlich ein Formatfehler. :-(

    Wenn ich die Einleitung des Artikels zur Druckausgabe im Wiki richtig interpretiere, ist es kein „Formatfehler“, sondern schlicht die fehlende Unterstützung der Eigenschaft.

    Zitat von dort:

    „In CSS2 war vorgesehen, viele Eigenschaften wie size (Seitengröße), marks (Schnitt- und Passermarken) und für spezielle Seitenformate benannte Seitentypen definieren zu können. Wegen mangelnder Browserunterstützung (nur Opera implementierte diese) wurden diese Eigenschaften jedoch in CSS 2.1 nicht übernommen.“

    muss ich eigentlich ein ";" am Ende jeder css Zeile machen?

    Jein. Du darfst das Semikolon nach der letzten Regel in einem Block weglassen [1]. Das heißt im Umkehrschluss, dass es bei allen anderen Anweisungen nicht fehlen darf. Es ist aus praktischen Erwägungen aber absolut nicht empfehlenswert, das Semikolon wegzulassen.

    Ein Block mit mehreren Anweisungen, deren letzte nicht mit einem Semikolon abgeschlossen ist, könnte folgendermaßen aussehen:

    body {
      margin: 0;
      padding: 0;
      background: #fff;
      color: #000 /* Wie gesagt, das ist absolut nicht empfehlenswert! */
    }
    

    Heute notierst du einen Regelsatz aus mehreren Blöcken und lässt das letzte Semikolon jedes Blocks weg. In einem Monat ergänzt du einen oder ein paar Blöcke, vergisst aber in irgendeinem der Blöcke, das Semikolon nach der ehedem letzten Regel zu ergänzen. Du wirst dich mit großer Wahrscheinlichkeit nach dem damit auftretenden Fehler dumm und dusselig suchen, obwohl du dir das mit der konsequenten Verwendung des Semikolons hättest sparen können.

    Tschö, Auge

    --
    Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
    Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
    1. @@Auge

      muss ich eigentlich ein ";" am Ende jeder css Zeile machen?

      Jein. Du darfst das Semikolon nach der letzten Regel in einem Block weglassen [1].

      Nein. In einem {}-Block stehen keine Regeln; darin stehen Deklarationen (üblicherweise Eigenschaft ':' Wert).

      Eine Regel(menge) besteht aus einem Selektor bzw. einer Aufzählung von Selektoren und einem {}-Block.

      Deklarationen kann man nicht mit ';' abschließen; das ';' steht immer zwischen Deklarationen. Eine Deklaration kann auch leer sein.

      (Whitespace kann so ziemlich überall stehen; das hab ich der Einfachheit halber mal weggelassen. Einzelheiten siehe Spec.)

      Das heißt im Umkehrschluss, dass es bei allen anderen Anweisungen nicht fehlen darf.

      Anweisungen?

      Es ist aus praktischen Erwägungen aber absolut nicht empfehlenswert, das Semikolon wegzulassen.

      Kommt drauf an. Bei Einzeilern mit einer Deklaration im Block wie *, ::before, ::after { box-sizing: border-box } besteht kein Grund für ein Semikolon.

      Bei Mehrzeilern hast du unzweifelhaft recht, dass man auch in der letzten Zeile vor } ein Semikolon setzen sollte.

      LLAP 🖖

      --
      “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
      Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
      1. Hallo

        muss ich eigentlich ein ";" am Ende jeder css Zeile machen?

        Jein. Du darfst das Semikolon nach der letzten Regel in einem Block weglassen.

        Nein. In einem {}-Block stehen keine Regeln; darin stehen Deklarationen (üblicherweise Eigenschaft ':' Wert).

        Eine Regel(menge) besteht aus einem Selektor bzw. einer Aufzählung von Selektoren und einem {}-Block.

        Ein Block besteht aus einer Menge von Regeln, mit denen ja nur die Deklarationen gmeint sein können, die sich als einziges in dem Block befinden, aber eine der Deklarationen ist keine Regel, aha.

        Für mich ist eine Deklaration eine Regel, aber wenn du meinst, Korinthen scheißen zu müssen, bitteschön.

        Deklarationen kann man nicht mit ';' abschließen; das ';' steht immer zwischen Deklarationen. Eine Deklaration kann auch leer sein.

        Wenn du meinst, Korinthen scheißen zu müssen, bitteschön.

        Es ist aus praktischen Erwägungen aber absolut nicht empfehlenswert, das Semikolon wegzulassen.

        Kommt drauf an. Bei Einzeilern mit einer Deklaration im Block wie *, ::before, ::after { box-sizing: border-box } besteht kein Grund für ein Semikolon.

        Es besteht sehr wohl ein Grund für ein Semikolon, nämlich der, es durchgängig zu benutzen, um nicht in die von mir beschriebene Falle zu stolpern. Der mag für einen Gunnar B. nicht gelten, für einen Anfänger, wie es henry zu sein scheint, ist die damit begründete Regel aber sehr wohl hilfreich.

        Tschö, Auge

        --
        Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
        Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
        1. @@Auge

          Für mich ist eine Deklaration eine Regel, aber wenn du meinst, Korinthen scheißen zu müssen, bitteschön.

          Wenn du meinst, Dinge benennen zu können wie du willst, bitteschön.

          Für die Kommunikation mit anderen ist es jedoch dienlich, Dinge so zu benennen wie andere es auch tun.

          Es besteht sehr wohl ein Grund für ein Semikolon, nämlich der, es durchgängig zu benutzen, um nicht in die von mir beschriebene Falle zu stolpern.

          Wenn bei

          selektor { eigenschaft1: wert1 }
          

          was dazukommt und es zu

          selektor
          {
            eigenschaft1: wert1;
            eigenschaft2: wert2;
          }
          

          wird, gibt es an der Schreibweise so viel zu ändern, dass das Semikolon da mit abfällt. Ich stufe die Gefahr, da in der letzten Zeile von } kein Semikolon zu setzen, gering ein. YMMV.

          LLAP 🖖

          --
          “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
          1. Hallo

            Für mich ist eine Deklaration eine Regel, aber wenn du meinst, Korinthen scheißen zu müssen, bitteschön.

            Wenn du meinst, Dinge benennen zu können wie du willst, bitteschön.

            Ich halte meine Auslegung von „Regel“ in diesem Kontext keineswegs für abwegig und für durchaus verständlich und nachvollziehbar. Warum mehrere Deklarationen sprachlich eine Regelmenge sein dürfen, eine einzelne Deklaration aber keine Regel, erschließt sich mir nicht.

            Für die Kommunikation mit anderen ist es jedoch dienlich, Dinge so zu benennen wie andere es auch tun.

            Wenn du dir das bloß auch zu Herzen nähmst …

            Es besteht sehr wohl ein Grund für ein Semikolon, nämlich der, es durchgängig zu benutzen, um nicht in die von mir beschriebene Falle zu stolpern.

            Wenn bei

            selektor { eigenschaft1: wert1 }
            

            was dazukommt und es zu

            selektor
            {
              eigenschaft1: wert1;
              eigenschaft2: wert2;
            }
            

            wird, gibt es an der Schreibweise so viel zu ändern, dass das Semikolon da mit abfällt. Ich stufe die Gefahr, da in der letzten Zeile von } kein Semikolon zu setzen, gering ein.

            Dann schätzt du das mMn falsch ein. Fragen, warum das frisch geänderte CSS nicht funktioniert, bei denen sich schlussendlich genau solche Kleinigkeiten wie ein fehlendes Semikolon die Ursache herausstellten, hatten wie hier schon mehr als genug. Und zwar so viel „mehr als genug“, dass „gering“ mMn definitiv nicht zutreffen kann.

            Tschö, Auge

            --
            Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
            Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
            1. @@Auge

              Ich halte meine Auslegung von „Regel“ in diesem Kontext keineswegs für abwegig und für durchaus verständlich und nachvollziehbar. Warum mehrere Deklarationen sprachlich eine Regelmenge sein dürfen, eine einzelne Deklaration aber keine Regel, erschließt sich mir nicht.

              Regel und Regelmenge sind synonym.

              Eine Regel(menge) besteht aus mehr als den Deklarationen; zu einer Regel gehört auch der Selektor (bzw. die Liste der Selektoren), für den (die) die Deklarationen gelten sollen.

              Eine Regel(menge) kann eine Deklaration enthalten, wie bspw. body { } oder body { max-width: 42em }.

              body { max-width: 42em; } wären zwei Deklarationen.

              Hier ein Beispiel mit dreien:

              body { max-width: 42em; margin: auto; } mit Kennzeichnung, was Deklararion (mit Eigenschaft und Wert), Selektor, Regel(menge) bedeutet

              Für die Kommunikation mit anderen ist es jedoch dienlich, Dinge so zu benennen wie andere es auch tun.

              Wenn du dir das bloß auch zu Herzen nähmst …

              Das tue ich. Ich verwende die Bezeichnungen genau so, wie sie von den Machern von CSS vorgesehen wurden.

              Ob die Bezeichnungen so sinnvoll gewählt wurden, darüber mag man streiten. Aber selbst wenn nicht, ist es wohl weniger strittig, dass es nicht sinnvoll ist, andere Bezeichnungen dafür zu verwenden bzw. diese Bezeichnungen anders zu verwenden.


              wird, gibt es an der Schreibweise so viel zu ändern, dass das Semikolon da mit abfällt. Ich stufe die Gefahr, da in der letzten Zeile von } kein Semikolon zu setzen, gering ein.

              Dann schätzt du das mMn falsch ein.

              Ich glaub nicht. Ich hab allerdings ein blödes Beispiel gebracht.

              Fragen, warum das frisch geänderte CSS nicht funktioniert

              … sollten sich gar nicht stellen. Die einzeilige Schreibweise sollte man von vornherein nur dann verwenden, wenn man sicher ist, dass es bei der einen Deklaration in der Regel bleibt.

              Anderes Beispiel, hoffentlich weniger blöd:

              .foo
              {
                display: inline-block;
              }
              
              .foo.small  { width: 3em }
              .foo.medium { width: 5em }
              .foo.large  { width: 7em }
              

              Die Regel für .foo wurde bewusst mehrzeilig (und mit Semikolon!) notiert. Da kann durchaus was dazukommen:

              .foo
              {
                display: inline-block;
                color: rebeccapurple;
              }
              

              Bei .foo.small / .foo.medium / .foo.large mögen sich zwar die Werte auf 4em / 8em / 12em ändern können; es liegt aber in der Natur der Sache, dass da keine andere Deklaration als die der width hinzukommt.

              In den Fall kann die Notation in einer Zeile angebracht sein. Und in dem Fall halte ich ich ein Semikolon für unnötig.

              LLAP 🖖

              --
              “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
              Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
              1. Hallo

                wird, gibt es an der Schreibweise so viel zu ändern, dass das Semikolon da mit abfällt. Ich stufe die Gefahr, da in der letzten Zeile von } kein Semikolon zu setzen, gering ein.

                Dann schätzt du das mMn falsch ein.

                Ich glaub nicht. Ich hab allerdings ein blödes Beispiel gebracht.

                Das Beispiel ist so gut oder schlecht, wie jedes Andere.

                Fragen, warum das frisch geänderte CSS nicht funktioniert

                … sollten sich gar nicht stellen. Die einzeilige Schreibweise sollte man von vornherein nur dann verwenden, wenn man sicher ist, dass es bei der einen Deklaration in der Regel bleibt.

                Auch wenn du es auf Teufel raus ignorieren willst, die Empfehlung richtet sich an Anfänger wie henry. Und die sind sich keineswegs sicher, ob sie dem Regelblock zukünftig eine oder mehrere weitere Deklarationen hinzufügen oder nicht.

                Wenn du das überblickst, sei es so. Anfänger (und nicht nur diese) tun das in aller Regel nicht. Und genau deshalb ist es für diese eben empfehlenswert, sich das grundsätzliche Setzen des Semikolons anzugewöhnen. Auf diese Weise können sie in dieser Hinsicht nichts falsch machen, auch wenn das Semikolon an der einen oder anderen Stelle nicht notwendig, aber auch nicht falsch ist.

                In den Fall kann die Notation in einer Zeile angebracht sein. Und in dem Fall halte ich ich ein Semikolon für unnötig.

                Du hättest zusätzlich das „ich“ betonen sollen.

                Tschö, Auge

                --
                Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
                Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
              2. Hallo Gunnar,

                Und in dem Fall halte ich ich ein Semikolon für unnötig.

                Diese Einstellung hat der Autor des Goto-Fail-Bugs auch gehabt.

                Fehler passieren. Es ist sinnvoll defensiv zu formulieren, um Fehlerklassen zu eliminieren.

                LG,
                CK

  2. @media print { #noprint { display:none; }
                   .menu { display: none; }
                   @page { size: 297mm 210mm landscape; }
                 }
    

    Beim debuggen eines anderen Problems, zeigt mir der debugger (konsole) von Firefox an, das die css "size" nicht erkannt wird.

    Ich drucke viel mit Firefox. Die Format-Angabe wird vollkommen ignoriert. Mit [Alt][D] dann [V] siehst du die Druckvorschau. Oben links klick auf "Seite einrichten". Das musst du immer machen, wenn sich das Druckformat ändert.

    Linuchs