Beiträge von Sempervivum

    Dies:

    Zitat

    Failed to load resource: the server responded with a status of 404 (Not Found)

    sagt eindeutig aus, dass die Datei, die Du lesen wolltest, nicht gefunden wurde. In dem Fall liefert der Server eine Fehlerseite aus und weil diese nicht im JSON-Format ist, kommt es zu dem Fehler:

    Zitat

    Uncaught (in promise) SyntaxError: Unexpected token } in JSON at position 112

    Du hast ja das Problem, das AndreasB in Posting #2 beschrieben hat. Korrigiere das zunächst. Wie Du über die Elemente eines Objektes iterieren kannst, kannst Du hier nachlesen:

    https://wiki.selfhtml.org/wiki/JavaScrip…_.22for...in.22

    Liegt denn diese JSON-Datei wirklich lokal auf deinem Server?

    PS: Man kann das auch mit einer Tabelle mit relativ geringem Aufwand responsiv machen:

    Die Lösung findet man, wenn man nachliest, wie device-width definiert ist:

    Zitat von Selfhtml

    Das Merkmal device-width (Geräte-Breite) beschreibt die Breite des Ausgabegerätes, z. B. Breite eines Bildschirms in Pixel.

    Testet man das auf einem großen Monitor, indem man das Browserfenster zusammen schiebt, ändert sich natürlich nicht die Breite des Bildschirms. Lösung, indem Du width statt device-width verwendest. Ich würde allerdings erwarten, dass es funktioniert, wenn man es real auf einem Smartphone testet.

    Zitat

    Wie kann ich jedem zweiten Child einen farbigen Background geben.

    Mit :nth-child(odd) bzw. :nth-child(even) kannst Du in CSS jedes zweite Element ansprechen.

    Zitat

    Innerhalb dieses DIVs habe ich eine h1 und eine h2, die nun jedoch nebeneinander sind, weil das flex auf sie wirkt. Setze ich bei der h1 ein display:block, ändert das aber nichts. Auch ein br nach der h1 ändert nichts daran, auch nicht mit clear all.

    Warum ist das so?

    Wenn Du display:flex verwendest, haben die Regeln, nach denen Flex die Elemente anordnet, Vorrang. Du kannst in dem Fall die Elemente jedoch sehr einfach untereinander anordnen, indem Du flex-direction: column; hinzu fügst.

    Du hast Recht, den Fall, dass das Browserfenster in der Höhe klein ist aber breit, hatte ich nicht berücksichtigt. Dann fehlt wiederum das height: 100%; beim Container der Slideshow. Lässt sich aber leicht beheben, indem man die Höhe wiederum gezielt bei diesem setzt:

    Code
    div.cycle-slideshow {
        height: 100%;
    }

    Generell stiftet es ein wenig Verwirrung, dass der Container für den Pager ebenso wie der für die Slides jeweils ein div ist. Um sie besser auseinander halten zu können, könnte man für die Slides ein figure-Tag nehmen.

    Das liegt daran, dass die Höhe des Pagers auf 100% gesetzt ist. Weil er unten positioniert ist, ragt er nach unten heraus. Einfach die Zuweisung der Höhe weg lassen und besser auf bottom positionieren:

    Generell erfordert Cycle2 etwas mehr Handarbeit, wenn man erweiterte Features haben will. Das ist nicht nur ein Nachteil sondern auch ein Vorteil weil man alles genau so einrichten kann wie man es sich vorstellt.

    Die Seitenpunkte werden hier beschrieben unter "Timeout and pager":

    http://jquery.malsup.com/cycle/int2.html

    Zitat
    • Was bewirkt data-cycle-slides="> div">?

    Das sagt dem Plugin, dass die Elemente keine Bilder sondern Divs sind.

    Zitat
    • Ab welcher jQuery Version funktioniert das?

    Die FAQs sagen dazu: "Cycle2 requires jQuery 1.7 or later."

    Mit Cycle2 tue ich mich etwas leichter, weil das das HTML nicht so stark umarbeitet. Hier eine Demo:

    Die Bilder werden mit object-fit eingepasst, das führt dazu dass seitlich oder oben und unten freier Raum entsteht. Oder man müsste in Kauf nehmen, dass etwas abgeschnitten wird.

    Zitat
    Da wäre ich allerdings nicht drauf gekommen, da ich meine main.css nach Bootstrap lade und in der main.css habe ich für alles margin 0 definiert... Das sollte doch eig auch die Bootstrap-Stile überschreiben...dachte ich

    Die Erklärung dafür, dass es das nicht tut, findest Du hier:

    https://wiki.selfhtml.org/wiki/CSS/Tutorials/Einstieg/Kaskade#:~:text=In%20CSS%20werden%20Regelsätze%20nach,mit%20dem%20Startwert%20Null%20festgelegt.

    Zitat

    Ich habe auch schon festgestellt, dass es am eingebundenen Bootstrap liegt, das ich später für ein Carousel verwenden möchte.

    Wenn Du Bootstrap nur für das Carousel verwenden willst, dann lass es doch bei den übrigen Elementen außen vor, indem Du die betr. Klassen weg lässt, beim Footer das class="footer-resp". Allerdings hilft das nicht beim p-Element, da Bootstrap dieses ohne Klasse umgestaltet.

    Generell lässt sich Bootstrap nur sinnvoll einsetzen, wenn man das Layout so akzeptiert, wie es dadurch vorgegeben ist. Möchte man individuelle Vorstellungen umsetzen, ist es einem nur im Wege.

    Normaler Weise müsste es so funktionieren, wie webkriecher es angegeben hat. Keine Ahnung, warum der Reader es nicht anzeigt.

    AFAIK ist ein Semikolon hinter dem inline-block nicht zwingend erforderlich, aber zur Sicherheit versuche es dennoch damit:

    <span style="background-color: rgb(219, 218, 211); display: inline-block;">

    Ich finde da Validatoren für ePub, z. B. hier:

    https://www.ebookit.com/tools/bp/Bo/eBookIt/epub-validator

    Versuche mal, ob das Ergebnis dir weiter hilft.

    Oder gibt es bei dem Reader irgend welche Diagnosemöglichkeiten so wie die Entwicklerwerkzeuge im Browser?

    Zitat

    Warum um Himmels Willen rutscht die jetzt mit nach unten, die befindet sich ja außerhalb des DIV.

    :) Das ist eines der Mysterien von CSS und läuft unter dem Begriff "collapsing margins" bzw. "zusammenfallende Außenabstände", hier wird es erklärt:
    https://developer.mozilla.org/de/docs/Web/CSS/CSS_Boxmodell/Zusammenfallen_von_Außenabständen_meistern

    Setze ich jetzt das margin-top für das div.banner auf 0 so verschwindet der obere Abstand aber dann wird sich das Problem stellen, dass dieses div.banner unter die Nav rutscht. Normaler Weise könnte man das leicht lösen, indem man die Nav auf position:sticky setzt aber hier macht einem Bootstrap einen Strich durch die Rechnung weil die Klasse zwar "sticky" heißt aber position:fixed gesetzt wird, wahrscheinlich aus Gründen der Kompatibilität mit alten Browsern. Ein Grund mehr, warum ich kein Freund von Bootstrap bin.

    Ich sehe da ein generelles Problem: Du hast die Breite des Textcontainers auf 66.66% eingestellt und die des Bildes auf 33.33%. Wenn man das Bild jetzt so einrichtet, dass es im Container bleibt und sich nicht nach rechts ausdehnt, wird es relativ klein und der Textcontainer ist viel höher. Ich habe das mal im HTML-Inspektor demonstriert:

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

    Macht man das Bild größer, z. B. 50% 50% für die beiden Container, wird es nicht besser, denn dann haben die Texte weniger Platz und nehmen noch mehr Höhe in Anspruch - die Katze beißt sich in den Schwanz. Auch wenn man die Abstände, die Du mit <br> eingestellt hast, verkleinern würde, würde es nicht viel besser.

    Immerhin positiv, dass Du in Eigeninitiative eine Lösung gefunden hast :)

    Allerdings ist dieses Verfahren nicht besonders elegant und vor allem nicht änderungsfreundlich, denn jedes Mal, wenn Du im horizontalen Menü etwas hinzu fügst, musst Du auch eine weitere Funktion hinzu fügen und die vorhandenen ändern.

    Besser nur eine Funktion verwenden und die Menüpunkte in einer Schleife abarbeiten:

    HTML
                <ul class=vertical">
                    <li><a href="#erste" onclick="showHorizontal('erste')">first</a></li>
                    <li><a href="#zweite" onclick="showHorizontal('zweite')">second</a></li>
                    <li><a href="#dritte" onclick="showHorizontal('dritte')">third</a></li>
                </ul>
    JavaScript
            const horizontals = document.querySelectorAll('.horizontal');
            function showHorizontal(id) {
                horizontals.forEach(item => {
                    if (item.id == id) {
                        item.style.display = 'block';
                    } else {
                        item.style.display = 'none';
                    }
                });
            }

    So brauchst Du nur das HTML zu ändern, das Javascript ist universell.