Beiträge von Sempervivum

    Zitat

    Das Logo wird ja erst beim Scrollen ab einem bestimmten Punkt auf der Seite angezeigt. Wenn das Logo eingeblendet wird, verschiebt sich das Navigationsmenü nach rechts und dann taucht das Logo auf.

    Genau das verstehe ich nicht: Weil bei Skalierung sich die Größe des div nicht ändert, dürfte sich doch nichts verschieben?

    Wäre es eine Möglichkeit, dass Du eine Demo ohne Inhalte mit irgend welchen Blindtexten machst und diese online stellst?

    Das wird hier diskutiert:

    https://stackoverflow.com/questions/2210…isplay-property

    Zitat

    display:none; removes a block from the page as if it were never there.

    deshalb funktioniert die Animation nicht. Als Lösung wird angeboten, statt dessen die opacity zu animieren, das können wir ja noch schnell ausprobieren:

    Zitat

    Ich möchte schön mehrere elemente erzeugen, deswegen mit DocumentFragment.

    Das ist natürlich ein Grund und dann ist es auch angebracht.

    Zitat

    möchte ich ein div ins das erste div erzeugen. Muss ich es mir mit getElementById(....) holen?

    Wenn ich das richtig verstehe, hast Du das Div ja als Javascript-Objekt und dann kannst Du das neue auch dort einfügen. In etwa so:

    Das wäre kein Problem, Du müsstest im CSS nur das display auf none setzen und beim Scrollen wieder auf block oder flex:

    Ich fürchte nur, dass es dann einen unangenehmen Sprung gibt, aber sieh es dir erst Mal an.

    Da fehlen uns jetzt noch zwei Dinge:

    Das Logo muss sich in der Größe an das Div anpassen und wir müssen width und height animieren:

    Zitat

    Eine Sache noch:

    Ich sollte ja das style="display: none;" entfernen. Dies hatte ich drinstehen, damit der Div nur angezeigt wird, wenn das Scroll-Event gestartet ist, da dort sonst ein unschöner freier Platz ist. Jetzt wird der Div aber immer angezeigt. Kann ich den auch einfach über CSS ausblenden?

    Da sind wir jetzt mit dem scale u. U. auf falschen Weg, denn dabei ist es so, dass das Element auf wenn es auf 0 herunter skaliert ist, den Platz einnimmt. Lass uns das erstmal zum Laufen bringen und dann sehen wir weiter.

    Jetzt getestet und so funktioniert es:

    Woran es jetzt lag, weiß ich nicht, ich hatte zunächst das inline display: none; noch drin und der Eventhandler war mir abhanden gekommen.

    Eher habe ich da etwas falsch verstanden, weil ich das HTML nicht gesehen habe. Du willst ja das Logo sichtbar machen, wenn man herunter scrollt. D. h. den Klassennamen auf "visi" ändern:

    Code
        if(window.matchMedia('(min-width: 769px)').matches){
            if (document.body.scrollTop > 250 || document.documentElement.scrollTop > 250) {
                    document.getElementById("upperlogo").classList.add("visi");
                } else {
                    document.getElementById("upperlogo").classList.remove("visi");
                }
            }
        }

    Du machst ja das Logo mit dem Inlinestyle style="display: none;" unsichtbar. Das zunächst Mal löschen, denn wir wollen ja jetzt die Größe des Logos animieren. Dann im CSS das Logos zunächst auf 0 herunter verkleinern und wenn die Klasse "visi" vorhanden ist, wieder sichtbar machen:

    AFAIK ist dieses -webkit-transform heute nicht mehr notwendig.