Få tak i en hendig CSS-teknikk du kan bruke til å skjule innhold og avsløre det på forespørsel.

Å begrense mengden tekst i et element er et vanlig krav til webdesign. Du vil ofte se en artikkel med et tre- eller firelinjers utdrag med en knapp som lar deg utvide hele teksten.

Du kan lage dette designet ved å bruke en kombinasjon av CSS og JavaScript. Men du kan også gjøre det ved å bruke CSS alene. Oppdag to måter å begrense teksten i en boks på, og hvordan du kan lage en dynamisk utvidelsesknapp med kun CSS.

Webkit-teknikken

Opprett en tom mappe og rediger to filer i den: index.html og style.css. Inne i index.html fil, lag et HTML-skjelett:

html>
<htmllang="no">

<hode>
<tittel>Dokumenttittel>
<linkrel="stilark"href="style.css">
hode>

<kropp>
kropp>

html>

En lenke i seksjon, til style.css fil, sikrer at enhver CSS du legger til i den filen vil gjelde for denne siden. Deretter limer du inn følgende HTML-oppmerking i tagger inn index.html:

<seksjonklasse="kort-gruppe">
<artikkelklasse="kort">
<h2>Artikkel 1
instagram viewer
h2>

<sklasse="avskjæringstekst">
Tekst på 300 ord går her
s>

<inputtype="avmerkingsboks"klasse="expand-btn">
artikkel>

<artikkelklasse="kort">
<h2>Artikkel 2h2>

<sklasse="avskjæringstekst">
Tekst på 200 ord går her
s>

<inputtype="avmerkingsboks"klasse="expand-btn">
artikkel>

<artikkelklasse="kort">
<h2>Artikkel 1h2>

<sklasse="avskjæringstekst">
100-ords tekst går her
s>

<inputtype="avmerkingsboks"klasse="expand-btn">
artikkel>
seksjon>

Strukturen til denne HTML-en er enkel, men den brukes fortsatt semantisk markering for tilgjengelighet. Et seksjonselement inneholder tre artikkelelementer. Hver artikkel består av en overskrift, et avsnitt og et inndataelement. Du bruker CSS til å style hver artikkeldel til et kort.

I mellomtiden vil siden din se slik ut:

Fra bildet ovenfor kan du se forskjellige lengder på teksten i hvert avsnitt. 300 ord i den første, 200 ord i den andre, og 100 i den tredje.

Det neste trinnet er å begynne å style siden ved å legge til CSS i style.css fil. Start med å tilbakestille rammen på dokumentet og gi brødteksten en hvit bakgrunnsfarge:

*, *::før, *::etter {
boksstørrelse: kantboks;
}

kropp {
bakgrunn: #f3f3f3;
flyte: skjult;
}

Deretter gjør du elementet med kortgruppeklassen til en rutenettbeholder med tre kolonner. Hver artikkeldel har en kolonne:

.card-group {
vise: Nett;
rutenett-mal-kolonner: gjenta(3, 1fr);
mellomrom: .5rem;
align-elementer: flex-start;
}

Style hver artikkeldel som et kort med hvit bakgrunnsfarge og en svart, litt rund kant:

.kort {
bakgrunn: hvit;
polstring: 1rem;
grense: 1pxfastsvart;
grense-radius: .25em;
}

Til slutt, legg til noen marger:

h2, s {
margin: 0;
}

h2 {
marg-bunn: 1rem;
}

Lagre filen og sjekk nettleseren din. Siden skal se ut på siden vist på bildet nedenfor:

Det neste trinnet er å kutte antall linjer for hver tekst til 3. Her er CSS for det:

.cuttoff-tekst {
--max-linjer: 3;
flyte: skjult;

vise: -webkit-boks;
-webkit-box-orient: vertikal;
-webkit-line-klemme: var(--max-linjer);
}

Start med å stille inn en CSS-variabel, max-linjer, til 3 og skjuler overfylt innhold. Still deretter skjermen til -webkit-boks og klem ledningen til 3.

Følgende bilde viser resultatet. Hvert kort viser en ellipse på den tredje tekstlinjen:

