Zeilenumbruch auf Webserver funktioniert nicht

Hallo Leute,
ich bin noch ziemlicher Anfänger in Sachen Arduino, habe aber schon ein paar kleine Projekte umgesetzt.
Aktuell habe ich ein Problem bei dem ich einfach nicht mehr weiter komme, auch wenn es vielleicht nur eine Kleinigkeit ist.

Ich habe mir den Code von dieser Website angepasst um eine Temperaturüberwachung für meine Garage zu haben.

Alles funktioniert tadellos wie es soll, ich bekomme es aber einfach nicht hin,
die Temperaturen untereinander anzeigen zu lassen.
Ich habe bereits vieles probiert mit /p, < br > usw..... alles ohne Erfolg.

Was mache ich falsch?

Außerdem wird die Grafik am Ende mit in das letzte Anzeigefeld integriert,
sollte das nicht separat ohne Hintergrund angezeigt werden nach schließen der Klasse? ("/feld")

Vielen Dank vorab für Eure Unterstützung.

            // ----- CSS-Code für das Design der Buttons ---
            if (digitalRead(schloss) == HIGH)                      // Schloss verriegelt ist (HIGH-Pegel)
            {
              client.println("<style>html {  background-color: #58FA58; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}");     // Hintergrund grün
            }
            else
            {
              client.println("<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}");    // Hintergrund rot
            }
            client.println(".button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}");
            client.println(".feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 12px 20px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #FF0000;}</style></head>");

            // ----- Website - Überschrift -------------
            client.println("<body><h1><U>ESP8266 Garagenthermometer</U></h1>");


            client.print(daysOfTheWeek[timeClient.getDay()]);
            client.print(", ");
            client.println(timeClient.getFormattedTime());

            // ----- Anzeige des Status und des Buttons Nr.1 -----
            // client.println("<p><U>Betriebsmodus = " + steuerModus + "</U></p>");
            // If the output1State is off, it displays the ON button
            //if (lichtModus == "AN") {
            client.println("<p><a href=\"/1/AN\"><button class=\"button\">Licht an 10 Sekunden</button></a></p>");
            //} else {
            //  client.println("<p><a href=\"/1/MANUELL\"><button class=\"button button2\">MANUELL</button></a></p>");
            //}

            // ----- Anzeige des Status und des Buttons Nr.2 -----
            //   client.println("<p><U>Ventilstatus = " + ventilStatus + "</U></p>");
            // If the output2State is off, it displays the ON button
            if (dauerlicht == 0) {
              client.println("<p><a href=\"/2/AN\"><button class=\"button\">Dauerlicht AN</button></a></p>");
            } else {
              client.println("<p><a href=\"/2/AUS\"><button class=\"button button2\">Dauerlicht AUS</button></a></p>");
            }
            
            // ---- Anzeige der Temperatur ------------------------

            client.println("<button class=\"feld\">");
            client.println("<p><U>Kuehlschrank</U></p>");
            client.println(sensors.getTempC(sensorCool));
            client.println("*C");
            client.println("</feld>");
            client.println("");                                       // sendet einen Zeilenumbruch

            client.println("<button class=\"feld\">");
            client.println("<p><U>Eisfach</U></p>");
            client.println(sensors.getTempC(sensorFrost));
            client.println("*C");
            client.println("</feld>");
            client.println("");                                       // sendet einen Zeilenumbruch

            client.println("<button class=\"feld\">");
            client.println("<p><U>Garage</U></p>");
            client.println(sensors.getTempC(sensorRoom));
            client.println("*C");
            client.println("</feld>");
            client.println("");                                       // sendet einen Zeilenumbruch
            client.println("");                                       // sendet einen Zeilenumbruch

            client.println("<p><a href=\"/3/Reset\"><img src=\"http://www.meineurl.de/bird.png\" width=100  alt=\"bird\"></a></p>");

            client.println("</body></html>");

Versuch mal ein </BR> nach jeder Ausgabe.

Danke für die schnelle Reaktion. Das hatte ich bereits mit in meinen Text geschrieben, dass ich das auch schon probiert habe, allerdings wurde dies ausgeblendet und führte hier im Forentext direkt zu einem Zeilenumbruch. :smiley:
Ich werde den Text nochmal editieren und vielleicht so sichtbar machen. :slight_smile:

