Dansk hosting fra Aalborg
100% CO₂-neutral hosting
24/7/365 dansk support
support@hostious.io
● Hostious viden · artikel

Layoutet går i stykker efter Remove Unused CSS i FlyingPress

Skrevet af , stifter af Hostious · Udgivet 28. august 2026 · Opdateret 30. august 2026
Layoutet går i stykker efter Remove Unused CSS i FlyingPress

Kort svar: Bekræft først på staging, at layoutet bliver korrekt, når Remove Unused CSS alene deaktiveres. Find derefter den ødelagte komponenttilstand og sammenlign dens nødvendige CSS-selectors med den genererede inline CSS. FlyingPress' safelist bruger selectors, ikke stylesheet-filnavne. Tilføj det mindst mulige selector-mønster, regenerér den berørte URL, og test mobilmenu, hover, fokus, modal, formularfejl og andre skjulte tilstande.

Remove Unused CSS kan reducere renderblokerende CSS ved at udlede de regler, siden bruger, placere den nødvendige CSS inline og udskyde resten. Problemet opstår, når en regel kun bliver relevant efter en handling eller under en tilstand, som optimizerens rendering ikke aktiverer: mobilmenuen åbnes, en valideringsfejl vises, eller en modal får en dynamisk klasse.

Løsningen er ikke automatisk at undtage hele temaets stylesheet. Først skal du bevise, at RUCSS er årsagen, derefter finde den mindste selector, der mangler.

Praktisk grundlag: Trinene er gennemgået den 28. august 2026 mod WordPress 7.1, PHP 8.4.23, FlyingPress 5.6.5 og Chrome 151. Et ødelagt layout skal reproduceres på staging, så den konkrete CSS-undtagelse kan afprøves uden at ramme besøgende. Gem før/efter, genereret CSS, selector, køstatus og testede komponenttilstande som dokumentation for din egen sag.

Før du ændrer noget

Gem:

  • screenshot eller video af den præcise fejl;
  • URL, viewport og brugerrolle;
  • cachetilstand og tidspunkt;
  • FlyingPress-indstillinger eller eksport;
  • browserens konsol og Network;
  • HTML-kilde fra den fejlende side;
  • component state: lukket/åben, hover, fokus, fejl eller succes.

Tag en stagingbackup og sørg for, at andre plugins ikke samtidig kombinerer, fjerner eller udskyder CSS. To CSS-optimeringer gør det svært at vide, hvilken generator der har fjernet reglen.

FlyingPress viser Remove Unused CSS blandt CSS- og JavaScript-indstillingerne
FlyingPress 5.6.5 aflæst 28. august 2026. UI-baseline; billedet viser en aktiv indstilling, ikke et ødelagt layout eller en dokumenteret rettelse.

Diagnosematrix: mangler reglen, eller bliver den aldrig aktiveret?

Signal i samme komponenttilstandSandsynlig årsagNæste sikre kontrol
Layoutet er korrekt med RUCSS fra og forkert med RUCSS tilRUCSS er en dokumenteret del af årsagenRegenerér samme staging-URL i begge tilstande og sammenlign den konkrete selector, ikke hele siden
DOM-klassen er korrekt, men den nødvendige regel mangler i computed stylesDen dynamiske selector blev ikke bevaret i den genererede CSSFind reglen i den uoptimerede kilde og søg efter samme stabile selector i flying-press-css
Selectoren findes, men er overstregetCascade, rækkefølge eller specificitet overskriver denIdentificér den vindende regel og dens kilde; tilføj ikke en bredere safelist som første svar
Den forventede klasse eller aria-tilstand kommer aldrig på elementetJavaScript initialiseres ikke eller bliver forsinketKontrollér første konsolfejl og eventhandler, og test Delay JavaScript alene på staging
Layoutet er korrekt straks efter purge, men bryder igen efter optimeringDu ser kortvarigt den uoptimerede version, før ny CSS er klarVent på færdig kø, åbn en ny privat session og verificér den genererede kilde
Kun hover, åben, fejl- eller mobiltilstanden mangler stylingOptimeringsrenderingen så ikke den dynamiske tilstand eller breakpointetFind én stabil komponentselector, der dækker den manglende state, og safelist kun den
Indlogget visning virker, mens anonym visning bryderHTML, cache eller optimeret output er forskelligt mellem sessionerneSammenlign View Source og cachetilstand for begge; ret den anonyme variant, som brugerne faktisk får

Trin 1: Bevis at Remove Unused CSS er årsagen

På staging deaktiverer du kun Remove Unused CSS, rydder/regenererer den berørte URL og tester samme session, viewport og handling igen.

  • Hvis layoutet bliver korrekt, er RUCSS en dokumenteret del af årsagen.
  • Hvis fejlen fortsætter, skal du se på cache, minificering, asynkron CSS, JavaScript eller selve komponenten.
  • Hvis fejlen kun forsvinder som indlogget bruger, kan den anonyme optimerede HTML være anderledes.