Denne teknikken kan være ganske vanskelig å få til. Hvis du skulle utelate noen eiendom, vil alt gå i stykker. En annen ulempe er at du ikke kan bruke en visningsegenskap annet enn --webkit-boks. Det kan for eksempel være lurt bruk Grid eller Flexbox. Av disse grunner er følgende teknikk bedre.

En mer fleksibel tilnærming til å begrense antall linjer i tekst

Denne teknikken lar deg gjøre det samme som webkit-tilnærmingen, med de samme resultatene. Men den store forskjellen er at du har tonnevis av fleksibilitet fordi du angir høyden selv. I tillegg kan du bruke hvilken som helst skjermeiendom eller hvilket stylingsalternativ du foretrekker.

For å komme i gang, bytt ut CSS-blokken for .cutoff-tekst med dette:

.cuttoff-tekst {
--max-linjer: 5;
--linjehøyde: 1.4;
høyde: beregnet(var(--max-linjer) * 1em * var(--linjehøyde));
linjehøyde: var(--linjehøyde);
posisjon: slektning;
}

Å angi en linjehøyde er viktig fordi du må ta hensyn til den når du bestemmer høyden din. For å få høyden multipliserer du linjehøyden med skriftstørrelsen din og antall linjer.

Vi legger til stilling: pårørende egenskapen fordi vi trenger den for å legge til fade-effekten. Legg til følgende CSS for å fullføre effekten:

.cuttoff-tekst::før {
innhold: "";
posisjon: absolutt;
høyde: beregnet(2em * var(--linjehøyde));
bredde: 100%;
bunn: 0;
peker-hendelser: ingen;
bakgrunn: lineær gradient(tilbunn, gjennomsiktig, hvit);
}

CSS-en ovenfor gjør den siste tekstlinjen i hvert kort uskarp. Du kan oppnå en falmingseffekt ved å bruke bakgrunn egenskap og en gradient. Du må stille inn peker-hendelser til ingen for å sikre at elementet ikke er valgbart.

Her er resultatet:

Denne teknikken oppnådde samme resultat som den forrige (pluss uskarphet på slutten). Men du får mer fleksibilitet til å bruke andre typer oppsett og design.

Legge til en dynamisk utvidelses- og skjulknapp

Å legge til en utvide/skjul knapp gjør kortene mer realistiske og interaktive. Med dette mønsteret utvider du innholdet ved å klikke på Utvide knappen, hvoretter teksten endres til Kollapse. Så knappens tekst veksler mellom "Utvid" og "Skjul" når du klikker på den. Videre vises og skjules resten av innholdet i hver respektive tilstand.

Du har allerede definert en input element i HTML-en din. Dette elementet vil fungere som din knapp. For å style denne inngangen til en knapp, ta med følgende CSS i stilarket ditt:

.expand-btn {
utseende: ingen;
grense: 1pxfastsvart;
polstring: .5em;
grense-radius: .25em;
markøren: pekeren;
marg-topp: 1rem;
}

Når du holder musepekeren på knappen, vil du endre bakgrunnsfargen:

.expand-btn:sveve {
bakgrunnsfarge: #ccc;
}

Nå CSS for å bytte tekst når inndata er sjekket:

.expand-btn::før {
innhold: "Utvide"
}

.expand-btn:krysset av::før {
innhold: "Kollapse"
}

Når du nå klikker på knappen/inndata, går teksten fra Utvide til Kollapse. Men selve innholdet vil ikke utvides ennå. For å få det til å gjøre det når du klikker på knappen, legg til følgende CSS:

.cuttoff-tekst:har(+.expand-btn:krysset av) {
høyde: auto;
}

Dette eksemplet bruker has() CSS-velger for å målrette elementet. Med denne koden sier du at hvis avskjæringstekstområdet har en avkrysset utvidelsesknapp, skal høyden på kortet være auto (som utvider den).

Her er resultatet:

Andre CSS-tips og triks for å lære

Denne artikkelen demonstrerte to forskjellige metoder for å begrense antall linjer i en boks ved hjelp av CSS. Vi har til og med lagt til en knapp for å utvide/skjule innholdet uten å skrive en eneste linje med JavaScript.

Men det er tonnevis av andre tips og triks i CSS. Disse tipsene gir deg en kreativ måte å oppnå ønsket layout uten å skade ytelsen, lesbarheten eller tilgjengeligheten.