:slight_smile:
Ok, wenn Du sowas hast, dann mach vor und nach dem html-Tag ein `
sieht dann so aus:

</BR>

Hier auf der Tastatur ist es NICHT der apostroph wo auch die Raute ist, sondern neben dem ß gibt es die Taste mit ' und ` - letztere mit der Shifttaste zu erreichen und beide Zeichen werden dann mit einem Space darstellbar :slight_smile:

Deinen unvollständigen Code kann man nicht testen.

Poste mal das ganze generierte HTML in Code-Tags so das man das in einem browser ansehen kann.

und wo genau soll der Zeilenumbruch sein? Markier das in einer Grafik mal

Die gelben Linien zeigen die gewünschten Zeilenumbrüche.
Die Grafik soll sich separat ganz unten auf der Seite befinden, ohne die grüne Umrandung.
Den HTML-Code muss ich erstmal bereinigen um den posten zu können,
da sind einfach zu viele Kommentare drin, die ich bisher nicht gelöscht habe.
Um nicht unnötig viel Code zu posten hole ich das noch nach. :slight_smile:

Das HTML ist das was der Server zum Browser retour sendet.
Das HTML siehst du im Browser, wenn du z.B. mit der rechten Maustaste du dir den "Seitenquelltext anzeigen" lässt. Möglicherweise ist es in deinem Broswser anders abzufragen, aber das wird schon wo gehen.
Das ist das reine HTML ohne C++ Quelltext und das kannst du hier posten.

Außerdem kannst du mit einem W3C Validator überprüfen ob das generierte HTML valide ist

Damit kannst du alle formalen Fehler beheben - dann bitte auch wieder das aktualisierte HTML hier einstellen.

Ohne HTML können wir hier nur raten. Ich tippe auf einen Zusammenhang mit display: inline-block. Da ich aber nicht gerne rate und unausgesteste "Hinweise" nur zu weiteren Rückfragen führen werden, wäre es gut, wenn du das HTML postest.

Danke für den Hinweis zum Seitenquelltext anzeigen, die Funktion "untersuchen" im Firefox kenne ich schon und nutze diese auch,
mir war nicht bewusst, dass man so auch den reinen Quelltext anzeigen lassen kann.
Ich werde mich mal mit dem w3c- Validator auseinandersetzen.
Hier der angezeigte Quelltext.

