Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/css/style.css

    r77019fa r520c993  
    25442544    scroll-margin-top: 2rem;
    25452545}
    2546 /* HET LAATSTE BERICHT SNAPT OOK (Robin, 21-8). Dat kon eerst niet: zijn
    2547    bovenkant was onbereikbaar -- er zat te weinig pagina onder om hem naar de
    2548    bovenrand te brengen (gemeten: snappunt 2548, maxScroll 2356), en de browser
    2549    viel dan terug op de dichtstbijzijnde bereikbare positie: de bodem. Het
    2550    snappunt weghalen was de vorige oplossing; dit is de echte.
    2551    Een volle schermhoogte op het LAATSTE bericht maakt die bovenkant precies
    2552    bereikbaar. Korter dan het scherm: het bericht wordt even hoog en het snappunt
    2553    valt exact op maxScroll. Langer dan het scherm: dan was het al haalbaar en
    2554    doet min-height niets.
    2555    100lvh en niet 100svh: op een telefoon met een verdwijnende adresbalk is het
    2556    zichtbare scherm soms de GROTE viewport, en dan komt svh net tekort.
    2557    Zichtbaar kost dit niets: berichten hebben geen kader, alleen een scheidings-
    2558    lijn erboven, dus het laatste bericht krijgt hooguit witruimte eronder. */
    2559 .feed-reader .read-post:last-child { min-height: 100lvh; }
     2546/* Het laatste bericht krijgt geen snappunt: zijn bovenkant is niet te bereiken
     2547   (er zit te weinig pagina onder), en de browser snapt dan naar de dichtstbij-
     2548   zijnde bereikbare positie -- de bodem. Gemeten: snappunt 2548, maxScroll 2356. */
     2549.feed-reader .read-post:last-child .read-anker { scroll-snap-align: none; }
    25602550
    25612551/* ELK BERICHT EEN EIGEN SCHERM, als de site dat wil (Instellingen -> Weergave).
     
    25662556   -- want welke van de twee prettiger leest hangt af van wat je schrijft. */
    25672557body[data-reader-pages="1"] .feed-reader .read-post { min-height: 100svh; }
    2568 /* OP MOBIEL ALTIJD, wat de instelling ook zegt (Robin, 20-8). Op een telefoon is
    2569    een bericht per scherm de vorm die werkt -- je veegt van bericht naar bericht.
    2570    Op desktop blijft het een keuze, want daar lees je in een kolom naast veel
    2571    witruimte en is een doorlopende stroom vaak prettiger. */
    2572 @media (hover: none) and (pointer: coarse) {
    2573     /* Op mobiel draait Lezen in paginamodus (body.is-paged), en die zet hieronder
    2574        een vaste hoogte. Deze regel is de terugval voor het moment vóór de module
    2575        geladen is, zodat de berichten niet eerst als losse stroom in beeld
    2576        springen. */
    2577     .feed-reader .read-post { min-height: 100svh; }
    2578 /* Geen native snap op mobiel: dat doet lenis/snap, met een instelbare vangzone
    2579        en duur. Twee snapsystemen op dezelfde scroller vechten. */
    2580     html:has(body.on-home[data-feed-view="reader"]) { scroll-snap-type: none; }
    2581 }
    2582 
    2583 /* -------- PAGINAMODUS --------
    2584    Elk bericht is een paneel van precies een scherm dat ZELF scrollt; tussen
    2585    berichten ga je met knoppen. Daarmee doet het scrollgevoel er niet meer toe:
    2586    geen momentum om na te bouwen en geen snap die vangt.
    2587    De stroom zelf vangt geen vingers meer -- dat regelt lenis.stop() in
    2588    mod/read.js -- en data-lenis-prevent op het paneel houdt de scroll BINNEN een
    2589    bericht ongemoeid (die controle staat in Lenis vóór de gestopt-controle).
    2590    Geldt waar een bericht een eigen scherm heeft: op mobiel altijd, op desktop
    2591    als de site dat zo instelt. */
    2592 body.is-paged .feed-reader .read-post {
    2593     height: 100svh;
    2594     min-height: 0;
    2595     overflow-y: auto;
    2596     overscroll-behavior: contain;   /* raakt het einde, dan niet doorschuiven */
    2597     scroll-snap-align: none;
    2598     /* Ruimte voor de twee balken, zodat er nooit tekst onder een knop verdwijnt.
    2599        Het verloop laat een regel wel zacht wegvagen, maar wat je moet KUNNEN
    2600        lezen hoort er niet achter te komen -- vandaar padding en niet alleen die
    2601        fade. --read-balk staat hieronder bij .read-nav, zodat de twee niet uit
    2602        elkaar kunnen lopen. */
    2603     padding-top: calc(var(--read-balk) + .5rem);
    2604     padding-bottom: calc(var(--read-balk) + .5rem);
    2605     /* BOVENAAN beginnen, niet gecentreerd. Ik had de inhoud een ronde lang
    2606        verticaal gecentreerd om het gat onder een kort bericht te verdelen, maar
    2607        dan hangt zo'n bericht halverwege het scherm en begint niet elk paneel op
    2608        dezelfde plek -- dat leest onrustig. Robin ving het (20-8). Elk bericht
    2609        begint nu bovenaan, en de ruimte die overblijft valt onderaan. */
    2610 }
    2611 body.is-paged .feed-reader .read-anker { scroll-snap-align: none; }
    2612 
    2613 /* DE DYNAMIC ISLAND, en met opzet alleen op iOS (Robin, 20-8: "op android is het
    2614    een ander verhaal").
    2615    In paginamodus vult een bericht precies het scherm, dus de eerste regel komt
    2616    bovenaan -- en op een iPhone ligt daar de island of de notch overheen.
    2617    env(safe-area-inset-top) geeft daar de vrije ruimte; viewport-fit=cover staat
    2618    al in de viewport-meta, dus die waarde is echt.
    2619    De @supports-regel is de iOS-Safari-toets: -webkit-touch-callout bestaat alleen
    2620    daar. Op Android is env() vaak 0 of betekent het iets anders (camera-uitsparing,
    2621    statusbalk die al meegerekend is), en dan zou dit een gat bovenin maken dat er
    2622    niet hoort. Vandaar afgeschermd in plaats van env() overal toepassen.
    2623    De hoogte krimpt mee, anders duwt de padding het paneel groter dan het scherm
    2624    en krijg je alsnog scroll tussen de berichten. */
    2625 @supports (-webkit-touch-callout: none) {
    2626     body.is-paged .feed-reader .read-post {
    2627         padding-top: calc(var(--read-balk) + .5rem + env(safe-area-inset-top, 0px));
    2628         height: calc(100svh - env(safe-area-inset-top, 0px));
    2629     }
    2630     /* De bovenbalk houdt zijn knop al vrij van de island via padding-top
    2631        hierboven; hier hoeft niets extra's meer. */
    2632 }
    2633 
    2634 /* De knop onderaan een bericht: naar het volgende. */
    2635 
    2636 
    2637 /* Omhoog en omlaag: twee balken, boven en onder, die BLIJVEN staan terwijl je in
    2638    een bericht scrolt (Robin, 20-8). Het verloop van paginakleur naar doorzichtig
    2639    laat de tekst eronderdoor wegvagen -- zonder dat zou een regel halverwege hard
    2640    achter de knop verdwijnen en oogt het als een afgeknipte pagina.
    2641    De BALK vangt geen aanrakingen (pointer-events: none), alleen de knop zelf --
    2642    anders zou een strook van 5rem boven- en onderaan je scroll opeten. */
    2643 /* TWEE BALKEN over de volle breedte, boven en onder. Eerder waren dit losse
    2644    cirkels (te rommelig naast de tabbalk en de speler) en daarna onzichtbare
    2645    tikzones -- maar die werkten niet, omdat de onderste strook onder de
    2646    mini-speler en de tabbalk ligt en die de tik opvangen. Een balk met een eigen
    2647    z-index kan daar wel overheen.
    2648    Slank gehouden: ze eten hooguit 2.6rem aan elke kant, en het paneel houdt daar
    2649    al ruimte voor vrij. */
    2650 :root { --read-balk: 2.6rem; }
    2651 .read-bar {
    2652     position: fixed; left: 0; right: 0; z-index: 1060;   /* boven tabbalk (1050) */
    2653     display: flex; align-items: center;
    2654     /* Pijlen LINKS in de balk, niet gecentreerd (Robin, 20-8). */
    2655     justify-content: flex-start;
    2656     padding-left: max(1.1rem, env(safe-area-inset-left, 0px));
    2657     box-sizing: border-box;
    2658     height: var(--read-balk);
    2659     border: 0;
    2660     border-top: 1px solid transparent;
    2661     background: color-mix(in srgb, var(--paper) 90%, var(--ink));
    2662     backdrop-filter: blur(14px) saturate(140%);
    2663     -webkit-backdrop-filter: blur(14px) saturate(140%);
    2664     color: var(--ink);
    2665     cursor: pointer;
    2666     transition: opacity .15s ease;
    2667 }
    2668 .read-bar--top {
    2669     top: 0;
    2670     height: calc(var(--read-balk) + env(safe-area-inset-top, 0px));
    2671     padding-top: env(safe-area-inset-top, 0px);
    2672     border-bottom: 1px solid color-mix(in srgb, var(--ink) 14%, transparent);
    2673 }
    2674 .read-bar--bottom {
    2675     /* De waarde komt uit mod/read.js: die meet hoe hoog de tabbalk en de
    2676        mini-speler werkelijk staan. Geraden rem-waarden lieten hem zweven -- een
    2677        kier boven de speler, of er half achter. Dit is de terugval voor de eerste
    2678        frame en voor als de module niet laadt. */
    2679     bottom: 0;
    2680     border-top: 1px solid color-mix(in srgb, var(--ink) 14%, transparent);
    2681 }
    2682 .read-bar:active { background: color-mix(in srgb, var(--paper) 78%, var(--ink)); }
    2683 .read-bar[hidden], body:not(.is-paged) .read-bar { display: none; }
    26842558
    26852559/* Een lijn tussen twee berichten: zonder grens is een stroom een lange brij. */
Note: See TracChangeset for help on using the changeset viewer.