Am Handy lag Text auf Text -- im Satz ueber Vertraulichkeit

Auf der Befindens-Seite ueberlagerten sich bei 430 px zwei Absaetze
um 18 Pixel. Betroffen war ausgerechnet "Deine Antworten liest
niemand ausser dir" -- also der Satz, in dem das Vertrauen entsteht,
das die ganze Seite braucht.

Ursache war eine feste Zahl: -18px Abstand, gerechnet gegen die
26 px, die das Element darueber mitbringt. In einer Kopfzeile setzt
start.css dieses margin-bottom aber auf 0. Aus 26 minus 18 wurde
0 minus 18. Zwei fuer sich richtige Regeln, und dazwischen ein
Schaden, den keine von beiden verursacht.

Die Lehre ist nicht "-18 auf -8 aendern" -- das waere dieselbe Zahl
mit anderem Wert und beim naechsten Zusammentreffen wieder falsch.
Jetzt bestimmt der Absatz davor seinen Abstand selbst, und nur dann,
wenn der Zusatz wirklich folgt (:has). Acht Pixel, in jeder Umgebung.

Gefunden hat es ein Bildschirmfoto, nicht das Lesen: Beide Regeln
sehen einzeln vernuenftig aus. Die Messung steht jetzt fest in
pruef-befinden.mjs (113/0), mit Gegenprobe: Mit dem alten Wert wird
sie rot, ohne ihn gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-20 19:48:46 +02:00
co-authored by Claude Opus 5
parent 2719bd9b88
commit 9c96612321
3 changed files with 78 additions and 1 deletions
+50
View File
@@ -880,6 +880,56 @@ melde("=== 8. Die Analyse im Browser ===");
ok(g.schluss.length > 20, `und einem Schlusssatz („${g.schluss.slice(0, 46)}…")`);
ok(/\d+ Fragen aus \d+ Feldern/.test(g.zahlen),
`die Belegzahlen stehen darunter („${g.zahlen}")`);
/* ---- KEIN TEXT AUF TEXT, AUCH AM HANDY (20.09.2026) --------------
Gefunden hat das ein Bildschirmfoto bei 430 px: Die Unterzeile
„Deine Antworten liest niemand ausser dir" lag 18 px UNTER dem
Absatz darunter -- Buchstaben in Buchstaben, ausgerechnet in dem
Satz, in dem Vertrauen entsteht.
Ursache war eine feste Zahl: `-18px` Abstand, gerechnet gegen die
26 px, die das Element darueber mitbrachte. In der Kopfzeile sind
es aber 0 px. Zwei fuer sich richtige Regeln, und dazwischen ein
Schaden, den keine von beiden verursacht.
Warum das hier stehen bleibt: Es ist kein Fehler, den man beim
Lesen sieht -- beide Regeln wirken einzeln vernuenftig. Nur eine
Messung findet ihn wieder, wenn jemand an einem der beiden
Abstaende dreht. */
const enge = await seite.setViewportSize({ width: 430, height: 900 })
.then(() => seite.waitForTimeout(500))
.then(() => seite.evaluate(() => {
const kandidaten = [...document.querySelectorAll("body *")].filter((e) => {
const r = e.getBoundingClientRect();
return r.width > 20 && r.height > 6
&& /P|H1|H2|H3|LI/.test(e.tagName)
&& e.textContent.trim().length > 12;
});
const treffer = [];
for (let i = 0; i < kandidaten.length; i++) {
for (let j = i + 1; j < kandidaten.length; j++) {
const x = kandidaten[i], y = kandidaten[j];
if (x.contains(y) || y.contains(x)) continue;
const a2 = x.getBoundingClientRect(), b2 = y.getBoundingClientRect();
const ux = Math.min(a2.right, b2.right) - Math.max(a2.left, b2.left);
const uy = Math.min(a2.bottom, b2.bottom) - Math.max(a2.top, b2.top);
if (ux > 8 && uy > 6) {
treffer.push(`${x.className.split(" ")[0]} über ${y.className.split(" ")[0]} (${Math.round(uy)} px)`);
}
}
}
return { treffer, geprueft: kandidaten.length };
}));
/* DIE ZAHL GEHOERT IN DIE BEDINGUNG. Faende der Wahlausdruck nichts,
waere `treffer` leer und die Pruefung gruen, ohne etwas angesehen
zu haben -- genau der Fehler vom 01.09. mit `every()` auf einer
leeren Liste. */
ok(enge.geprueft > 20 && enge.treffer.length === 0,
enge.treffer.length
? `Text liegt auf Text: ${enge.treffer.slice(0, 2).join("; ")}`
: `bei 430 px liegt kein Text auf Text (${enge.geprueft} Absätze verglichen)`);
await seite.setViewportSize({ width: 1280, height: 1000 });
if (process.env.SCHIRM) {
await seite.locator("#analyse-block").screenshot(
{ path: "C:/Users/qciga/Documents/Obelix/DogiHompage/blick.png" });