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:
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@@ -880,6 +880,56 @@ melde("=== 8. Die Analyse im Browser ===");
|
|||||||
ok(g.schluss.length > 20, `und einem Schlusssatz („${g.schluss.slice(0, 46)}…")`);
|
ok(g.schluss.length > 20, `und einem Schlusssatz („${g.schluss.slice(0, 46)}…")`);
|
||||||
ok(/\d+ Fragen aus \d+ Feldern/.test(g.zahlen),
|
ok(/\d+ Fragen aus \d+ Feldern/.test(g.zahlen),
|
||||||
`die Belegzahlen stehen darunter („${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) {
|
if (process.env.SCHIRM) {
|
||||||
await seite.locator("#analyse-block").screenshot(
|
await seite.locator("#analyse-block").screenshot(
|
||||||
{ path: "C:/Users/qciga/Documents/Obelix/DogiHompage/blick.png" });
|
{ path: "C:/Users/qciga/Documents/Obelix/DogiHompage/blick.png" });
|
||||||
|
|||||||
@@ -439,8 +439,35 @@ body.gate {
|
|||||||
vervollständigt ihn. Deshalb tritt sie zurück, statt zu warnen —
|
vervollständigt ihn. Deshalb tritt sie zurück, statt zu warnen —
|
||||||
augenschonend heißt hier ausdrücklich auch: keine Signalfarbe für
|
augenschonend heißt hier ausdrücklich auch: keine Signalfarbe für
|
||||||
etwas, das keine Warnung ist. */
|
etwas, das keine Warnung ist. */
|
||||||
|
/* ---- DER ABSTAND IST EINE REGEL, KEINE ZAHL (korrigiert 20.09.2026) --
|
||||||
|
|
||||||
|
Hier stand `margin: -18px 0 26px`. Die -18 waren gegen die 26 px
|
||||||
|
gerechnet, die `.unterzeile` darueber mitbringt -- Netto acht Pixel
|
||||||
|
Abstand, und auf der Torseite sah das richtig aus.
|
||||||
|
|
||||||
|
AUF DER BEFINDENS-SEITE UEBERLAGERTEN SICH DIE BEIDEN ABSAETZE UM
|
||||||
|
GENAU 18 PIXEL. Dort steht die Unterzeile in einer Kopfzeile, und
|
||||||
|
`start.css` setzt deren `margin-bottom` auf 0. Aus 26 minus 18 wurde
|
||||||
|
0 minus 18. Zwei fuer sich richtige Regeln, und dazwischen Text ueber
|
||||||
|
Text -- ausgerechnet im Satz „Deine Antworten liest niemand ausser
|
||||||
|
dir", also dort, wo Vertrauen entsteht.
|
||||||
|
|
||||||
|
Gefunden hat es ein Bildschirmfoto, nicht das Lesen: Beide Regeln
|
||||||
|
sehen einzeln vernuenftig aus.
|
||||||
|
|
||||||
|
DIE LEHRE IST NICHT „-18 auf -8 aendern" -- das waere dieselbe Zahl
|
||||||
|
mit einem anderen Wert und beim naechsten Zusammentreffen wieder
|
||||||
|
falsch. Stattdessen bestimmt der Absatz DAVOR seinen Abstand selbst,
|
||||||
|
und zwar nur dann, wenn der Zusatz wirklich folgt (`:has`). Damit
|
||||||
|
sind es IMMER acht Pixel, egal in welcher Umgebung.
|
||||||
|
|
||||||
|
Die Klasse steht doppelt (`.unterzeile.unterzeile`), um dieselbe
|
||||||
|
Staerke wie `.willkommen .unterzeile` zu uebertreffen -- sonst
|
||||||
|
entschiede die Ladereihenfolge, und gate.css laedt zuerst. */
|
||||||
|
.unterzeile.unterzeile:has(+ .unterzeile--zusatz) { margin-bottom: 8px; }
|
||||||
|
|
||||||
.unterzeile--zusatz {
|
.unterzeile--zusatz {
|
||||||
margin: -18px 0 26px;
|
margin: 0 0 26px;
|
||||||
padding-left: 11px;
|
padding-left: 11px;
|
||||||
border-left: 2px solid var(--rand);
|
border-left: 2px solid var(--rand);
|
||||||
max-width: 62ch;
|
max-width: 62ch;
|
||||||
|
|||||||
Reference in New Issue
Block a user