Aktivér RUCSS igen efter kontrol, så næste trin arbejder på det rigtige scenarie. Lav ikke en fuld site-purge, hvis én test-URL kan isoleres.

Trin 2: Find den præcise tilstand, der mangler styling

Beskriv fejlen konkret:

  • “Mobilmenuens panel har korrekt struktur, men mangler display, position og baggrund efter klik.”
  • “Formularens fejlbesked vises, men uden rød kant og afstand.”
  • “Accordionens indhold åbnes, men den dynamiske is-open-tilstand mangler højde/ikonrotation.”

Test komponenten systematisk:

  1. standardtilstand;
  2. hover og focus-visible;
  3. aktiv/åben tilstand;
  4. loading, fejl og succes;
  5. mobil, tablet og desktop;
  6. anonym og relevant indlogget bruger;
  7. samtykke accepteret og afvist, hvis komponenten afhænger af det.

Det gør det muligt at safeliste én komponentfamilie i stedet for et helt stylesheet.

Mikroeksempel: menuen er ikke “bare ustylet”

Antag, at hamburgerknappen ændrer aria-expanded til true, og panelklassen kommer på som forventet. I den uoptimerede stagingvisning giver reglen .site-menu.is-open panelet position, baggrund og synlighed. I den optimerede kilde mangler den stabile selector. Det er en egnet kandidat til en smal safelist.

Hvis aria-expanded derimod aldrig ændres, skal du stoppe CSS-sporet. Her er problemet sandsynligvis eventinitialisering eller JavaScript-rækkefølge. En safelist kan få panelet til at se anderledes ud, men den kan ikke genskabe en manglende klikhandler. Dette lille beslutningspunkt forhindrer mange brede undtagelser.

Efter ændringen tester du både lukket og åben menu lige under og over det mobile breakpoint. Før/efter-beviset skal vise, at den samme selector nu er med, at køen er færdig, og at tastaturfokus samt Escape stadig virker.

Trin 3: Find den manglende selector

Brug DevTools på en korrekt uoptimeret stagingvisning:

  1. aktiver den fejlende tilstand;
  2. vælg elementet i Elements-panelet;
  3. find den CSS-regel, der giver den manglende visning;
  4. noter selector, fil og property;
  5. gentag på den RUCSS-optimerede visning;
  6. kontroller om reglen mangler, overskrives eller aldrig matcher.

En selector kan være dynamisk, fx .menu.is-open, [aria-expanded="true"] + .panel eller en genereret klasse. Safelist en stabil del, som tilhører komponenten. En tilfældig hash-klasse, der ændres ved hver build, er en dårlig langsigtet nøgle.

Trin 4: Kontrollér den genererede CSS

FlyingPress placerer den anvendte CSS i et inline style-element med id flying-press-css, mens resterende CSS kan være udskudt. Åbn View Source – ikke kun den levende DOM efter JavaScript – og søg efter style-elementet og den manglende selector.

Kontrollér tre muligheder:

  • selectoren er ikke med i den inline CSS;
  • selectoren er med, men en senere regel overskriver den;
  • selectoren er korrekt, men JavaScript sætter aldrig den forventede klasse/attribut.

Kun den første peger direkte på safelist. Den tredje hører til JavaScript-fejlfinding og kan skyldes Delay JavaScript.

Trin 5: Tilføj den mindst mulige safelist

FlyingPress' safelist accepterer CSS-selectors. Et filnavn som menu.css er ikke den dokumenterede inputtype.

Vælg den smalleste stabile selector, der dækker komponentens nødvendige tilstande. Eksempelprincippet er:

  • bedre: en stabil komponentklasse eller en tilstand under den;
  • dårligere: en meget generel .active, som kan matche hele sitet;
  • dårligst: hele temaets eller builderens stylesheet på mistanke.

Tilføj ét mønster, gem og regenerér. Hvis du tilføjer fem på én gang, kan du ikke vide, hvilken der var nødvendig.

Trin 6: Vent på ny optimering

En safelistændring kræver, at den genererede CSS bliver behandlet igen. Efter gemning:

  1. ryd/regenerér den berørte URL;
  2. følg FlyingPress-køen;
  3. vent til URL'en er færdig, før du vurderer resultatet;
  4. hent siden i en ny privat session;
  5. bekræft flying-press-css i kildekoden;
  6. kontroller at den safelistede selector findes og bruges.

Et midlertidigt korrekt layout umiddelbart efter purge kan være den uoptimerede side. Vent på den færdige optimerede version, ellers godkender du en falsk succes.

Hvis køen ikke bevæger sig, så brug preload-fejlfindingsguiden frem for at gentage purges.

Trin 7: Eftertest hele komponenten

