Postoji mnogo različitih načina stiliziranja podcrtavanja. Možda se sjećate članka Marsina Vicharija “Crafting link underlines” na Mediumu. Srednji programeri ne pokušavaju napraviti nešto ludo, oni samo žele stvoriti lijepu liniju ispod teksta.
Ovo je najjednostavnije podcrtavanje, ali je prave veličine i ne preklapa zaglavlja pisma. I definitivno je bolji od zadanog podcrtavanja u većini preglednika. Medium se borio da postigne svoj stil na webu. Dvije godine kasnije, još uvijek nam je teško napraviti lijepu crtu.
Ciljevi
Što nije u redu s uobičajenim ukrasom teksta: podcrtano? U idealnom scenariju, podcrtavanje bi trebalo učiniti sljedeće:
- biti postavljen ispod osnovne linije;
- preskoči oblačiće;
- promijeniti boju, debljinu i stil linije;
- rad s višelinijskim tekstom;
- raditi na bilo kojoj pozadini.
Mislim da su to sve razumni zahtjevi, ali koliko ja znam ne postoji intuitivan način da se to postigne pomoću CSS-a.
Prilazi
Koji su to različiti načini na koje možemo implementirati podcrtavanje na webu?
Evo onih koje razmatram:
- ukras teksta ;
- granica dna ;
- kutija-sjena ;
- pozadinska slika ;
- SVG filteri;
- Underline.js (platno);
- tekst-ukras-* .
Pogledajmo ove metode jednu po jednu i porazgovarajmo o prednostima i manama svake od njih.
tekst-ukras
text-decoration je najočitiji način za podcrtavanje teksta. Primijenite jedno svojstvo i to je dovoljno. Na malim veličinama fonta ovo bi moglo izgledati sasvim pristojno, ali povećajte veličinu fonta i podcrtavanje počinje izgledati nespretno.
Najveći problem s ukrašavanjem teksta je nedostatak postavki. Ograničeni ste bojom i veličinom fonta teksta i ne postoji način da to promijenite u različitim preglednicima. O ovome ćemo više razgovarati kasnije.
- jednostavan za korištenje;
- postavljen ispod osnovne linije;
- preskače descendere prema zadanim postavkama u Safariju i iOS-u;
- podcrtava višeredni tekst;
- radi na bilo kojoj pozadini.
- ne preskače descendere u svim ostalim preglednicima;
- ne dopušta promjenu boje, debljine ili stila linije.
granica-dno
border-bottom postiže dobru ravnotežu između jednostavnosti i prilagodljivosti. Ovaj pristup koristi dobro staro CSS svojstvo za obrub, što znači da možete jednostavno promijeniti boju, debljinu i stil.
Ovako izgleda obrub-dno na umetnutim elementima.
Glavni nedostatak je udaljenost podvlake od teksta, ona je u potpunosti ispod oblačića. To možete popraviti postavljanjem elemenata na inline-block i smanjenjem line-height, ali tada gubite mogućnost prelamanja teksta. Dobar za pojedinačne retke, ali nije dobar nigdje drugdje.
Osim toga, možemo upotrijebiti tekstualnu sjenu za preklapanje dijela crte pored silaznih linija, simulirajući to istom bojom kao pozadina. Odnosno, ova tehnika radi samo na običnoj, jednobojnoj pozadini, bez gradijenata, uzoraka ili slika.
U ovom trenutku već koristimo čak četiri svojstva za projektiranje jedne linije. To je puno više posla nego samo dodavanje tekstualnog ukrasa.
- može preskočiti oblačiće s text-shadowom;
- može promijeniti boju, težinu i stil linija;
- omogućuje korištenje prijelaza i animacija boja i težine;
- radi s tekstom u više reda osim ako se ne primijeni inline-block;
- radi na bilo kojoj pozadini sve dok ne koristite text-shadow.
- postavljen prenisko i pomaknut na kompliciran način;
- mnoga dodatna svojstva koriste se za pravilan rad;
- kada koristite text-shadow, odabir teksta izgleda ružno.
sjena kutije
box-shadow crta podliniju s dvije unutarnje sjene: jedna stvara pravokutnik, a druga skriva njegov dio. To znači da vam je potrebna solidna pozadina da bi ovo funkcioniralo.
Možete upotrijebiti isti trik sa sjenčanjem teksta da biste popunili praznine između podcrtanih i silaznih znakova. Ali ako se boja podcrtavanja razlikuje od boje teksta - ili je samo dovoljno tanka - linija se neće sudarati s oblačićima kao što bi bila s ukrasom teksta.
- omogućuje promjenu boje i debljine linije;
- radi s višelinijskim tekstom.
- ne dopušta promjenu stila podcrtavanja;
- ne radi ni na jednoj pozadini.
pozadinska slika
Metoda pozadinske slike je najbliža onome što želimo i ima najmanje nedostataka. Ideja je koristiti linearni gradijent i položaj pozadine za stvaranje slike koja se ponavlja ispod redaka teksta.
Da bi ovaj pristup funkcionirao, tekst mora biti u standardnom načinu prikaza: inline; .
Sljedeća opcija je bez linearnog gradijenta, možete dodati vlastitu pozadinsku sliku za efekte.
- može se postaviti ispod osnovne linije;
- može preskočiti oblačiće s text-shadowom;
- radi s prilagođenim slikama;
- prelama više redaka teksta;
- radi na bilo kojoj pozadini sve dok se ne primjenjuje sjena teksta.
- Veličina slike može varirati ovisno o razlučivosti zaslona, pregledniku i povećanju.
SVG filteri
Dosta sam se igrao ovom metodom. Možete stvoriti SVG ugrađeni filtar koji crta crtu, a zatim proširuje tekst kako bi maskirao dio crte koji želimo učiniti prozirnim. Zatim možete dati filtru ID i uputiti ga u CSS kao što je filter: url('#svg-underline') .
Prednost ovog pristupa je u tome što se transparentnost postiže bez upotrebe tekstualne sjene, što znači da preskačemo oblačiće na bilo kojoj pozadini, uključujući gradijente i pozadinske slike! Ovo radi samo na jednom retku teksta, imajte to na umu.
Evo kako to izgleda u preglednicima Chrome i Firefox:
Podrška u IE, Edge i Safari je problematična. Teško je testirati podršku SVG filtera u CSS-u. Možete koristiti direktivu @supports s filtrom, ali to samo provjerava radi li veza na filtar, a ne sam filtar. Moji pokušaji završili su turobnom definicijom mogućnosti preglednika, ovo je opipljiv nedostatak metode.
- može se postaviti ispod osnovne linije;
- može preskočiti oblačiće;
- omogućuje promjenu boje, debljine i stila linije;
- radi na bilo kojoj pozadini.
- ne radi s višelinijskim tekstom;
- ne radi u IE, Edgeu i Safariju, ali možete koristiti ukras teksta kao zamjenu, izgleda pristojno u Safariju.
Underline.js (platno)
Underline.js je nevjerojatan. Smatram da je impresivno ono što je Venting Zhang učinila sa svojim JavaScript vještinama i pažnjom za detalje. Ako niste vidjeli tehnički demo Underline.js, prestanite čitati i posvetite mu minutu. Tu je i njezin devetominutni govor o tome kako to funkcionira, no ja ću ukratko opisati: podcrtano je povučeno pomoću elemenata
Unatoč privlačnom nazivu, Underline.js je samo tehnološka demonstracija. To znači da ga ne možete samo uzeti i uključiti u svoj projekt bez promjene koda.
Odlučio sam to spomenuti kao dokaz koncepta koji
Nova svojstva ukrašavanja teksta
Sjećate se da sam obećao da ću više govoriti o dekoraciji teksta. Došlo je vrijeme.
Samo po sebi, ovo svojstvo radi odlično, ali možete dodati nekoliko eksperimentalnih svojstava da prilagodite izgled podcrtavanja.
- tekst-ukras-boja
- tekst-ukras-preskoči
- text-decoration-style
Ali nemojte se previše uzbuđivati... Podrška za preglednik kao i uvijek. Tako to ide.
tekst-ukras-boja
Svojstvo text-decoration-color omogućuje promjenu boje podcrtavanja odvojeno od boje teksta. Podrška za ovo svojstvo je bolja nego što biste očekivali - radi u Firefoxu i ima prefiks u Safariju. Evo kvake: ako imate oblačiće, Safari će staviti podcrtavanje na vrh teksta.
tekst-ukras-preskoči
Svojstvo text-decoration-skip omogućuje preskakanje oblačića u podcrtanom tekstu.
Ovo svojstvo je nestandardno i trenutno radi samo u Safariju, s prefiksom -webkit-. Safari omogućuje ovo svojstvo prema zadanim postavkama, tako da oblačići nisu uvijek prekriženi.
Ako koristite Normalize, imajte na umu da novije verzije onemogućuju ovo svojstvo radi dosljednog ponašanja preglednika. A ako želite da podcrtavanje ne utječe na oblačiće, morate ga ručno aktivirati.
text-decoration-style
Svojstvo text-decoration-style nudi iste mogućnosti ukrašavanja kao i svojstvo border-style, uz dodatak valovitog stila.
Ovdje je popis dostupnih vrijednosti:
- isprekidano
- točkasta
- dvostruko
- čvrsta
Trenutačno svojstvo text-decoration-style radi samo u Firefoxu, evo snimke zaslona:
Što nedostaje
Niz svojstava text-decoration-* mnogo je intuitivniji za korištenje od ostalih svojstava CSS-a za ukrašavanje podcrtavanja. Ali ako bolje pogledate, ne postoji dovoljno načina za postavljanje debljine ili položaja linije da bi se zadovoljili naši zahtjevi.
Nakon malog istraživanja, pronašao sam još nekoliko svojstava:
- širina-podcrtavanja teksta
- tekst-podcrtavanje-položaj
Čini se da su rani nacrti CSS-a, ali nikada nisu implementirani u preglednike zbog nedostatka interesa.
zaključke
Dakle, koji je najbolji način za podcrtavanje?
Za mali tekst preporučujem korištenje text-decoration s optimističnim dodatkom text-decoration-skip. U većini preglednika izgleda pomalo kitnjasto, ali podcrtavanje je oduvijek bilo u preglednicima i ljudi to jednostavno neće primijetiti. Osim toga, uvijek postoji šansa da će, ako ste strpljivi, to podcrtavanje jednog dana izgledati dobro, a da ne morate ništa mijenjati, kao što to rade preglednici.
Za tijelo teksta ima smisla koristiti pozadinsku sliku. Ovaj pristup funkcionira, izgleda sjajno i za to ima Sass mixins. Možete, u načelu, preskočiti sjenčanje teksta ako je podcrtano tanko ili drugačije boje od teksta.
Za pojedinačne retke teksta koristite border-bottom zajedno sa svim dodatnim svojstvima.
A ako želite da oblačići preskaču gradijent ili pozadinu slike, pokušajte koristiti SVG filtre. Ili jednostavno izbjegavajte korištenje podvlaka.
U budućnosti, kako se podrška preglednika bude poboljšavala, jedini odgovor bit će skup svojstava text-decoration-*.
Također preporučujem da pogledate članak Benjamina Woodroffea CSS Underlines Suck, koji se bavi istim problemima.
Na ovoj stranici pronaći ćete primjere kako modificirati HTML veze pomoću CSS-a, što vam omogućuje da blokirate veze, veze ikona, bez podvlačenja, zaobljene kutove, promijenite udaljenost između njih i još mnogo toga. U budućnosti, na temelju ovih primjera, možete kreirati različite opcije za navigacijske izbornike za web mjesto.
Prije nego počnete proučavati primjere, želim napraviti malo pojašnjenje. U svim primjerima, radi veće preglednosti, koristit će se CSS pseudoklasa koja se koristi za promjenu stilova poveznica kada iznad njih prijeđete kursorom miša. Moram reći da je ova praksa uobičajena i, u jednoj ili drugoj mjeri, koristi se na gotovo svim internetskim stranicama.
U ovom primjeru ćemo ukloniti podcrtavanje s poveznica, a zatim ćemo ih dodati ili ukloniti dok lebdimo.
Primjer HTML i CSS: kako ukloniti i dodati podcrtavanje s poveznica
Opis primjera
- Prema zadanim postavkama, svi popularni preglednici dodaju podcrtavanje vezama, što je kontrolirano CSS svojstvom. To jest, prema zadanim postavkama ovo je svojstvo, za veze, postavljeno na podcrtano. Koristeći ovo znanje, mijenjamo podcrtavanje poveznica u njihovim različitim stanjima.
U početku je podcrtavanje poveznica čvrsta tanka linija, gotovo pritisnuta uz tekst. I u većini slučajeva ova opcija je dovoljna. Međutim, ponekad dizajn zahtijeva da poveznice ne budu podvučene punom linijom, već, na primjer, točkastom linijom, ili da udaljenost od podcrtane do poveznice bude veća od standardne, ili sama podcrtana crta odvažniji. A ponekad morate napraviti neku vrstu egzotičnog podvlačenja, na primjer, valovitu ili višebojnu liniju. Sve ove opcije bit će razmotrene u ovom primjeru.
Primjer HTML-a i CSS-a: Isprekidane podvučene veze
Opis primjera
- Prvo uklanjamo standardnu podvlaku sa svih veza jer ćemo koristiti nestandardne metode. Zatim dodajemo donju granicu okvira prvoj poveznici koristeći CSS svojstvo i činimo je točkastom (isprekidanom). Ovo će biti naš vrhunac. Da bismo uklonili podcrtavanje kada lebdimo iznad poveznice, koristimo pseudo-klasu i pozadinu okvira učinimo istom kao pozadina stranice, odnosno jednostavno je sakrijemo. U teoriji, ovdje bi bilo bolje pozadinu okvira uopće učiniti transparentnom (transparentnom), ali IE6 pogrešno razumije ovu vrijednost.
- S drugom karikom radimo isto kao i s prvom, ali samo crtamo punu liniju. Kako bismo povećali udaljenost od teksta do podcrtane, postavili smo vezu s malom donjom uvlakom pomoću CSS svojstva.
- Naša treća poveznica ima višebojnu podvlaku, pa ćemo je dodati s pozadinskom slikom. Za to koristimo malu sliku koju povezujemo putem CSS-a. Postavite pozadinu na dno poveznice (0 100%) i dopustite samo vodoravno dupliciranje (ponovi-x). Podcrtano je gotovo, ali je preblizu tekstu da bi se to popravilo - dodajte malu uvlaku na dno veze. To je to.
- Stariji IE6 i IE7 mogu imati problema s prikazom podcrtanih crta na prvoj i drugoj poveznici. Da bismo to popravili, dodajemo svojstvo zoom :1, koje uključuje tzv. raspored. Ovo svojstvo je nevažeće i razumiju ga samo ovi preglednici, pa ga je bolje omogućiti uvjetni komentari.
Vrlo često, da biste stvorili izbornik, morate napraviti ne samo tekstualne veze, već i blok veze, u kojima će aktivno područje biti i sam tekst i određeno područje oko njega.
Opis primjera
- Za stvaranje blok poveznica, koristimo :block CSS svojstvo, koje ih pretvara u blok elemente koji stvaraju prijelom retka prije i poslije njih. Ako prijelomi redaka nisu potrebni, vrijednost možete zamijeniti s inline-block.
- Budući da su veze sada blokovi, ako je potrebno, možemo promijeniti njihovu širinu (CSS) ili visinu (CSS).
- U ovom primjeru uopće ne specificiramo visinu poveznica, već im jednostavno dajemo internu podlogu (CSS), koja proširuje blokove.
Opis primjera
- Sve je vrlo jednostavno - pomoću CSS svojstva dodajemo željeni okvir vezama ispod pokazivača. Međutim, obratite pažnju, mi dodajemo potpuno isti okvir na obične linkove, samo što ga činimo iste boje kao i pozadina stranice. Odnosno, zasad jednostavno sakrijemo okvir. To je učinjeno tako da kada prijeđete mišem, poveznice ne počnu "skakati" zbog renderiranja okvira.
Umjesto da boja obruba odgovara pozadini stranice, mogla se postaviti na prozirnost i učiniti prozirnom, ali kao što sam rekao, IE6 to ne obrađuje ispravno.
Primjer HTML i CSS: Stvaranje 3D veza
Opis primjera
- Koristeći CSS svojstvo, linkovima dodajemo okvire i uz pomoć postavljamo njihovu boju. Istodobno, za lijevu i gornju granicu označavamo svijetlu nijansu boje, a za donju i desnu - tamnu. Upravo zahvaljujući takvoj raspodjeli boja dobivamo linkove koji izgledaju poput trodimenzionalnih gumba.
- Kako bi se činilo da su gumbi pritisnuti kada se pokazivač miša nalazi iznad, invertiramo boje obruba za veze s pseudo-klasom. Za dodatni učinak klika postavite relativno pozicioniranje (CSS :relative) i pomaknite ga prema gore za jedan piksel (CSS :-1px).
- Pa, da sve bude potpuno lijepo - postavite tekst i boju pozadine linkova ispod kursora malo tamnije od uobičajenih. Spreman.
U ovom primjeru napravit ćemo poveznice s ikonama koje će sadržavati ne samo slike tih ikona, već i tekst ispod njih. Međutim, u budućnosti ih možete jednostavno promijeniti i ostaviti, na primjer, samo ikone.
Prije početka rada, pripremimo nekoliko slika ikona, i to u dva seta - za redovne veze i veze ispod pokazivača miša. Drugi set bi trebao biti izvana drugačiji od prvog, u našem slučaju to je izraženo u paleti boja.
klase css referenca.
IE6 će se morati malo "izliječiti":
- IE6 ne razumije svojstvo za postavljanje minimalne širine, ali tumači CSS svojstvo točno kao minimalnu širinu. Stoga za to koristimo jednostavan hakirati koji će riješiti ovaj problem.
U ovom ćemo primjeru zaokružiti kutove poveznica pomoću jedne od sljedećih metoda. zaokruživanje ugla opisano u sljedećem pododjeljku. Nećemo razmatrati opciju pomoću CSS 3, jer je tamo sve vrlo jednostavno, već ćemo napraviti zaokruživanje pomoću slika.
Da bismo to učinili, prvo ćemo izrezati nekoliko praznih slika u dva seta - za obične veze i veze ispod pokazivača. Kod nas će se razlikovati po prisutnosti / odsutnosti sjene na slikama.