<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}
.button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.button2 {background-color: #FF0000;}</style></head>
<body><h1><U>ESP8266 Garagenthermometer</U></h1>
Sonntag, 13:12:28
<p><a href="/1/AN"><button class="button">Licht an 10 Sekunden</button></a></p>
<p><a href="/2/AN"><button class="button">Dauerlicht AN</button></a></p>
<button class="feld">
<p><U>Kuehlschrank</U></p>
-127.00
*C
</feld>

<button class="feld">
<p><U>Eisfach</U></p>
-127.00
*C
</feld>

<button class="feld">
<p><U>Garage</U></p>
-127.00
*C
</feld>


<p><a href="/3/Reset"><img src="http://www.meineurl.de/bird.png" width=100  alt="bird"></a></p>
</body></html>


Ich hab den Quelltext jetzt mal analysieren lassen, verstehe die Fehlermeldungen aber nur bedingt.
Ich habe jetzt zumindest noch die Sprache in der ersten Zeile festgelegt,
doch wieso zum Beispiel gemeldet wird dass <head> fehlt obwohl es direkt in der zweiten Zeile steht erschließt sich mir nicht.
Außerdem wird erkannt, dass <feld> erneut geöffnet wird obwohl der selbe Typ noch geöffnet ist.
Der Typ ist jedoch mit </feld> geschlossen worden, so sehe ich das jedenfalls.
Beim öffnen und schließen der Typen hab ich auch die Reihenfolge eingehalten, denke ich zumindest.
Ich habe mir html mehr oder weniger komplett allein beigebracht, bin also nicht vom Fach und lerne gern dazu. :slight_smile:

nein.
Da steht dass title im head fehlt - und das tut es auch

<button class="feld">
<p><U>Kuehlschrank</U></p>
-127.00
*C
</feld>

du weist dem button die Klasse feld zu. Wie kommst du da drauf, dass du ein tag "feld" schließen müsstest. Die Klasse ist onehin nur im Kontext von button wirksam.

Der Validator reklamiert das end tag:

So, nun hab ich den Code mal angepasst, deutlich weniger Fehlermeldungen
und nun genau gar keinen Zeilenumbruch mehr. :frowning:

Die Anpassung <html lang="de">wird beim kompilieren als fehlerhaft erkannt.
Die </feld>-Einträge habe ich geändert und auch ein Title hinzu gefügt.
Wieso erhalte ich jetzt weiterhin Fehlermeldungen dafür?

Hier der aktuelle Code und ein Screenshot

<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}
.button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.button2 {background-color: #FF0000;
<title>ESP-Garagenthermometer</title></style></head>
<body><h1><U>ESP8266 Garagenthermometer</U></h1>
Sonntag, 15:23:02
<p><a href="/1/AN"><button class="button">Licht an 10 Sekunden</class></a></p>
<p><a href="/2/AN"><button class="button">Dauerlicht AN</class></a></p>
<button class="feld">
<p><U>Kuehlschrank</U></p>
-127.00
*C
</class>

<button class="feld">
<p><U>Eisfach</U></p>
-127.00
*C
</class>

<button class="feld">
<p><U>Garage</U></p>
-127.00
*C
</class>


<p><a href="/3/Reset"><img src="http://www.meineurl.de/bird.png" width=100  alt="bird"></a></p>
</body></html>


Sollen wir die Fehlermeldungen jetzt erwürfeln?
Wo erwartest Du denn einen Zeilenumbruch? Ich sehe jedenfalls kein br-Tag dafür

Gruß Tommy

du brauchst die Klasse nicht beenden! (!!!)
Sagt dir auch der Validator:

deine ganzen probleme kommen von invaliden code.

Immer noch nicht ok, aber so kommst weiter:

<button class="feld">
<p><U>Kuehlschrank</U></p>
-127.00
*C
</button>
<br>

<button class="feld">
<p><U>Eisfach</U></p>
-127.00
*C
</button>
<br>

Das Class hab ich jetzt mal weg genommen... jetzt gibts wieder was neues zu meckern.... Siehe Screenshot ganz unten.

Ich versuche mal, ob jetzt das
akzeptiert wird, wie noiasca schreibt.

Hat leider auch wieder nichts gebracht.....
Es gibt zwar scheinbar einen Zeilenumbruch, aber das nächste Element erscheint trotzdem daneben.
Ich habe mal 2x <br>eingebunden, das mittlere Feld ist etwas größer geworden und auch eine Zeile nach oben gerutscht.

Das gibts doch gar nicht......

aktueller HTML-Code

<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}
.button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.button2 {background-color: #FF0000;
<title>ESP-Garagenthermometer</title></style></head>
<body><h1><U>ESP8266 Garagenthermometer</U></h1>
Sonntag, 15:48:33
<p><a href="/1/AN"><button class="button">Licht an 10 Sekunden</a></p>
<p><a href="/2/AN"><button class="button">Dauerlicht AN</class></a></p>
<button class="feld">
<p><U>Kuehlschrank</U></p>
-127.00
*C
</class>
<br>

<br>
<button class="feld">
<p><U>Eisfach</U></p>
-127.00
*C
</class>

<button class="feld">
<p><U>Garage</U></p>
-127.00
*C
</class>


<p><a href="/3/Reset"><img src="http://www.meineurl.de/bird.png" width=100  alt="bird"></a></p>
</body></html>


Meine Anpassung im Programm (extra etwas eingerückt.....)

            // ---- Anzeige der Temperatur ------------------------

            client.println("<button class=\"feld\">");
            client.println("<p><U>Kuehlschrank</U></p>");
            client.println(sensors.getTempC(sensorCool));
            client.println("*C");
            client.println("</class>");
                  client.println("<br>");
            client.println("");                                       // sendet einen Zeilenumbruch
                  client.println("<br>");

            client.println("<button class=\"feld\">");
            client.println("<p><U>Eisfach</U></p>");
            client.println(sensors.getTempC(sensorFrost));
            client.println("*C");
            client.println("</class>");
            client.println("");                                       // sendet einen Zeilenumbruch

            client.println("<button class=\"feld\">");
            client.println("<p><U>Garage</U></p>");
            client.println(sensors.getTempC(sensorRoom));
            client.println("*C");
            client.println("</class>");
            client.println("");                                       // sendet einen Zeilenumbruch
            client.println("");                                       // sendet einen Zeilenumbruch

            client.println("<p><a href=\"/3/Reset\"><img src=\"http://www.meineurl.de/bird.png\" width=100  alt=\"bird\"></a></p>");

lies noch mal was ich in #15 gemacht habe.

edit:
gib mal das in den Validator:

<!DOCTYPE html>
<html lang='de'>
<head>
<title>blablub</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}
.button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.button2 {background-color: #FF0000;}
</style>
</head>

<body>
<h1><U>ESP8266 Garagenthermometer</U></h1>
Sonntag, 13:12:28
<p><a href="/1/AN" class="button">Licht an 10 Sekunden</a></p><br>
<p><a href="/2/AN" class="button">Dauerlicht AN</a></p><br>

<p class="feld">
  <U>Kuehlschrank</U>
  <br>
  -127.00
  *C
</p>
<br>

<p class="feld">
<U>Eisfach</U>
<br>
-127.00
*C
</p>
<br>

<p class="feld">
<U>Garage</U>
<br>
-127.00
*C
</p>
<br>

<p><a href="/3/Reset"><img src="http://www.meineurl.de/bird.png" width=100  alt="bird"></a></p>
</body>
</html>

dann schau dir das mal in einem Browser an.
wenn dich die 3 unteren Felder noch stören schau ich noch mal drüber. Aber bau deinen Code mal entsprechend um.

Letzte funktionierende Version SICHERN.

@ noiasca

Ich hab den Code nun nochmal an deinen Post #15 angepasst und aus claas auch button gemacht.
Optisch sieht es nun so aus wie in deinem Post.
Nun klappt es also auch mit dem Zeilenumbruch.
Vielen Dank schonmal für die Unterstützung an alle die hier mitwirken.
Es ist einfach schon jahre her, dass ich meine erste Website mit SelfHtml zusammen gebastelt habe. :smiley:

Ich nehme mir jetzt mal deinen Edit vor und versuche mein Programm entsprechend anzupassen. :wink:

<!DOCTYPE html>
<html lang='de'>
<head>
<title>blablub</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html {  background-color: #FA5858; font-family: Helevetia; display: inline-block; margin: 0px auto; text-align: center;}
article {margin: 0px auto;text-align: center; display: inline-block}
h1 {text-decoration: underline}
h2 {font-size: 20px; text-decoration: underline}
.button { background-color: #00FF00; border: none; color: white;border-radius: 50px; padding: 12px 20px;
text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}
.feld { background-color: #00FF00; border: none; color: blue;border-radius: 50px; padding: 5px 10px 0px 10px;
text-decoration: none; font-size: 20px; margin: 10px; cursor: pointer; height: 100px; width: 200px}
.button2 {background-color: #FF0000;}
</style>
</head>

<body>
<h1>ESP8266 Garagenthermometer</h1>
Sonntag, 13:12:28
<p><a href="/1/AN" class="button">Licht an 10 Sekunden</a></p><br>
<p><a href="/2/AN" class="button">Dauerlicht AN</a></p><br>

<article>
<div class="feld"> 
<h2>Kuehlschrank</h2>
<p>
-127.00
°C
</p>
</div> 

<div class="feld"> 
<h2>Eisfach</h2>
<p>
-127.00
°C
</p>
</div>

<div class="feld"> 
<h2>Garage</h2>
<p>
-127.00
°C
</p>
</div> 
</article> 

<p><a href="/3/Reset"><img src="http://www.meineurl.de/bird.png" width=100  alt="bird"></a></p>
</body>
</html>

verursacht aber immer noch Augenkrebs bei mir:

Z.B. deine Unterstreichungen: das sind im Web ganz schlechte Hervorhebungsmittel. Das war seit Urzeiten für Links. Du solltest Unterstreichungen echt nur für Links verwenden...