Test mere end det screenshot, der oprindeligt brød:

Navigation

  • hamburger åbner og lukker;
  • undermenuer, Escape og klik udenfor;
  • tastaturfokus og focus-visible;
  • sticky-tilstand efter scroll;
  • orienteringsskift og alle breakpoints.

Formular

  • tom indsendelse og feltfejl;
  • focus/invalid/valid-states;
  • loadingindikator;
  • serverfejl og succesbesked;
  • tilgængelig fejltekst og fokusflytning.

Modal, tabs og accordion

  • åben/lukket og første/sidste panel;
  • deep link eller URL-hash;
  • baggrundsoverlay og scroll lock;
  • indhold indlæst efter åbning;
  • flere instanser på samme side.

Kontrollér samtidig CLS. En genoprettet style kan ændre dimensioner og skabe et nyt layoutskift.

Når safelist ikke er nok

Hvis klassen er tilfældig for hver sidevisning, eller JavaScript afhænger af hele stylesheetets tilstedeværelse, skal komponentens ejer undersøges. Mulighederne er:

  • brug en stabil custom class i builderens native felt;
  • ret komponenten, så tilstanden har forudsigelige selectors;
  • ekskludér kun den berørte URL eller komponent, hvis FlyingPress understøtter det;
  • skift CSS-strategi på den skabelon;
  • behold RUCSS deaktiveret, hvis layoutet ikke kan gøres stabilt uden en bred og skrøbelig undtagelse.

Ydelse er ikke vigtigere end korrekt funktion. En målbar, mindre gevinst kan være den rigtige løsning, hvis den aggressive indstilling kræver en ubærlig safelist.

Verifikation

Rettelsen er dokumenteret, når:

  • RUCSS er aktiv på den testede anonyme side;
  • den genererede CSS er færdig og synlig i kildekoden;
  • den nødvendige selector er med;
  • alle relevante tilstande og breakpoints virker;
  • ingen ny konsolfejl eller manglende asset er opstået;
  • LCP og CLS er sammenlignet mod baseline;
  • safelisten indeholder kun det nødvendige mønster.

Mål ikke kun, om skærmbilledet ligner før. Sammenlign også mængden af genereret CSS, LCP-elementets rendering og eventuelle layoutskift. Hvis en meget bred selector gør layoutet korrekt, men trækker en stor komponentfamilie ind på alle sider, skal den indsnævres. En robust løsning kan forklares med én komponent, én manglende state og én stabil selector.

Rollback og eskalering

Hvis safelisten ikke hjælper, fjern præcis den nye selector, regenerér URL'en og bekræft starttilstanden. Hvis live er påvirket, er den sikreste midlertidige rollback at deaktivere RUCSS eller den berørte optimering og regenerere cache – ikke at tilføje stadig bredere selectors uden test.

Kontakt komponent-/builderudvikleren med original CSS-regel, state-ændring og en minimal stagingreproduktion. Kontakt FlyingPress-support med version, URL, genereret style-id, selector og køstatus. Hostious WordPress-support kan hjælpe med en afgrænset safelist og fuld eftertest.

Sådan dokumenterer du din egen RUCSS-sag

  1. Gem samme komponent med RUCSS til og fra på staging ved identisk viewport.
  2. Markér den nødvendige regel i DevTools Styles i den uoptimerede visning.
  3. Vis flying-press-css i View Source med den manglende eller tilføjede selector.
  4. Gem FlyingPress-safelisten med kun den anonymiserede, relevante selector.
  5. Dokumentér køstatus før og efter regenerering, så du ikke sammenligner med midlertidig CSS.
  6. Vis mobilmenu, formular eller modal i alle relevante states efter rettelsen.

Gem før/efter-HTML, genereret CSS-hash eller uddrag, selector, beregnede styles, køtidspunkt, screenshots og performance trace. Et syntetisk stagingeksempel er ikke CrUX-, Lighthouse- eller produktionsbevis. Del ikke licensnøgle, cookies eller private stier.

Ofte stillede spørgsmål om Remove Unused CSS

Hvorfor rammer Remove Unused CSS netop sliders, popups og menuer?

Fordi deres CSS først bruges ved interaktion – generatoren ser den aldrig ‘i brug’ og fjerner den. Tilstande som .open, .active og hover er klassikerne, der skal på safelisten.

Hvordan safelister jeg rigtigt i FlyingPress?

Minimalt: tilføj de konkrete selectors eller filstier for den ødelagte komponent – ikke hele stylesheets. Regenerér derefter CSS’en og purge, så testen kører mod de nye filer.

Kan jeg beholde funktionen uden at safeliste alt manuelt?

Ja – brug ‘load unused CSS on user interaction’ som mellemvej: al CSS indlæses ved første interaktion. Det koster lidt af gevinsten, men fjerner næsten alle layoutbrud.

Læs også