Beiträge von Sempervivum

    Ich habe eine Lösung, aber keine Erklärung:

    Der Debugger zeigt, dass in schools.lower this das window-Objekt ist und nicht schools. Ändere ich die Zeile, indem ich eine anonyme Funktion verwende, die lower aufruft, funktioniert es:

    Code
            function renew_all() {
                schools.change();
                schools.bigger();
                window.setTimeout(function () { schools.lower() }, 2500);
                window.setTimeout(renew_all, 4000);
                //renew_all();
            }

    Vielleicht kann jemand mit tieferen Kenntnissen erklären, warum das so ist.

    Der Grund ist, dass Du die betr. Listenpunkte absolut positioniert hast, ohne eine Position anzugeben. Ändere folgendes:

    • Lösche position:absolute; bei den Listenpunkten der Untermenüs.
    • Gib den Listenpunkten im Hauptmenü ein position:relative; und den uls der Untermenüs ein position: absolute; und ein top: 100%;.
    • Beim Hover gib dem ul der Untermenüs ein display: flex; und flex-direction: column;
    • Entferne alles float bei den Untermenüs.

    Dann sieht es so aus:

    html-seminar.de/woltlab/attachment/1815/

    Feinheiten müssen noch etwas überarbetet werden, z. B. muss die Position noch etwas weiter herunter.

    Die Seite wird über https geladen, jQuery jedoch nicht. Lade jQuery auch über https, dann sollte es funktionieren.

    BTW: Wenn Du das Javascript an das Ende stellst, brauchst Du weder $(document).ready(function(){ noch $(function () {.

    1. Du hast da zwei Mal das Semikolon vergessen: In Zeile 3 und in Zeile 9.

    2. Damit das Hover funktioniert, kannst Du mein CSS aus #3 fast 1-zu-1 übernehmen, nur verwendest Du jetzt Klassen und musst daher die # durch Punkte ersetzen:

    Ich habe ja auch nicht definitiv gesagt, dass eine Tabelle mehr zu empfehlen ist. Ich würde jedoch von float abraten. Außerdem ist es mir sympatischer, wenn die Daten, die zusammengehören, auch zusammenstehen. Auf diese Weise habe ich folgendes gemacht:

    Also mit Flexlayout. U. U. wäre Gridlayout besser gewesen, aber ich empfehle das nicht gern, weil es von IE11 nicht richtig unterstützt wird.

    Zitat

    dass man table gar nicht mehr so nutzt?

    So pauschal sollte man das nicht sagen. Es trifft zu, dass man Tabellen besser nicht für Layoutzwecke verwenden sollte. Für die Darstellung von Daten, die tabellarischer Natur sind, ist nichts dagegen einzuwenden, Tabellen zu verwenden. Auf der einen Seite trifft das auf deine Daten zu, auf der anderen Seite auch wieder nicht, weil die Überschriften vertkal in der linken Spalte stehen statt horizontal im Kopf.

    Verstehe. Ist sicher machbar, aber mir im Moment zu kompliziert. Für sich gesehen, wäre es noch relativ einfach, diese Seiten horizontal zu sliden, aber man müsste es in das vorhandene Skript integrieren und das macht es ein wenig kompliziert.

    Vielleicht macht es jemand anders.

    Dieses CSS:

    Code
    .uk-margin-top uk-button uk-button-large uk-button-danger {
        display: none;
    }

    wird nicht funktionieren, denn es würde bedeuten:
    Das Element mit dem Namen "uk-button-danger" (also nicht der Klasse) ist ein Nachfahre des Elementes mit dem Namen "uk-button-large" und dieses ist ein Nachfahre des Elementes mit dem Namen "uk-button" und dieses ..., siehe hier:

    https://wiki.selfhtml.org/wiki/CSS/Selek…ahrenkombinator

    Richtig wäre dieses:

    Code
    .uk-margin-top.uk-button.uk-button-large.uk-button-danger {
        display: none;
    }

    Allerdings ist es auf jedenfalls empfehlenswert, einen Selektor zu verwenden, der spezifischer ist als diese Klassen, wie von Justus vorgeschlagen.

    Das geht relativ leicht auch mit CSS aber mit Einschränkungen bzgl. der Anordnung:

    • Das zweite Element muss ein Geschwisterelement oder ein Kind eines Geschwisterelementes des ersten Elementes sein.
    • Das zweite Element muss nach dem ersten notiert werden.

    Es gibt aber auch einen Vorteil: Mit CSS-Transition oder -Animation können viele Eigenschaften einfach animiert werden.

    Dieses CSS in eine Datei custom.css im Verzeichnis css schreiben:

    Code
    img.customimg {
        width: 10%;
        height: auto;
    }

    Diese Datei in der HTML-Datei einbinden:

    Code
        <link rel="stylesheet" type="text/css" href="css/normalize.css" />
        <link rel="stylesheet" type="text/css" href="css/demo.css" />
        <link rel="stylesheet" type="text/css" href="css/dragdealer.css" />
        <link rel="stylesheet" type="text/css" href="css/component.css" />
        <link rel="stylesheet" type="text/css" href="css/custom.css" />  <!-- dieses einfuegen -->
        <script src="js/modernizr.custom.js"></script>
    </head>

    Das HTML für das Einbinden des Bildes, wie Du siehst, habe ich dem Bild die Klasse "customimg" gegeben, damit man es zweifelsfrei identifizieren kann.

    Der Name des Bildes ist im CSS nicht notwendig, denn das ist eine allgemeine Formulierung. Verbal etwa: Nimm alle divs, die ein Attribut data-content mit dem Wert "content-2" haben. Darin suche jeweils ein img-Element und wende darauf die CSS-Anweisungen in den geschweiften Klammern an.

    Und das CSS gehört dann in den Head.

    Doch, das hat schon seine Richtigkeit, denn das ist CSS, kein HTML. Wenn Du es in deine HTML-Seite einbetten willst, muss es so aussehen und dann sind auch die spitzen Klammern da:

    Code
    <style>
        div[data-content="content-2"]>img {
           width: 30%;
           height: auto;
        }
    </style>

    Wenn es direkt in dem Container div.content liegt, so wie Du es in #12 gepostet hast, kannst Du es anpassen, indem Du die Größe in Prozent angibst:

    Code
    div[data-content="content-2"]>img {
       width: 30%;
       height: auto;
    }

    Liegt es in irgend welchen Untercontainern, kannst Du statt dessen Viewport-Units verwenden, z. B.:

    width: 30vw;d. h. 30% der Breite des Browserfenstern.