Erabiltzailearen interfazeak
1 Sarrera
Interfaze bat (pluralean: interfazeak) informatikan erabiltzen da bi sistema, programa, gailu edo edozein motatako osagaien arteko konexio funtzionalari izena emateko, maila desberdinetako komunikazioa ahalbidetzen duena, informazioa trukatzeko aukera emanez.
Adibideak:
- Erabiltzaile-interfazeak: programa bat erabiltzerakoan.
- Giza interfaze gailua: ingelesezko sigletan HID (human interface device), hardware interfaze bati egiten dio erreferentzia, gizakiok ordenagailuarekin elkarreragiteko erabiltzen duguna.
- Interfaze fisikoa: osagai bat beste batera konektatzen denean (USB ataka edo SATA ataka).
2 Erabiltzaile-interfazeak
Erabiltzaile-interfazea (User Interface edo UI) pertsona batek aplikazio edo sistema informatiko batekin komunikatzeko aukera ematen duten elementu bisual eta interaktiboen multzoa da. Horiei esker, botoi bat sakatu, menu bateko aukera bat hautatu edo orri batetik bestera nabigatu dezakegu.
Normalean, ulertzeko eta erabiltzeko errazak izaten dira, nahiz eta informatikaren arloan egokiagoa izan “erabilgarriak, atseginak eta intuitiboak” direla esatea.
Gaur egun, interfazeek eboluzionatzen jarraitzen dute, eta jada ez dira botoiak dituzten pantailetara mugatzen. Ukipen-interfazeak, ahots bidezko laguntzaileak, errealitate areagotua, errealitate birtuala eta keinuak interpretatzeko gai diren sistemak ere badaude.
2.1 Interfazea komunikazio-bide gisa
Interfazea erabiltzailearen eta ordenagailuaren (edo aplikazioaren) arteko itzultzaile gisa irudikatzea erabilgarria izan daiteke. Erabiltzaileak egin nahi duena adierazten du ekintza errazen bidez; programak ekintza horiek berak ulertu eta exekuta ditzakeen jarraibide bihurtzen ditu, eta ondoren informazioa itzultzen dio erabiltzaileari. Beraz, komunikazioa noranzko bikoa da.
2.2 Interfaze on baten ezaugarriak
Interfaze on batek erabiltzaileari bere helburuak ahalik eta ahalegin txikienarekin lortzeko aukera eman behar dio. Ezaugarri nagusien artean, honako hauek nabarmentzen dira:
- Sinpletasuna: Interfaze sinple batek beharrezkoak diren elementuak baino ez ditu. Egin beharreko ekintzarako beharrezkoak ez diren botoi, kolore edo informazio gehiegirekin pantaila gainkargatzeak nahasmena sortu ohi du.
- Argitasuna: Elementuek argi adierazi behar dute zein den beren funtzioa. Erabiltzaileak ez luke elementu bakoitzak zer egiten duen asmatu behar. Adibidez:
- “Gorde” argiagoa da “Onartu” baino.
- Zakarrontzi baten ikonoak ezabatzeko ekintza irudikatu ohi du.
- Lupa baten ikonoak bilaketa bat irudikatu ohi du.
- Koherentzia: Antzeko elementuek antzera jokatu behar dute. Koherentziari esker, erabiltzaileak azkar ikasten du aplikazioak nola funtzionatzen duen.
- Abiadura: Interfazeak berehala erantzun behar die erabiltzailearen ekintzei. Eragiketa batek hainbat segundo behar baditu amaitzeko, aplikazioak nolabaiteko erantzuna erakutsi behar du:
- Kargatze-adierazle bat.
- Aurrerapen-barra bat.
- Informazio-mezu bat.
- Irisgarritasuna: Pertsona guztiek aplikazioa erabili ahal izan beharko lukete, beren gaitasunak edozein izanda ere.
- Moldagarritasuna: Interfazeak pantailaren edozein tamainatara behar bezala egokitu behar du.
2.3 Lehen inpresioaren garrantzia
Erabiltzaile-esperientziari buruzko hainbat ikerketak erakusten dute pertsona batek web-orri bati buruzko hasierako iritzia segundo gutxitan osatu ohi duela. Denbora-tarte labur horretan, erabiltzaileak honako hauek erabakitzen ditu:
- Orriak profesionala dirudien.
- Informazioa erraz aurkitzen duen.
- Gunean konfiantza duen.
- Nabigatzen jarraitzen duen edo orria uzten duen.
Horregatik, ikusizko diseinuak eragin zuzena du aplikazio baten kalitatearen pertzepzioan. Baina garrantzitsua da gogoratzea interfaze polit batek ez duela zertan interfaze ona izan.
Interfaze polit batek ez du zertan interfaze ona izan
3 Erabiltzaile-interfazeen bilakaera
Gaur egun 3 mota bereiz ditzakegu:
- Komando-lerroko interfazea (Command-Line Interface, CLI): Interfaze alfanumerikoak (komando-interpretea) testua edo karaktere bereziekin sortutako interfaze sinpleak soilik erakusten dituztenak.
- Erabiltzaile-interfaze grafikoa (Graphic User Interface, GUI): Ordenagailuarekin modu azkar eta intuitiboan komunikatzeko aukera ematen dute, kontrol- eta neurketa-elementuak grafikoki irudikatuz.
- Erabiltzaile-interfaze naturala (Natural User Interface, NUI): Ukigarriak izan daitezke, pantaila ukigarri batean “kontrol panela” grafikoki irudikatuz eta hatzarekin elkarreragiteko aukera emanez; ahots-ezagutza bidez funtziona dezakete (adibidez Siri); edo gorputz-mugimenduen bidez (antzinako Kinect edo egungo Vision Pro bezalako Apple-ren gailuak).
Wikipedian interfaze grafikoen historia dago, eta hemen laburpen bat egingo da.
3.1 Komando-lerroko interfazea
Komando-lerroko interfazea edo komando-lerroko aginte-interfazea (ingelesez: command-line interface, CLI) ordenagailu baten erabiltzaile-interfaze mota bat da, erabiltzaileei programa informatiko bati edo sistema eragileari aginduak emateko aukera ematen diona testu-lerro sinple baten bidez.
CLIak modu interaktiboan erabil daitezke, testu-sarrera motaren batean aginduak idatziz, edo askoz modu automatizatuagoan (batch fitxategia), script-fitxategi batetik aginduak irakurriz.
Interfaze hau ia konputazioaren hasieratik existitzen da, antzinatasunean soilik txartel zulatuak eta antzeko mekanismoek gaindituta. Ordenagailuek “terminal tontoak” konektatuta zituzten, eta horien bidez aginduak bidaltzen zitzaizkien ordenagailuari.
Gaur egun, komando-lerroa “terminal emulatzaile” izeneko programekin erabiltzen da, eta horiek komando-interprete bat (shell izenekoa) exekutatzen dute. Interprete hauek, sistema eragilearen arabera, aukera desberdinak izan ditzakete, adibidez:
- Windows-en cmd zaharra edo berriagoa eta hobetua den PowerShell erabil daitezke. Beste batzuk ere erabil daitezke, baina ez daude lehenetsita instalatuta (adibidez bash).
- GNU/Linux sistemetan gehien erabiltzen den interpretea eta banaketa gehienetan instalatuta dagoena bash da. Azken urteetan zsh-k merkatu asko irabazi du Oh-my-zsh frameworkari esker.
- MacOS sistemetan interprete lehenetsia zsh da.
CLI, shell eta terminal emulatzaile kontzeptuak ez dira gauza bera. CLI paradigma bati egiten dio erreferentzia, eta shell edo terminal emulatzaileak programa informatiko espezifikoak dira, normalean elkarrekin CLIa inplementatzen dutenak. Hala ere, hirurak sinonimo gisa erabiltzen dira askotan.
| Abantailak | Desabantailak |
|---|---|
| ● Oso azkarra erabiltzaile adituentzat. | ● Komandoak buruz ikasi behar dira. |
| ● Automatizatzeko gaitasun handia. | ● Ez da oso intuitiboa hasiberrientzat. |
3.2 Erabiltzaile-interfaze grafikoa
Erabiltzaile-interfaze grafikoa, GUI izenez ere ezaguna (ingelesez graphical user interface), erabiltzaile-interfaze gisa jarduten duen programa informatiko bat da, gaur egun irudi eta objektu grafiko multzo bat erabiliz interfazean eskuragarri dauden informazioa eta ekintzak irudikatzeko.
Bere funtzio nagusia ingurune bisual erraza eskaintzea da, ordenagailu baten sistema eragilearekin komunikazioa ahalbidetzeko.
3.2.1 Testu moduko interfazea
Interfaze grafikoak ez dira mahaigaineko inguruneekin jaio, baizik eta aurreko urratsetan ere badaude leihoak edo inguruneak simulatzen dituzten liburutegiak, testu-karaktereak eta koloreak erabiliz.
Kontuan izan behar da interfaze hauek baliabide oso gutxiko makinetan eta interfaze grafikorik ez zuten sistema eragileetan erabiltzen zirela normalean.
3.2.2 Lehen ikerketak eta garapenak
Doug Engelbartek Stanford Research Institute-n (Menlo Park, AEB) 60ko hamarkadan egindako “Giza Adimenaren Handitzea” proiektuak oN-Line System garatu zuen, saguarekin kontrolatutako kurtsorea eta hipertextuarekin lan egiteko hainbat leiho zituen sistema.
Hasierako ikerketa asko ume txikiek nola ikasten duten aztertzean oinarritu zen. Horregatik, diseinua eskuko eta begiaren arteko koordinazioaren oinarrizko mugimenduetan oinarritu zen, komando-hizkuntzak erabili ordez.
GUIa hasieran Xerox PARCen (Palo Alto Research Center) garatu zuten Alan Kay, Larry Tesler, Dan Ingalls eta beste ikertzaile batzuek. Leihoak, ikonoak eta menuak erabiltzen zituen, lehen menu desplegable finkoa barne, fitxategiak ireki, ezabatu eta mugitzeko aginduak onartzeko.
1981ean Xeroxek produktu berritzaile bat aurkeztu zuen, Star izenekoa, PARCen berrikuntza asko txertatuz. Ez zen arrakasta komertziala izan, baina Star-ek etorkizuneko garapenetan eragin handia izan zuen, adibidez Apple, Microsoft eta Sun Microsystems-en.
1979an, Steve Wozniak, Steve Jobs eta Jef Raskin buru zituen taldeak (Xeroxeko langile ohiekin batera) Xerox PARCen ikusitako ideiekin jarraitu zuten eta 1983an “Apple Lisa” ordenagailua merkaturatu zuten, interfaze grafikoa zuen lehen ordenagailua. Ez zen salmentetan arrakastatsua izan, baina “mahaigaineko sistema eragileak” deitu daitezkeen garaiaren hasiera izan zen.
1984an Applek Macintosh kaleratu zuen, Lisa sistemaren eboluzioa zuen sistema eragilearekin, “System” izenekoa, eta bertan gaur egun arte ia aldatu ez diren atal batzuk ikus daitezke.
Hurrengo urtean, Microsoftek Windows 1.0 kaleratu zuen, MS-DOS sistema eragilerako GUI bat, baina ez zen 1990eko Windows 3.0 bertsiora arte bere ospea lehertu.
3.3 Mahaigaineko erabilera masiboa
1990eko hamarkadaren etorrerarekin, ordenagailu pertsonalak (PC, personal computer ingelesez) ezagun bihurtu ziren eta etxeetara eta enpresetara iristen hasi ziren, eta horrek ezagutza aurreraturik ez zuten erabiltzaileen merkatua sortu zuen, erabilera erraztasuna behar zutenak.
“Boom”a Windows 3.11-rekin hasi zen, baina batez ere Windows 95-ekin, sistema eragilearen nukleoa (MS-DOS) ezkutatzea lortu zuen eta hasieratik interfaze grafikoa zuzenean erakusten zuen.
Applek NeXT (Steve Jobsek sortutako enpresa) erosi zuen eta bere sistema eragilea Mac OS 8-ren oinarri gisa erabili zuen. Ondoren, sistema eragilearen arkitektura UNIX estilokoa bihurtu zuten eta horrela Mac OS X aurkeztu zuten 2001ean.
Urte hauetan eta 2000ko hamarkadaren hasieran, erabiltzaile-interfazeak eboluzionatzen joan ziren ordenagailuen potentzia handitzen zen heinean, baina beti mahaigaineko benetako ingurunea simulatzen jarraituz.
GNU/Linux munduan Gnome eta KDE bezalako mahaigaineko ingurune libreak iragarri ziren, paraleloan eboluzionatu zutenak eta ia “gerra” bat sortu zuten haien artean eta erabiltzaileen artean (1. esteka, 2. esteka).
Sistema eragile bakoitzak eta mahaigaineko sistema bakoitzak bere eboluzio propioak egiten zituen, eta arrakasta izanez gero, besteetan “kopiatzen” ziren, kolore, ikono edo leiho-efektuetan “modak” sortuz ere.



KDE-ren eboluzioa 1998, 2000 eta 2005ean. Iturria: Wikipedia
3.4 Web-interfazeak
90eko hamarkadaren amaieran eta 2000ko hasieran, interneten gorakadak web atariek ere euren interfazeetan eboluzio handia izatea ekarri zuen.


Amazon webgunearen eboluzioa. Iturria: VersionMuseum
Kontuan izan behar da garai hartako HTML eta CSS bertsioak ez zirela gaur egungoak bezain aurreratuak, eta javascript-en exekuzio-aukerak ere ez zirela gaur bezain indartsuak. Interfazeak teknologiak berak mugatu zitzakeen
Interfazeak une horretako teknologiek mugatu ditzakete
Bestalde, ohikoa da enpresaren irudia aldatzea, logotipo, kolore korporatibo, koloreen modaren arabera… eta horrek guztiak interfazeetan aldaketak eragiten ditu.

Twitter/X logotipoaren eboluzioa.
3.5 Mugikor-interfazeak
Telefono mugikorren kasuan, bistaratze-sistema estandarrik ez zegoenez, fabrikatzaile bakoitzak bere interfaze propioa sortzen zuen pantailak handitzen, bereizmena eta koloreak handitzen ziren heinean.
Lehen mugikorrek ez zuten pantailarik, gero pantaila txiki monokromoak izaten hasi ziren, batzuetan testu-lerro bakarrarekin.


Ericsson T10 eta Nokia 3310
Ondoren, koloretako pantailak izaten hasi ziren eta enpresa bakoitzak bere sistema eragilea sortu zuen. Enpresa askoren artean sistema eragile bat sortzeko saiakera bat izan zen Symbian, baina azkenean Nokia izan zen garatzailea eta gehien erabili zuena.
2000ko hamarkadaren lehen urteetan PDA-ak (personal digital assistant, poltsikoko ordenagailuak) ere modan jarri ziren, normalean pantaila ukigarri (erresistiboa) bat erabiltzen zutenak eta boligrafo batekin erabiltzen zirenak.
Dena aldatu zen 2007an iPhone-a eta lehen smartphone-ak iritsi zirenean, pantaila ukigarri kapazitiboek (hatzez erabiltzen direnak) protagonismoa hartu zuten. Pantaila hauek, ukigarriak izateaz gain, hainbat hatz erabiliz keinuak egiteko aukera ematen dute, interfazearekin elkarreragiteko modu berriak sortuz.


iPhone 1. belaunaldia eta HTC Desire.
Applek botoi bakarra aukeratu zuen, eta Android sistema eragileek (adibidez HTC Desire 2009koa) gutxienez lau botoi zituzten sistemako eta unean erabiltzen ari zen aplikazioko funtzio batzuk kudeatzeko.
Aldaketa hauekin, sistema eragileek eta interfazeek aldaketa erradikal bat jasan zuten, erabiltzailearen erraztasuna bilatuz eta interfazearekin elkarreragiteko “keinuak” agertuz:
- Tap: pantaila ukitzea (saguarekin “klik” egitearen antzekoa)
- Double tap: ukitu bikoitza, aplikazioaren arabera zoom bat egin dezake.
- Scroll: hatzarekin gora edo behera arrastatuz interfazean mugitzea.
- Flick: keinu azkarra gora edo behera eginez scroll egiten da; ezkerrera edo eskuinera eginez, mugimendua pantaila gehiagorik badago horren araberakoa izango da.
- Pinch in: zooma gerturatzea.
- Pinch out: zooma urruntzea.
Honekin guztiarekin, orain arte interfazeetan planteatu ez zen “arazo” berri bat sortzen da: gailuaren biraketa. Biraketa horrek aplikazioa egokitu behar du terminalaren posizio berrira, bertikaletik horizontala edo alderantziz pasatuz.


iOS Music aplikazioaren ikuspegi bertikala eta horizontala
Gailu hauen eboluzioarekin tablet-ak sortu ziren, keinu filosofia bera jarraituz, baina pantaila handiagoek informazio gehiago erakusteko aukera ematen dute. Mahaigaineko interfazeak erabili ordez, mugikorretako interfazeak eboluzionatu ziren.
Leku gehiago dagoenez, ez dira mugikor-aplikazioak “eskalatzen”, baizik eta interfazeek menu edo informazio gehiago gehitzeko aukera dute.
iOS Music aplikazioaren ikuspegia iPhone eta iPad-en. Iturria: 9to5mac
Interfaze bat diseinatzerakoan kontuan hartu behar dugu gailua, bere neurriak eta erabilera, erabiltzailearen esperientzia hobetzeko.
3.6 Errealitate birtuala eta errealitate areagotua
Interfazeen garapenaren hurrengo urratsa errealitate areagotuan (augmented reality) eta errealitate birtualean dago. Nahiz eta orain modan dauden terminoak diruditen, haien ikerketa eta eboluzioa hamarkadak daramatza garatzen.
Lehen urratsak “head-up display” izenekoetan eman ziren, erabiltzaileari informazioa aurkezten dioten pantaila gardenak, pantailaren atzean dagoena ikusten uzten dutenak. Horrela, erabiltzaileak ez du burua biratu behar informazioa lortzeko.
Batzuetan pantaila hau erabiltzailearen eta aginte-panelaren artean egon daiteke, aginte-panelera integratuta edo pilotuaren kaskoan eta begiaren ondoan jarrita.
Bestalde, errealitate birtuala dugu, erabiltzaileari ingurune simulatua eskaintzen diona, bertan mugi daiteke eta batzuetan inguruko elementuekin elkarreragin dezake.
Horretarako, ohikoa da betaurreko batzuk erabiltzea ingurune birtuala erakusteko, eta aginte batzuk edukitzea ingurunearekin elkarreragiteko.
Ingurunean mugitzeko, sistema batzuek trackers erabiltzen dituzte, horrela ingurune birtualean mugi gaitezke aginteak erabili gabe.
Hurrengo urratsa errealitate areagotua da, non elementu birtualak bizitza errealean integratzen saiatzen diren. Ez da berria, urteak daramatza joko eta aplikazioetan existitzen.


Errealitate areagotuko adibideak mugikorrean
Errealitate areagotua eguneroko erabilerarako izan dadin, sistemak pixkanaka eboluzionatzen hasi dira, nahiz eta kostua oraindik altua izan. Gaur egun, ez dago argi zein izango den bere onura eta errendimendua.
Apple Vision Pro kasuan, errealitate areagotuko esperientzia bat agintzen dute, eskuen keinuak erabiliz interfazean mugitzeko.
3.7 Ahots bidezko interfazeak
Ahotsaren ezagutza digitala exekutatzeko aukera eman zuen lehen tresna 1962an aurkeztu zen. Aurretik hainbat aplikazio eta laguntzaile birtual egon baziren ere, erabilera publiko orokorrera ez zen iritsi Siriren agerpena 2010ean gertatu arte.
Gaur egun, ahots bidezko interfazeak telefono mugikorrekin eta hizkuntza naturala ezagutzeko eta eskatzen zaizkien ekintzak exekutatzeko gai diren laguntzaile birtualekin lotuta daude. Laguntzaile ezagunenak Siri, Alexa eta Google Assistant dira.
4 Bitxikeriak, prototipoak eta zientzia fikzioa
Atal honetan benetakoak diren baina bitxikeriak diren interfaze batzuk, oraindik ezer lortu ez duten prototipoen adibideak eta zientzia fikziozko filmen ikuspegia gehituko dira.
1982ko ukipen-teknologiaren erabilera posibleen demostrazioa. Egia esan, pantaila ez da ukigarria, baizik eta inguruan sentsoreak ditu. Bideoa.
Jurassic Park filmean 3Dn fitxategi-sistema arakatzeko interfaze bat agertzen da. It’s UNIX!.
Minority Report (2002) filmean eskuarekin erabiltzen den interfaze bat agertzen da. Bideoa.
2003an Microsoftek bere hurrengo Windows izango zenaren bideoa erakusten du, Longhorn izenekoa. Interfaze hau ez zen inoiz azken bertsiora iritsi, baina demostrazio bertsioak egon ziren. Azken bertsioa Vista izan zen, baina ez zen hasierako kontzeptuen antzekoa izan.
2006an, OpenGL hardware bidezko azelerazioarekin, GNU/Linux banaketetan benetako 3D diseinuko leiho-kudeatzaileak sortu ziren. Alternatiba asko egon ziren, proiektu ezberdinen “fork” asko sortu baitziren, baina ezagunenak Compiz eta Beryl izan ziren. Bideoa.
2006an TED hitzaldi batean Jefferson Hanek multitouch pantailaren demostrazioa egiten du, eta bertan gaur egun smartphone-ekin egunero erabiltzen ditugun keinu asko erakusten ditu. TED hitzaldia eta demostrazio bideoa.
2009an Microsoftek tablet tolesgarri baten kontzeptua aurkezten du, Courier izenekoa. Bideo 1, Bideo 2. iPad-a oraindik ez zen aurkeztu.
Iron Man filmek interfaze ikusgarri asko erakutsi dituzte, holografiko eta errealitate areagotuko mailan. Bideoa.
Her filmean gizaki baten eta haren laguntzaile birtualaren arteko harremana erakusten da.
Web diseinuaren eboluzioa
5 Sarrera
Interneten nabigatzen dugunean erraza da pentsatzea web orriak beti gaur egun daukaten itxura izan dutela beti. Hala ere, web diseinua asko eboluzionatu du World Wide Web sortu zenetik, azken hamarkadako hasieran.
Lehenengo web orriak oso sinpleak ziren eta ia testu bakarrik osatuak zeuden. Urteak pasa ahala teknologia berriak agertu ziren, irudiak, estiloak, animazioak eta askoz elaboratuagoak diren interfazeak txertatzea ahalbidetu zituztenak.
Eboluzio hori ezagutzeak aukera ematen du zergatik sortu ziren teknologi batzuk, nola sortu diren gaur erabiltzen diren estandarrak eta zein diren web interfazeen garapenean jarraitu beharreko praktika onak.
6 Web diseinuaren historia
6.1 Lehenengo urteak: web orri estatikoak
1991ean Tim Berners-Leek HTML garatzen hasten du CERNen. Ez zuen HTML hizkuntza bakarrik sortu, HTTP (HyperText Transfer Protocol) protokoloa eta lehenengo web zerbitzari ere sortu zen.
Lehenengo web orriak HTML hizkuntzan bakarrik idazten ziren eta egitura oso sinplea zuten. Ez zegoen edukia eta aurkezpena bereizteko inolako banaketarik. HTML propioak adierazten zituen bai dokumentuaren egitura, bai itxura.
Lehenengo urte hauetan nabigatzaileak agertu ziren, hala nola:
6.3 CSSaren agerpena
1996an CSS (Cascading Style Sheets) agertu zen, web garapenaren arazo nagusietako bat konpontzeko helburuarekin: edukia eta aurkezpena bereiztea.
HTML
<h1>Título</h1>
CSS
h1{
color: blue;
text-align:center;
}
Orduz geroztik:
- HTML-ek egitura deskribatzen zituen.
- CSS-ek itxura bisuala kontrolatzen zuen.
Bereizketa horrek abantaila ugari eskaintzen zituen:
- Kode garbiagoa.
- Mantentze erraztasun handiagoa.
- Estiloen birerabilpena.
- Irisgarritasun hobea.
- Diseinu uniformea webgune osoan.
CSS 1996an agertu arren, hainbat urte pasa ziren nabigatzaileek behar bezala ezartzen hasi arte.
6.4 Web 2.0
2000eko hamarkadaren hasieran Internet sakon aldatu zen. Erabiltzaileak irakurle soilak izatetik edukien sortzaile ere bihurtu ziren. Aldi honi Web 2.0 deritzo.
Web orriak honako elementuak txertatzen hasi ziren:
- Blogak.
- Sare sozialak.
- Wikiak.
- Iritziak.
- Foroak.
- Merkataritza elektronikoa.
Diseinua ere asko eboluzionatu zuen. Populartsu bihurtu ziren:
- Botoi handiak.
- Itzalak.
- Gradienteak.
- Ertz biribildutakoak.
- Ikono koloretsuak.
- Menú elaboratuagoak.
6.5 HTML5 eta CSS3
2010 inguruan bi estandar nagusi sendotzen hasi ziren: HTML5 eta CSS3, web garapena erabat eraldatu zutenak. Garrantzitsuenak diren berrikuntzen artean hau aurkitzen dugu:
| HTML5 | CSS3 |
|---|---|
| ● Etiketa semantikoak. ● Bideo natiboa. ● Audio natiboa. ● Canvas. ● SVG. ● Inprimaki osatuagoak. |
● Ertz biribildutakoak. ● Itzalak. ● Gradienteak. ● Animazioak. ● Eraldaketak. ● Media Queries. |
6.6 Mugikorretarako gailuen gorakada
2007an lehen iPhone agertu zen, eta nahiz eta jada Interneten nabigatzeko gailu mugikorrak egon, horietako bat ere ez zen honen renderizazio kalitateari iristen, nabigatzaile erreala baitzen. Denbora gutxi ondoren smartphone ezagun bihurtzen hasi ziren, eta horrek Interneten nabigatzeko modua erabat aldatu zuen.
Dizainatzaileek ezin zuten bakarrik mahaigaineko monitoreentzako orriak sortu, gaur egun beharrezkoa baitzen honakoa pentsatzea:
- Pantaila txikiak.
- Pantaila ukigarriak.
- Bereizmen desberdinak.
- Orientazio desberdinak.
6.6.1 Responsive Web Design
2010ean Ethan Marcottek Responsive Web Design terminoa ezagun bihurtu zuen. Bere proposamena edozein pantailaren tamainara automatikoki egokitzen diren orriak sortzea zen.
Horretarako hasi ziren erabiltzen:
- Diseinu fluidoak.
- Media Queries.
- Irudi moldagarriak.
- Unitate erlatiboak.
Gaur egun responsive diseinua funtsezko baldintza da ia edozein webguneetan.
6.7 Flexbox eta CSS Grid-en etorrera
Urte askotan CSS bidez diseinu konplexuak sortzea zaila zen. float, taulak eta posizio absolutuak bezalako teknikak erabiltzen ziren.
Soluzio hauek ez ziren oso malguak eta mantentzea zaila zen. Aldaketa hori flexbox eta CSS Grid etorri zenetik gertatu zen, eta maquetazioan kalitate- eta mantentze-jauzi handia ekarri zuen. Gaur egun bi sistema hauek diseinu modernoko oinarria osatzen dute.
6.8 Diseinuaren eboluzioa
Urte askotan interfazeek objektu errealak imitatzen saiatzen ziren. Filosofia hori skeuomorfismoa izenez ezagutzen da:
- Botoiak botoi fisikoak bezalakoak ziren.
- Karpetak karpeta errealak bezalakoak ziren.
- Egutegiak paper-egutegiak imitatzen zituzten.
2012tik aurrera alderantzizko joera bat hasi zen nagusitzen, Flat Design izenekoa. Bere ezaugarri nagusiak hauek dira:
- Kolore solidoak.
- Efektu bisual gutxi.
- Testurarik eza.
- Itzal minimoak.
- Diseinu garbia.
- Ikono sinpleak.
Microsoft estilo honen lehenengo sustatzaile handietako bat izan zen Windows Phone-rekin. Geroago Applek eta Googlek antzeko diseinuak hartu zituzten. 2014an Googlek Material Design aurkeztu zuen, ez zena estilo bisualen multzo bat bakarrik, diseinu sistema osoa baizik. Material Design-ek honakoak definitzen ditu:
- Koloreak.
- Tipografiak.
- Animazioak.
- Ikonografia.
- Tarteak.
- Osagai berrerabilgarriak.
Bere helburua Googleko aplikazio guztietan esperientzia koherentea eskaintzea zen. Gaur egun oraindik eboluzionatzen ari da eta web garapenaren diseinu sistema eraginkorrenetako bat da.
6.9 Etorkizunera begira
Web diseinua etengabe eboluzionatzen ari da. Gaur egungo joera batzuk hauek dira:
- Modu iluna (Dark Mode).
- Web aplikazio progresiboak (PWA).
- Mikroanimazioak eta animazio diskretuak.
- Osagaietan oinarritutako diseinua.
- Diseinu-sistema partekatuak.
- Irisgarritasuna garapenaren lehen faseetatik.
- Errendimendu handia.
Nahiz eta tresnak azkar aldatzen diren, diseinu on baten oinarrizko printzipioak ia aldatu gabe geratzen dira.
20 urte baino gehiago dituen web orri bat nabigatzaile moderno batean ikusgai egon daiteke oraindik. Atzera bateragarritasun hori Webaren arrakasta handiko gakoetako bat izan da.
CSS
7 CSSren historia
World Wide Web-aren lehen urteetan, web-orriak gaur egungoen oso bestelakoak ziren. Haien helburu nagusia ikertzaileen artean informazioa eta dokumentuak partekatzea zen; beraz, itxura bisualak bigarren mailako garrantzia zuen.
7.1 HTMLren arazoa
HTML dokumentu baten egitura deskribatzeko sortu zen, ez haren itxura deskribatzeko. Horrela, edukia izenburuen, paragrafoen, zerrenden eta esteken bidez defini zitekeen, baina dokumentuaren aurkezpena kontrolatzeko aukera gutxi eskaintzen zituen. Horren ondorioz, orrialde gehienek oso antzeko itxura zuten: atzeko plano grisa, testu beltza, esteka urdinak eta oso banaketa sinplea.
Internet ezagun egiten hasi zen heinean, enpresek eta erakundeek itxura erakargarriagoa eta bereiziagoa zuten web-orriak sortu nahi izan zituzten. Hala ere, HTML ez zegoen horretarako diseinatuta. Ez zegoen honako alderdi hauek definitzeko mekanismorik:
- Koloreak.
- Marjinak.
- Tipografiak.
- Tarteak.
- Elementuen kokapena.
7.2 Aurkezpen-etiketen etorrera
Diseinatzaileek orrien itxura kontrolatu nahi zutenez, nabigatzaileak aurkezpenarekin lotutako HTML etiketak txertatzen hasi ziren, hala nola: <font>, <center>, <big> …
Etiketa horiek arazoa neurri batean konpontzen zuten, baina beste arazo batzuk sortzen zituzten. Adibidez, letra-tipoa gehitu nahi bagenuen, testu guztietan zehaztu behar genuen. Gainera, edukia eta aurkezpena nahastu egiten ziren, mantentze-lanak garestiak ziren eta nabigatzaile bakoitzak etiketa batzuk modu desberdinean interpretatzen zituen, edo zuzenean ez zituen interpretatzen.
7.3 CSSren sorrera
Arazo horiek konpontzeko, 1994an Håkon Wium Lie informatikari norvegiarrak Cascading Style Sheets izeneko hizkuntza berria proposatu zuen, CSS siglez ezagunagoa. Haren proposamena bi alderdi desberdin erabat bereiztean oinarritzen zen:
- HTML edukiaren eta egituraren deskribapenaz arduratuko zen.
- CSS itxura soilik definitzeaz arduratuko zen.
Ideia oso ondo hartu zen eta, Bert Bos bezalako beste kolaboratzaile batzuekin batera, W3Cren estandar bihurtu arte garatu zen. 1996ko abenduan, lehenengo gomendio ofiziala argitaratu zen: CSS Level 1 (CSS1). Hainbat alderdi aldatzeko aukera ematen zuen, besteak beste:
- Koloreak.
- Tipografiak.
- Marjinak.
- Koskak.
- Testuaren lerrokatzea.
- Atzeko planoak.
7.4 CSS2
1998an CSS2 agertu zen, eta hobekuntza ugari ekarri zituen. Horien artean, honako hauek nabarmentzen ziren:
- Posizionamendu absolutua.
- Posizionamendu erlatiboa.
- Euskarri-motak (pantaila, inprimaketa…).
- Geruzak.
- Hautatzaile berriak.
- Taula osatuagoak.
CSS2ri esker, diseinu askoz konplexuagoak garatzen hasi ziren. Hala ere, nabigatzaileek oraindik alde handiak zituzten inplementazioan. Urte askotan ohikoa izan zen web-orri batek nabigatzaile batean behar bezala funtzionatzea eta beste batean erroreak erakustea.
7.5 CSS3: eboluzionatzeko modu berri bat
Zehaztapen erraldoi bakarra sortu beharrean, W3Ck CSS modulu txiki eta independenteetan banatzea erabaki zuen. Nahiz eta herri mailan CSS3-ri buruz hitz egiten dugun, egia esan, ez dago “CSS3” izeneko dokumentu ofizialik. Gaur egun, CSS modulu ugarik osatzen dute, eta bakoitzak bere garapen-erritmoa du. Hona hemen adibide batzuk:
- Hautatzaileak.
- Atzeko planoak eta ertzak.
- Animazioak.
- Trantsizioak.
- Flexbox.
- Grid Layout.
- CSS aldagaiak.
- Media Queries.
Sistema horri esker, funtzionalitate berriak txerta daitezke urteak itxaron behar izan gabe bertsio oso berri bat argitaratzeko.
7.6 CSSren aurreprozesadoreen sorrera
Muga horiek gainditzeko, CSSren aurreprozesadore izenekoak agertu ziren. Aurreprozesadore batek CSS estandarra baino hizkuntza ahaltsuago eta erosoago batean idazteko aukera ematen du, eta ondoren automatikoki CSS estandar bihurtzen da. Bi aurreprozesadore ezagunenak hauek dira:
- SASS: 2006an sortu zen eta aldagaiak, habiaratzea, mixins sistema (funtzio gisa defini daiteke) kodea errepikatu behar ez izateko, herentzia, begiztak… sortzeko aukera ematen du.
- LESS: 2009an sortu zen, SASSen inspirazioan oinarrituta, eta abantaila nagusia da JavaScript bidez nabigatzailean exekuta daitekeela, aurretik aurreprozesatu beharrik gabe.
Duela urte batzuk arte, ia proiektu handi guztiek SASS edo LESS erabiltzen zuten barnean, honako hauek ahalbidetzen baitzituzten:
- Kodea errepikatzea murriztea.
- Proiektu handiak antolatzea.
- Osagaiak berrerabiltzea.
- Mantentze-lanak erraztea.
- Taldean lan egitea.
- Zereginak automatizatzea.
Garai hartan, CSSk oraindik ez zituen ezaugarri horietako asko.
Denborarekin, CSSk hainbat funtzio txertatu ditu, hala nola aldagaiak, hautatzaile berriak, zenbait funtzio matematiko… Ondorioz, proiektu txiki eta ertain asko CSS soilik erabiliz gara daitezke.
Hala ere, SASSek oso erabilia izaten jarraitzen du proiektu handietan, kodearen antolaketarekin eta estiloak berrerabiltzearekin lotutako abantailak eskaintzen jarraitzen duelako.
7.7 CSS gaur egun
Gaur egun, CSS oso hizkuntza ahaltsua da, etengabe eboluzionatzen ari dena, eta hainbat enpresak parte hartzen dute ezaugarri berriak proposatzeko eta gehitzeko.
8 CSS HTML orri batean gehitzea
HTML orri batek estilo-orri bat erabili ahal izateko, nabigatzaileari CSS fitxategia non dagoen adierazi behar zaio. Modurik ohikoena <link> elementua HTML dokumentuaren <head> atalaren barruan erabiltzea da.
Gehitu CSS HTML orrialde batean
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Mi primera página con CSS</title>
<link rel="stylesheet" href="css/estilos.css">
</head>
<body>
<h1>Hola mundo</h1>
</body>
</html>
Adibide honetan, nabigatzaileak css karpetaren barruan dagoen estilos.css fitxategia kargatzen du, ****orria erakutsi aurretik****. rel="stylesheet" atributuak estekatutako fitxategia estilo-orri bat dela adierazten du; href atributuak, berriz, CSS fitxategiaren bidea zehazten du.
8.1 Hainbat estilo-orri txertatzea
Benetako proiektuetan, oso ohikoa da CSS kodea hainbat fitxategitan banatzea, haren mantentze-lanak errazteko. Kasu horretan, nabigatzaileak estilo-orri guztiak deskargatu eta aplikatuko ditu agertzen diren ordenan. Hainbat estilo-orrik elementu beraren propietate bera aldatzen dutenean, kargatzen diren ordenak azken emaitzan eragina izan dezake.
Gehitu CSS bat baino gehiago HTML batean
<head>
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/titulos.css">
</head>
Aurreko adibidearekin jarraituz, demagun honako kode hau dutela:
estilos.css
h1 {
color: blue;
}
titulos.css
h1 {
color: red;
}
Izenburuaren azken kolorea gorria izango da, bigarren estilo-orriak lehenengoa gainidazten duelako. Portaera hori kaskada (cascade) izenez ezagutzen den mekanismoaren parte da, eta aurrerago zehatz-mehatz aztertuko dugu.
Fitxategiak kargatzeko ordena garrantzitsua da.
Ez dago proiektu batek izan behar duen CSS fitxategi kopuru finkorik. Aplikazio txikietan, estilo-orri bakarra nahikoa izan ohi da, baina proiektua handitzen den heinean, ohikoa da kodea hainbat fitxategitan banatzea, haien funtzioaren arabera.
Kargatu bi CSS fitxategi eta egiaztatu ordenaren garrantzia, aurreko ariketan agertzen den bezala.
8.2 Barneko CSS
CSS estiloak zuzenean HTML orri baten barruan idatz daitezke <style> etiketak erabiliz, eta goiburuko <head> atalaren barruan egon behar dute.
HTML+CSS inline
<html>
<head>
<style>
body {
background-color: linen;
}
h1 {
color: maroon;
margin-left: 40px;
}
</style>
</head>
<body>
<!-- ... -->
</body>
</html>
Ez da gomendatzen CSS barnekoa HTML baten barruan erabiltzea.
HTML bateratuak sortzeko sistemak daude (HTML auto-edukiak sortzeko), webgune estatikoak sortzeko, baina garapenean zehar ****ez da CSS HTMLaren barruan erabili behar****.
8.3 CSS estiloak inline
HTML kodearen barruan CSS estiloak erabil daitezke; horiei inline estiloak esaten zaie. Teknika hau oso erabilia zen webaren hasieran, baina ez da erabiltzea gomendatzen, CSS estiloen berrerabilpenaren aurka egiten duelako.
Horrez gain, maketazioaren eta estiloen arteko bereizketaren aurka ere egiten du, eta horrek zaildu egin dezake osagaiak aplikazio bereko atal desberdinetan berrerabiltzea. Hurrengo adibidean inline estilo baten adibidea eta HTML eta CSS bereizita nola egingo litzatekeen ikus daitezke:
HTML+CSS inline
<p style="
color: red;
font-style: italic;
">
Texto
</p>
HTML
<p class="special">
Texto
</p>
CSS
.scpecial {
color: red;
font-style: italic;
}
Lehenengo adibidean, estilo bera duen beste p bat nahi izanez gero, estilo hori berriro idatzi beharko litzateke; bereizketa erabiliz, berriz, klasea jartzea baino ez litzateke beharrezkoa izango. Lehenengo adibidean estilo berri bat gehitu nahi badugu, hainbat lekutan aldatu beharko genuke; bereizketa erabiliz, berriz, CSS estilo-orrian egitea baino ez litzateke beharrezkoa izango.
Ez da gomendatzen inline estiloak erabiltzea.
8.4 CSSren garrantziaren adibideak
CSS estilo-orriek aukera ematen digute web-orri baten itxura erabat aldatzeko, estilo-orria aldatuta. Pentsa dezagun enpresa batek hainbat bezerorentzat online denda-produktu bat duela.
- CSS estiloak inline badaude, bezero bakoitzarentzat estiloak aldatzeak honako hauek ekarriko lituzke:
- Iturburu-kode osoa kopiatzea.
- Inline estiloak aldatzea.
- Ezaugarri berri bat gehitu nahi badugu, bezero bakoitzean aldatu beharko litzateke.
- Inline estiloak berriro aldatzea.
- CSS estiloak HTMLtik bereizita badaude:
- Bezero bakoitzarentzat CSSaren kopia bat egiten da eta estilo propioekin aldatzen da.
- Ezaugarri berri bat gehitu nahi badugu, bezero bakoitzean HTMLa soilik eguneratzen da.
Jarraian, HTML kode beraren adibide bat ikus daiteke, CSS estilo-orri desberdinekin. Adibideak W3Schools webgunetik lortuak dira.
9 CSSren sintaxia
CSSk sintaxi sinplea eta ikasteko nahiko erraza du. Beste programazio-lengoaia batzuek ez bezala, CSSk ez du kontrol-egiturarik, hala nola begiztarik edo baldintzarik (nahiz eta aurrerago aztertuko ditugun funtzioak eta arau aurreratuak badituen). Haren funtzio nagusia HTML elementuak nola erakutsi behar diren adieraztea da.
9.1 CSS araua
Estilo-orri bat CSS arau multzo batek osatzen du. Arau bakoitzak honako hauek adierazten ditu:
- Zer elementu aldatu behar diren.
- Zer propietate aldatu behar diren.
- Zer balio esleitu behar zaion propietate bakoitzari.
Egitura orokorra honako hau da:
Egitura
selector {
propiedad: valor;
}
Adibide erreala
h1 {
color: red;
}
Arau horrek adierazten du <h1> elementu guztiak gorriz erakutsi behar direla.
9.1.1 Hautatzailea
Hautatzaileak adierazten du zein HTML elementuri eragingo dion arauak. Hurrengo taulan adibide gutxi batzuk baino ez dira agertzen, baina eranskinean hautatzaile gisa erabil daitezkeen HTML etiketa guztiak agertzen dira.
| Hautatzailea | Funtzioa |
|---|---|
| h1 | 1. mailako izenburuak |
| h2 | 2. mailako izenburuak |
| p | Paragrafoak |
| ul | Ordenatu gabeko zerrenda |
9.1.2 Propietateak
Propietateek aldatu nahi dugun itxura-alderdia adierazten dute. Ehunka propietate desberdin daude. Gehien erabiltzen direnetako batzuk hauek dira:
| Propietatea | Funtzioa |
|---|---|
| color | Testuaren kolorea |
| background-color | Atzeko planoaren kolorea |
| font-size | Testuaren tamaina |
| font-family | Tipografia |
| width | Zabalera |
| height | Altuera |
| margin | Kanpoko marjina |
| padding | Barneko tartea |
| border | Ertza |
| text-align | Testuaren lerrokatzea |
Propietate bakoitzak balio jakin batzuk soilik onartzen ditu; garrantzitsuenak ikasiko ditugu.
9.1.3 Balioak
Propietate bakoitzak balio bat behar du. Propietatearen arabera, balio hori honako hauetako bat izan daiteke:
| Balioa | Adibidea |
|---|---|
| Kolore bat | color:red; |
| Zenbaki bat | font-size: 20px; |
| Luzera bat | font-size: 2rem; |
| Ehuneko bat | width: 80%; |
| Gako-hitz bat | display: flex; |
| Funtzio bat | width: calc(100% - 50px); |
9.2 Adierazpenak
Propietate batek eta balio batek osatutako bikote bakoitzari adierazpen esaten zaio. Arau berak hainbat adierazpen izan ditzake. Hurrengo adibidean hiru daude:
Adibide erreala
h1 {
color: blue;
font-size: 40px;
text-align: center;
}
Giltzen artean dagoen adierazpen multzoari adierazpen-bloke esaten zaio.
9.3 Iruzkinak
Iruzkinek kodeari informazioa gehitzeko aukera ematen dute, nabigatzaileak informazio hori interpretatu gabe. Lerro bakarrekoak edo hainbat lerrotakoak izan daitezke:
Komentario
/* Estilos generales */
body {
margin: 0;
}
Komentario lerro askotan
/*
Curso: DAW
Fecha: Septiembre de 2026
*/
9.4 Maiuskulen eta minuskulen arteko bereizketa
Bai propietateen izenak, bai gako-hitzak, minuskulaz idatzi behar dira. Nabigatzaile batzuek aldaera jakin batzuk onartzen dituzten arren, beti gomendatzen da lengoaiaren konbentzioei jarraitzea.
9.5 Zuriuneak
CSSk ez ditu kontuan hartzen beharrezkoak ez diren zuriuneak. Hurrengo arauak baliokideak dira.
Ignora espacios
h1 {
color:red;
}
Ignora espacios
h1 {
color:red;
}
Ignora espacios
h1 { color:red; }
Guztiek emaitza bera sortzen dute, baina bigarrena bakarrik da erraz irakurtzeko modukoa.
9.6 Koska (indentation)
Koskatzean, kodea zertxobait eskuinerantz desplazatzen da haren egitura erakusteko. CSSk koska erabili gabe behar bezala funtzionatzen badu ere, koska uniformea erabiltzeak irakurgarritasuna asko hobetzen du. Editore gehienek zeregin hori automatikoki egiten dute. Bi edo lau zuriune erabiltzea aukera dezakegu.
9.7 Puntu eta koma
Adierazpen bakoitza puntu eta koma baten bidez amaitzen da ;. Arau batek hainbat adierazpen dituenean, puntu eta koma nahitaezkoa da.
9.8 Zer gertatzen da errore bat dagoenean?
CSSren ezaugarri oso garrantzitsu bat da nabigatzaileak estilo-orria interpretatzen jarraitzen saiatzen direla, erroreak aurkitzen badituzte ere.
Errore
h1 {
color: blue;
colr: red;
font-size: 40px;
}
Kasu honetan:
- color: blue; behar bezala aplikatuko da.
- colr: red; ez ikusi egingo zaio.
- font-size: 40px; normaltasunez aplikatuko da berriro.
Portaera horri esker, errore txikiek ez dute orria bistaratzea eragozten.
9.9 Propietateen ordena
CSSk ez du propietateak ordena jakin bati jarraituz idaztera behartzen. Hurrengoek emaitza bera sortzen dute:
Ordena
h1 {
color: blue;
margin: 20px;
font-size: 30px;
}
Ordena
h1 {
font-size: 30px;
margin: 20px;
color: blue;
}
Hala ere, proiektu profesionaletan, normalean ordena jakin bati jarraitzen zaio irakurketa errazteko.
- Posizionamendua.
- Kaxa-eredua.
- Tipografia.
- Koloreak.
- Animazioak.
Beti irizpide bera mantentzeak kodearen mantentze-lanak hobetzen ditu.
Garapen-talde batean formatu, ordena eta koska bera erabili beharko lirateke.
10 CSS hautatzaileak
CSS arau batek adierazi behar du zein HTML elementuri aplikatu behar zaion. Horretarako, hautatzaileak erabiltzen dira. Hautatzailea CSS arau baten zatia da, eta aldatu nahi ditugun elementuak identifikatzeko aukera ematen du.
Hautatzaileak CSSren oinarrizko ataletako bat dira, HTML dokumentu bateko elementu desberdinei estilo desberdinak aplikatzeko aukera ematen baitute, eta hainbat ataletan bereiz daitezke.
10.1 Mota-hautatzailea
Mota-hautatzaileak mota jakin bateko HTML elementu guztiak hautatzeko aukera ematen du.
HTML
<p>Primer párrafo.</p>
<p>Segundo párrafo.</p>
<p>Tercer párrafo.</p>
CSS
p {
color: blue;
}
Aurreko adibidea kontuan hartuta, CSS-k <p> motako elementu guztiak hautatzen ditu, testuari kolore urdina gehituz.
Mota hautatzaileak sinpleak dira, baina oso orokorrak izan daitezke behar denean estilo desberdinak aplikatu elementu beraren mota berean.
10.2 Hautatzaile unibertsala
Hautatzaile unibertsala izartxo batez (*) irudikatzen da eta dokumentuko elementu guztiak hautatzen ditu.
CSS
* {
margin: 0;
box-sizing: border-box;
}
Hautatzaile unibertsala maiz erabiltzen da doikuntza orokor txikiak egiteko. Nahiz eta erabilgarria izan, ez da komeni gehiegikeriaz erabiltzea elementu guztiei propietate asko aplikatzeko, erredundantzia sortu eta mantentzea zaildu ahal baitu.
Sortu HTML bat h1 eta p elementuekin eta sortu CSS bat hautatzaile unibertsala erabiliz, marjina kendu eta elementu guztiei ertza gehitzeko.
10.3 Klase hautatzailea
Klase hautatzaileek estiloak aplikatu ahal dituzte elementu jakin batzuei, mota bereko elementu guztiak eragin gabe. HTMLn class atributua erabiltzen da.
HTML
<h1 class="importante grande">
Izenburu garrantzitsua
</h1>
<p class="importante">
Testu hau garrantzitsua da.
</p>
<p class="grande">
Testu hau handia da.
</p>
CSS
.importante {
color: red;
}
.grande {
font-size: 50px;
}
CSSn, klase bat hautatzeko puntu bat (.) erabiltzen da, klasearen izena jarraituta. Klase bat hainbat aldiz erabil daiteke eta elementu desberdinetan, beraz, hori kontuan hartu behar da, baina aurrerago hitz egingo dugu.
Bestalde, class atributua zuriunez banatutako klase anitz eduki ahal ditu, beraz, bi klaseen estiloak jasoko ditu. Modu honetan estiloak berrerabiltzeko eta konbinatzeko aukera dugu gure beharren arabera.
Sortu HTML bat klaseak eta konbinazioak dituzten elementuekin eta sortu CSS bat klase berrerabilgarriak eta hautatzaile unibertsala erabiliz.
10.4 Identifikatzaile hautatzailea
HTMLk id atributua ere badu, eta behin bakarrik erabili behar da HTML dokumentu bakoitzean. Elementu bat bere identifikatzailearen bitartez hautatzeko # karakterea erabiltzen dugu:
HTML
<h1 id="titulo-principal">
Nire web orria
</h1>
CSS
#titulo-principal {
color: blue;
}
Hautatzailea id titulo-principal den elementuari aplikatuko zaio.
Sortu HTML bat identifikatzaileak dituzten elementuekin eta sortu CSS propioak.
10.5 Atributuaren arabera hautatzea
CSS-k HTML atributu jakin batzuk dituzten elementuak hautatzeko aukera ematen du. Adibidez, type atributua duten elementu guztiak hauta ditzakegu:
HTML
<input type="text">
<input type="email">
<input type="password">
CSS
input[type] {
border: 1px solid black;
}
input[type="email"] {
background-color: lightblue;
}
Atributuaren balio zehatz bat ere hauta dezakegu, adibidean type="email". Kasu honetan, posta elektronikoaren eremua bakarrik izango du atzeko plano urdin argia.
Atributu hautatzaileak bereziki erabilgarriak dira HTML elementu baten ezaugarrietara lotutako estiloak aplikatu behar direnean.
Beste adibide bat target atributua duten esteketarako.
HTML
<a href="http://google.com"
target="_self">
link
</a>
<a href="http://google.com"
target="_blank">
link
</a>
CSS
a[target] {
font-weight: bold;
}
a[target="_blank"] {
color: red;
}
Sortu HTML bat atributuak dituzten elementuekin eta sortu CSS propioak.
10.6 Hautatzaileak taldekatu
Arau berdinak hainbat hautatzaileri aplikatu ahal dizkiegu komaz banatuta. Taldekatzeak kodea errepikatzea ekiditen du.
Hautatzaileak taldekatu
h1,
h2,
h3 {
font-family: sans-serif;
}
Hautatzaileak taldekatu
h1, h2, h3 {
font-family: sans-serif;
}
10.7 Hautatzaile beherakoiak
CSS-k beste elementu batzuen barruan dauden elementuak hautatzeko aukera ematen du. Bakarrik <article> elementuaren barruan dauden paragrafoak hauta ditzakegu.
HTML
<article>
<p>Lehen paragrafoa.</p>
<p>Bigarren paragrafoa.</p>
</article>
<article>
<div>
<p>
Testua.
</p>
</div>
</article>
<p>Kanpoko paragrafoa.</p>
CSS
article p {
color: blue;
}
article eta p arteko hutsuneak adierazten du <article> elementuaren ondorengo <p> elementuak hautatzen ari garela.
Emaitza hau izango da:
- Lehen paragrafoa → urdina.
- Bigarren paragrafoa → urdina.
- Kanpoko paragrafoa → estilo hau gabe.
- Testua → urdina.
Hautatzaile beherakoiak ez du seme zuzenetara mugatzen, ondorengo guztiei aplikatzen zaie.
Hautatzaile beherakoiak ez du seme zuzenetara mugatzen, ondorengo guztiei aplikatzen zaie.
10.8 Seme zuzenen hautatzailea
Batzuetan ez dugu edozein ondorengo hautatu nahi, baizik eta seme zuzenak bakarrik. Horretarako > sinboloa erabiltzen da.
HTML
<article>
<p>Paragrafo zuzena.</p>
<div>
<p>Div baten barruan.</p>
</div>
</article>
CSS
article > p {
color: blue;
}
Modu honetan lehen paragrafoa bakarrik hautatzen da, bigarren paragrafoa ez delako <article> elementuaren seme zuzen.
Sortu HTML bat CSS batekin, ondorengoak eta seme zuzenak bereizteko.
10.9 Hurbileko anai-arrebaren hautatzailea
CSS-k beste elementu baten ondoren berehala agertzen diren elementuak hautatzeko aukera ematen du. Horretarako + sinboloa erabiltzen da.
HTML
<h2>Izenburua</h2>
<p>Lehen paragrafoa.</p>
<p>Bigarren paragrafoa.</p>
CSS
h2 + p {
color: blue;
}
Arau honen bidez lehen paragrafoa bakarrik hautatzen da, bigarrena ez.
10.10 Ondorengo anai-arrebak hautatzea
Elementu baten ondoren agertzen diren anai-arreba guztiak hautatzeko ~ erabiltzen da.
HTML
<h2>Izenburua</h2>
<p>Lehen paragrafoa.</p>
<p>Bigarren paragrafoa.</p>
<div>Beste elementu bat.</div>
<p>Hirugarren paragrafoa.</p>
CSS
h2 ~ p {
color: blue;
}
Arau honen bidez <h2> elementuaren ondoren dauden <p> elementu guztiak hautatzen dira. Beraz, hiru paragrafoak hautatuko dira.
Sortu HTML bat CSS batekin, hurbileko anai-arrebak eta ondorengo guztiak bereizteko.
10.11 Pseudo-klaseak
Pseudo-klaseak elementuak egoera edo baldintza baten arabera hautatzeko aukera ematen dute, eta bi puntu bidez irudikatzen dira (:). Adibide batzuk:
- :hover: Erabiltzaileak saguaren erakuslea elementuaren gainean jartzen duenean.
- :focus: Elementu batek fokua duenean.
- :active: Elementu bat aktibatzen ari den momentua adierazten du.
- :visited: Erabiltzaileak jadanik bisitatu dituen estekak.
Sortu HTML bat CSS batekin pseudo-klase hauek erabiltzeko.
10.12 Pseudo-elementuak
Pseudo-elementuak elementu baten zati jakin batzuk hautatzeko edo hura lotutako edukia sortzeko aukera ematen dute. Normalean bi puntu bidez irudikatzen dira (::).
HTML
<p class="aviso">
Eremu hau derrigorrezkoa da.
</p>
CSS
p::first-letter {
font-size: 50px;
}
p::first-line {
font-weight: bold;
}
.aviso::before {
content: "⚠ ";
}
.enlace::after {
content: " →";
}
Sortutako arauek honakoak egiten dituzte:
- Paragrafo bakoitzaren lehen letra aldatzen du.
- Testuaren lehen lerroa aldatzeko aukera ematen du.
- Elementuaren edukia baino lehen edukia txertatzeko aukera ematen du.
- ::after modu antzekoan funtzionatzen du, baina edukia ondoren txertatzen du.
::before eta ::after bidez sortutako edukia dokumentuaren irudikapen bisualaren parte da, baina ez du erabiltzaileak behar duen HTML edukia ordezten. Ez ditugu erabiliko informazio funtsezkoa sartzeko, pertsona guztientzat edo laguntza-teknologientzat eskuragarri egon behar dena.
Sortu aurreko adibidea eta barneratu pseudo-elementuak.
10.13 Hautatzaileen konbinazioa
Hautatzaileak konbinatu daitezke arau askoz zehatzagoak sortzeko. Adibidez:
HTML
<article class="destacado">
<p>Urdina izango da.</p>
</article>
CSS
article.destacado p {
color: blue;
}
Arau honek honako baldintzak dituen elementuaren barruan dauden paragrafoak hautatzen ditu:
- <article> da.
- destacado klasea du.
Klaseak ere konbinatu ditzakegu:
HTML
<button class="boton">
Onartu
</button>
<button class="boton importante">
Ezabatu
</button>
CSS
.boton.importante {
background-color: red;
}
Arau honek bi klaseak dituen elementuak bakarrik hautatzen ditu:
10.14 Hautatzaileen laburpena
| Hautatzailea | Adibidea | Hautatzen du |
|---|---|---|
| Unibertsala | * | Elementu guztiak |
| Mota | p | Mota horretako elementu guztiak |
| Klasea | .aviso | aviso klasea duten elementuak |
| ID | #menu | id="menu" duen elementua |
| Atributua | input[type="email"] | Email motako input-ak |
| Beherakorra | article p | <article> barruan dauden <p> |
| Seme zuzena | article > p | <article> elementuaren seme zuzenak |
| Hurbileko anai-arrebak | h2 + p | Berehala ondoren datorren <p> |
| Ondorengo anai-arrebak | h2 ~ p | Anai-arreba ondorengo <p> |
| Pseudo-klasea | a:hover | Kurtsorea gainean duen esteka |
| Pseudo-elementua | p::first-letter | Paragrafo baten lehen letra |
10.15 Praktika onak
CSS hautatzaileak idatzean zenbait gomendio jarraitu behar dira.
- Erabili klaseak estilo berrerabilgarrietarako.
- Saihestu hautatzaile oso konplexuak, mantentzea zaildu baitute.
- Erabili izen deskribatzaileak klase eta identifikatzaile bakarretarako.
11 Espezifikotasuna
Aurreko atalean ikusi dugu CSSk hainbat hautatzaile mota erabiltzeko aukera ematen duela HTML elementuak hautatzeko. Batzuetan, CSS arau batzuek elementu berean eragin dezakete eta propietate bera alda dezakete. Adibidez:
HTML
<p id="mensaje" class="importante">
Hola mundo
</p>
css
p {
color: blue;
}
.importante {
color: green;
}
#mensaje {
color: red;
}
Aurreko hiru arauek elementu berean eragiten dute, eta hirurek color propietatearen balioa ezartzen saiatzen dira. Horrelako kasuetan, hainbat arau daudenean, espezifikotasuna CSSk erabiltzen duen mekanismoa da hainbat arau elementu berari aplika dakizkiokeenean lehentasuna zein arauk duen zehazteko. Testua gorria izango da, #mensaje hautatzaileak beste bi hautatzaileek baino espezifikotasun handiagoa duelako.
11.1 Hautatzaile motak eta espezifikotasuna
Hautatzaile baten espezifikotasuna erabilitako hautatzaile motaren araberakoa da batez ere. Lehentasun handienetik txikienera, honako sailkapen hau ezar dezakegu:
- Inline estiloak.
- Identifikatzaileak (#id).
- Klaseak, atributuak eta pseudo-klaseak.
- Elementuak eta pseudo-elementuak.
Espezifikotasuna ulertzeko, hautatzaile bat lau balioren bidez adieraz dezakegu: A B C D. Balio horiek puntuazio bat balira bezala irudika ditzakegu. Ikus ditzagun honako adibide hauek:
CSS
p {
color: blue;
}
CSS
.mensaje {
color: green;
}
CSS
#mensaje {
color: red;
}
Puntuazioak honela geratuko lirateke:
- 0 0 0 1: elementu motako hautatzaile bat duelako.
- 0 0 1 0: klase bat delako.
- 0 1 0 0: identifikatzaile bat delako.
Garrantzitsua da ulertzea espezifikotasun-balioak ez direla puntuazio arrunt bat bezala batzen. Ezkerretik eskuinera alderatzen dira. Adibidez, 0 1 0 0 > 0 0 20 0; lehenengoa espezifikoagoa da, nahiz eta bigarren hautatzaileak 20 klase izan, identifikatzailearen hautatzaileak klaseek baino lehentasun handiagoa duelako. Badira kalkulagailuak balioa kalkulatzeko eta arau desberdinak alderatzeko, bat bestea baino espezifikoagoa zein den jakiteko.
Sortu HTML bat hiru p elementurekin eta gehitu estiloak espezifikotasunaren arabera.
11.2 Hautatzaileen konbinazioa
Hautatzaileak konbinatzen ditugunean, espezifikotasuna ere metatu egiten da. Aurretik azaldutako arauari jarraituz, azter ditzagun honako adibide hauek:
CSS
article p {
color: blue;
}
CSS
article .mensaje {
color: green;
}
Puntuazioak honela geratuko lirateke:
- 0 0 0 2: bi mota-hautatzaile dituelako.
- 0 0 1 1: mota-hautatzaile bat eta klase-hautatzaile bat dituelako. Beraz, aurrekoa baino espezifikotasun handiagoa du.
11.3 Hainbat klase
Hautatzaile batek hainbat klase baditu, guztiek hartzen dute kontuan espezifikotasunerako.
CSS
.mensaje.importante {
color: red;
}
CSS
.mensaje {
color: blue;
}
Lehenengo araua bigarrena baino espezifikoagoa da.
11.4 Atributu-hautatzaileak
Atributu-hautatzaileek klaseen garrantzi bera dute.
CSS
input[type="email"] {
border-color: blue;
}
0 0 1 1 puntuazioa du, honako hauek dituelako:
- Mota-hautatzaile bat: input
- Atributu-hautatzaile bat: [type="email"]
11.5 Pseudo-klaseak
Pseudo-klaseak ere klase baten moduan hartzen dira kontuan espezifikotasunari dagokionez.
CSS
a:hover {
color: red;
}
0 0 1 1 puntuazioa du, honako hauek dituelako:
- Mota-hautatzaile bat: a
- Atributu-hautatzaile bat: :hover
11.6 Pseudo-elementuak
Pseudo-elementuak mota-hautatzaile gisa hartzen dira kontuan.
CSS
p::first-letter {
font-size: 30px;
}
0 0 0 2 puntuazioa du, honako hauek dituelako:
- Mota-hautatzaile bat: p
- Pseudo-elementu bat: ::first-letter
11.7 Hautatzaile unibertsala
Hautatzaile unibertsalak ez du espezifikotasunik ematen. Gauza bera gertatzen da > + ~ eragileekin. Elementu horiek hautatzaileen arteko erlazioak ezartzeko balio dute, baina ez dute espezifikotasuna handitzen.
11.8 Espezifikotasuna eta ordena
Espezifikotasuna ez da CSSk erabiltzen duen irizpide bakarra. Bi arauk espezifikotasun bera dutenean, agertzeko ordenak zein aplikatzen den zehaztu dezake. Hurrengo adibidean, bi hautatzaileek puntuazio bera dute eta elementu mota berari eragiten diote:
CSS
p {
color: blue;
}
p {
color: red;
}
Puntuazio bera izan arren, aplikatzen den araua bigarrena da, ondoren agertzen delako; beraz, testua gorria izango da.
11.9 Adierazpen bat !important bidez behartzea
CSSk !important izeneko tresna berezi bat eskaintzen du, eta lehentasun berezia du kaskadaren mekanismoaren barruan. Erabil daiteke adierazpen jakin batek beste adierazpen arrunten gainetik lehentasuna izan dezan behartzeko.
Aurreko adibidea kontuan hartuta, lehenengo arauari !important gehituz gero, lehentasuna hartzen du eta bigarren araua baliogabetzen du:
CSS
p {
color: blue !important;
}
p {
color: red;
}
!important asko daudenean, zaila bihurtzen da jakitea zein arau aplikatuko den azkenean; beraz, ez da gomendatzen estilo-arazoak konpontzeko ohiko irtenbide gisa erabiltzea.
!important erabiltzea praktika txartzat hartzen da.
12 Herentzia
Herentzia CSSren oinarrizko mekanismoetako bat da. Elementu batean definitutako CSS propietate jakin batzuk haren ondorengo elementuei automatikoki transmititzeko aukera ematen du. Herentziari esker, ez da beharrezkoa propietate batzuk orrialde bateko elementu guztietan banaka ezartzea.
HTML
<body>
<h1>Título</h1>
<p>Primer párrafo.</p>
<div>
<p>Segundo párrafo.</p>
</div>
</body>
CSS
body {
color: blue;
}
div {
color: red;
}
Aurreko adibidearekin, ondorengo elementuetako testuek guraso-elementuan zehaztutako kolorea heredatuko dute. Bestalde, ikus daitekeen bezala, elementu batek berezko balioa izan dezake hereda daitekeen propietate baterako, eta bere herentzia propioa ere has dezake, div arauarekin gertatzen den bezala.
Herentziak beharrezkoa den CSS kode kopurua murrizteko aukera ematen du, eta orrialde baterako estilo orokorrak sortzea errazten du.
12.1 Propietate guztiak ez dira heredatzen
Garrantzitsua da kontuan izatea CSS propietate guztiak ez direla heredagarriak. Adibidez, color normalean heredatzen da, baina kaxa-ereduarekin lotutako propietateak, hala nola margin, normalean ez dira heredatzen.
Beraz, honako hauen artean bereizi behar dugu:
- Propietate heredagarriak: lehenespenez, guraso-elementuaren kalkulatutako balioarekin ezartzen dira. Testuarekin lotutako propietateak dira, hala nola color, font-family, font-size, font-style, line-height, text-align eta visibility.
- Heredagarriak EZ diren propietateak: lehenespenez, propietatearen hasierako balioarekin ezartzen dira. Kaxa-ereduarekin edo layout-arekin lotutako propietateak dira, hala nola border, background, margin, padding, width eta height.
Propietate bat heredagarria den jakiteko, MDN edo W3C dokumentazioan Inherited definizioa ikus dezakegu; True bada, heredatu egiten da.
12.2 Herentzia behartzea inherit erabiliz
CSSk inherit gako-hitza eskaintzen du, propietate batek guraso-elementutik heredatutako balioa erabili behar duela esplizituki adierazteko.
Hitz hori erabiliz, berez heredatuko ez liratekeen propietateak ere heredatu ahal izango ditugu.
HTML
<div>
<p>Primer párrafo.</p>
<p>Segundo párrafo</p>
</div>
CSS
div {
border: 2px solid red;
}
p {
border: inherit;
}
Sortu HTML bat automatikoki heredatzen diren propietateekin eta herentzia behartuaren bidez heredatzen diren beste batzuekin.
12.3 initial reset gisa
initial reset bat balitz bezala defini genezake, CSSren arabera propietatearentzat definitutako hasierako balioa ezartzen baitu.
Demagun honako adibide hau:
HTML
<div>
<h1>Título</h1>>
<p>primer párrafo</p>
</div>
CSS
div {
color:red
}
h1 {
color: initial;
}
div elementuan kolore bat ezartzen dugu, eta herentziaren bidez haren azpian dauden elementu guztiek kolore hori izan beharko lukete; baina h1 arauan kolorea lehenetsitako baliora itzultzen dugu.
Sortu heredatutako propietateak dituen HTML bat, baina initial erabiliz ezar ez daitezen.
12.4 unset gako-hitza
unset gako-hitzak bi portaera konbinatzen ditu.
- Propietatea heredagarria bada, unset honela jokatzen du: inherit
- Propietatea heredagarria ez bada, initial bezala jokatzen du.
CSS
p {
color: unset;
margin: unset;
}
Aurreko adibidean bi jokabide-moduak ditugu:
- color propietate heredagarria denez, unset erabiltzeak heredatutako balioa erabiltzea eragingo du.
- margin-erako, lehenetsitako balioa erabiliko da.
12.5 revert gako-hitza
revert gako-hitzak propietateak aurreko jatorri-arauak erabiliz izango zukeen baliora itzultzeko aukera ematen du, uneko adierazpena aplikatzen jarraitu beharrean.
Haren funtzionamendua kaskadarekin eta CSS arauen jatorri desberdinekin lotuta dago.
Zenbait kasutan erabilgarria izan daitekeen arren, oraingoz ez dugu erabiliko; hala ere, komeni da MDN webgunean adibide bat ikustea.
13 Kaskada
CSS izena Cascading Style Sheets esamoldetik dator, gaztelaniaz hojas de estilo en cascada. Kaskada hitzak CSSk erabiltzen duen mekanismoari egiten dio erreferentzia, elementu berari eragiten dioten hainbat arau daudenean zein estilo aplikatu behar diren zehazteko.
Web-orri batean, ohikoa da arau desberdinek propietate bererako balioak ezarri ahal izatea.
CSS
p {
color: blue;
}
p {
color: red;
}
Bi arauek <p> elementuei eragiten diete, eta biek color propietaterako balio bat ezartzen dute. CSSk bi balioetatik zein erabiliko duen erabaki behar du. Kaskada egoera horiek ebaztea ahalbidetzen duen arau multzoa da.
13.1 Kaskadak ez du esan nahi “azken arauak irabazten duela”
Agertze-ordena kaskadak erabiltzen duen irizpideetako bat baino ez da; beraz, kontuz ibili behar da eta ez da pentsatu behar azken araua beti zuzena izango denik.
Gogoratu behar da aplikatzen den araua espezifikotasun handiena duena dela.
13.2 Oinarrizko hiru ideiak
Kaskada ulertzeko, aurretik ikusi ditugun kontzeptuak bereizi behar dira:
- Espezifikotasuna: elementu batekin hainbat arau bat datozenean, zein hautatzailek duen lehentasun handiagoa zehazten du.
- Herentzia: propietate jakin batzuk guraso-elementuetatik ondorengo elementuetara igarotzea ahalbidetzen du.
- Kaskada: hainbat adierazpen posible daudenean, azkenean zein adierazpen erabiliko den zehazten du.
13.3 Estilo-orrien jatorria
CSS arauak hainbat lekutatik etor daitezke. Modu sinplifikatuan, honako hauek bereiz ditzakegu:
- Nabigatzailearen estilo-orriak.
- Erabiltzaileak emandako estilo-orriak.
- Orriaren egilearen estilo-orriak.
Web-orriak ohiko moduan garatzean, batez ere egilearen estiloekin lan egingo dugu, hau da, guk geuk idazten ditugun CSSekin.
13.4 Kaskada-sistema kontrolatzea
CSSk eboluzionatu egin du, eta gaur egun kaskada kontrolatzeko mekanismo osagarriak daude. Horietako bat kaskada-geruzak dira, @layer erabiliz.
Geruzek CSS arauak lehentasun-maila desberdinetan antolatzeko eta, ondoren, arauak geruza bakoitzaren barruan kokatzeko aukera ematen dute. Hori bereziki erabilgarria da proiektu handietan, CSSaren zati desberdinak liburutegi edo modulu desberdinetatik etor daitezkeenean.
CSS
@layer main {
p {
color: blue;
}
}
@layer componentes {
p {
color: red;
}
}
Aurreko adibidean, “componentes” geruza “main” geruza baino lehentasun handiagokoa da, ondoren deklaratzen delako; beraz, testuaren kolorea gorria izango da. Geruzen ordena ere zehaztu dezakegu, gero deklarazioen ordena edozein izanda ere.
Geruzen ordena
@layer componentes, main;
Geruzen ordena
@layer componentes;
@layer main;
Orain “main” geruza da lehentasun handiagoa duena (deklarazioan ondoren gehitu delako), eta, beraz, haren estiloak aplikatuko dira espezifikotasun bera dagoenean.
Sortu geruzak dituen CSS bat eta aldatu deklarazioen ordena haien estiloak aplikatzeko.
13.5 Espezifikotasuna eta ordena
Orain arte ikusitako guztia kontuan hartuta, lehentasun handiena duten arauak espezifikotasunaren arabera zehazten dira; baina espezifikotasun bera dutenean, azkenik deklaratzen den arauak irabazten du, betiere layers zehaztapenik tartean ez badago, horrek ordena alda baitezake.
13.6 Herentziaren eta kaskadaren arteko aldea
Herentzia eta kaskada erlazionatutako kontzeptuak dira, baina ez dira gauza bera. Herentziak propietate jakin batzuk guraso-elementu batetik haren ondorengo elementuetara igarotzea ahalbidetzen du.
Kaskadak, berriz, hainbat CSS adierazpen aplika daitezkeenean zein adierazpenek duen lehentasuna zehazten du; beraz, espezifikotasunaren bidez zehaztu beharko da zeinek duen lehentasuna.
Honela laburbil dezakegu:
| Kontzeptua | Funtzioa |
|---|---|
| Herentzia | Zenbait propietate guraso-elementuetatik ondorengo elementuetara transmititzen ditu |
| Kaskada | Zein adierazpenek duen lehentasuna erabakitzen du |
| Espezifikotasuna | Hainbat arau bat datozenean, zein hautatzailek duen lehentasuna zehazten laguntzen du |
14 Neurketa-unitateak
Tamainak, distantziak eta dimentsioak kontrolatzen dituzten CSS propietateek neurketa-unitateak erabili behar dituzte.
Tamainak jartzen
p {
font-size: 20px;
}
Kasu honetan:
- font-size letra-tipoaren tamaina adierazten du.
- 20 zenbakizko balioa da.
- px neurketa-unitatea da.
Unitateek nabigatzaileari elementu batek zenbat neurtu behar duen, zenbat espazio okupatu behar duen edo elementu desberdinen artean zer distantzia egon behar duen adierazteko aukera ematen diote.
CSS unitateak, batez ere, honela sailka daitezke:
- Unitate absolutuak: beste elementu baten tamainaren araberakoak ez diren neurriak adierazten dituzte zuzenean.
- Unitate erlatiboak: dokumentuaren ezaugarri baten, guraso-elementuaren, letra-tipoaren tamainaren edo nabigatzailearen leihoaren tamainaren araberakoak dira. Unitate erlatiboak bereziki garrantzitsuak dira pantaila-tamaina desberdinetara egokitzen diren interfazeak sortzeko.
14.1 Unitate absolutuak
Unitate absolutu nagusiak hauek dira:
| Unitatea | Esanahia |
|---|---|
| px | CSS pixela |
| cm | Zentimetroa |
| mm | Milimetroa |
| in | Hazbetea |
| pt | Puntua |
| pc | Pika |
| Q | 1/40 cm |
Ohiko web-garapenean, px da alde handiz gehien erabiltzen den unitate absolutua.
14.1.1 CSS pixela
px unitateak CSS pixel bat adierazten du. Garrantzitsua da CSS pixel bat pantailako pixel fisiko batekin nahitaez ez nahastea, gailu modernoek pixelen dentsitate oso handia izan baitezakete.
Beraz, px CSS unitate gisa ulertu behar da, eta ez besterik gabe “pantailako puntu fisiko bat” bezala. Oso erabilgarria izan ohi da tamaina jakin batzuk zehaztasunez kontrolatu nahi ditugunean, eta ohiko erabilerak hauek dira:
- Ertzak.
- Ikonoak.
- Itzalak.
- Tarte txikiak.
- Kontrol zehatza behar duten tamainak.
14.1.2 Unitate fisikoak
CSSk unitate fisikoak ere eskaintzen ditu, hala nola cm, mm, in edo pt. Unitate horiek bereziki interesgarriak izan daitezke inprimaketarekin lan egiten denean.
Unitate fisikoak
@media print {
.pagina { /* A4 */
width: 21cm;
min-height: 29.7cm;
}
}
Pantailatan unitate fisikoak erabiltzeak ez du zentzurik.
14.2 Unitate erlatiboak
Luzera-unitate erlatiboek luzera bat beste luzera-propietate batekiko erlazioan zehazten dute. Luzera-unitate erlatiboak hobeto egokitzen dira errendatze-euskarri desberdinetara.
| Unitatea | Esanahia |
|---|---|
| em | Elementuaren letra-tipoaren tamainarekiko erlatiboa (2em uneko letra-tipoaren tamainaren 2 bider da) |
| rem | Erro-elementuaren letra-tipoaren tamainarekiko erlatiboa |
| ex | Uneko letra-tipoaren x-altuerarekiko erlatiboa (gutxi erabiltzen da) |
| ch | Uneko letra-tipoaren “0” (zero) karakterearen zabalerarekiko erlatiboa |
| vw | Ikuspegi-leihoaren zabaleraren %1arekiko erlatiboa |
| vh | Ikuspegi-leihoaren altueraren %1arekiko erlatiboa |
| % | Guraso-elementuarekiko erlatiboa |
vw, vh, vmin eta vmax neurriek nabigatzailearen leihoa hartzen dute kontuan. Leihoak 50 cm-ko zabalera izango balu, orduan 1vw = 0.5cm izango litzateke.
14.2.1 em unitate erlatiboa
em unitatea letra-tipoaren tamainarekin lotutako unitate erlatiboa da. Nabigatzaileek 16 px-ko tamaina lehenetsia dute, eta erabiltzaileak alda dezake (adibidez, ikusmen-arazoengatik).
Adibidez, honako hau erabiltzen badugu:
Unintate erlatiboa
p {
font-size: 20px;
margin: 2em;
}
2em balioa adierazitako tamainarekin lotuta dago, eta, beraz, 40px izango da. Baina lehenengo araua adierazten ez bada, lehenespenez nabigatzailearen balioa hartzen da, eta, beraz, 32px izango dira.
Egiaztatu em unitatearen balio erlatiboa:
- CSSn letra-tipoaren tamaina adieraziz.
- Nabigatzailearen balio lehenetsia erabiliz.
- Bilatu nabigatzailearen konfigurazioa, aldatu 32px-ra eta egiaztatu aldaketak.
body elementuan letra-tipoaren tamaina adierazten badugu, ondoren em erabil dezakegu gainerako tamainak erlatiboak egiteko.
Tamainuak jartzen
body {
font-size: 16px;
}
h1 {
font-size: 2em;
}
14.2.1.1 em unitatearen metaketaren arazoa
em unitatearen ezaugarri garrantzitsu bat da elementuak habiaratuta daudenean metatu egin daitekeela. Aztertu hurrengo adibidea:
HTML
<div>
Texto
<div>
Texto interior
</div>
</div>
CSS
body {
font-size: 16px;
}
div {
font-size: 1.5em;
}
Zer tamaina izango du “barneko testuak”?
Bigarren <div> elementuak bere gurasoaren letra-tipoaren tamaina erabiltzen du erreferentzia gisa; gurasoa beste <div> bat da, eta horrek, aldi berean, 16px-etik abiatutako letra-tipo erlatiboa du. Emaitza honako hau izango litzateke:
- Jatorrizko tamaina: 16px
- Lehenengo <div>: 16x1.5 = 24px
- Bigarren <div>: 24x1.5 = 36px
Hori erabilgarria izan daiteke zenbait kasutan, baina tamainen kontrola ere zaildu dezake.
em unitatea erlatiboa eta metagarria da, eta horrek arazoak sor ditzake.
Egin aurreko adibidea eta aztertu emaitza.
14.2.2 rem unitate erlatiboa
rem unitatea letra-tipoaren tamainarekiko erlatiboa ere bada, baina dokumentuaren erro-elementua hartzen du erreferentziatzat. rem unitatea root em-etik dator, eta HTML dokumentuaren erroa normalean <html> elementua da.
HTML
<h1>Título 1</h1>
<div>
<h1>Título 2</h1>
</div>
CSS
html {
font-size: 16px;
}
div {
font-size: 2rem;
}
h1 {
font-size: 2rem;
}
Zein tamaina izango dute h1 elementuek?
Egin aurreko adibidea eta aztertu emaitza.
rem-ren abantaila em-rekiko da tamainen eskala modu erraz eta argian sortzeko aukera ematen duela.
CSS
html { font-size: 16px; }
h1 { font-size: 2rem; }
h2 { font-size: 1.5rem; }
p { font-size: 1rem; }
small { font-size: 0.875rem; }
Tamainen arteko erlazioa erreferentzia bakar bati dagokionez mantentzen da, eta horrek eskala orokorra geroago aldatzea errazten du.
14.2.3 ch unitate erlatiboa
ch unitatea erabilitako letra-tipoaren 0 karakterearen zabalerarekin lotuta dago. Adibidez:
CSS
p {
max-width: 60ch;
}
Horri esker, testu-lerro baten zabalera gutxi gorabehera mugatu daiteke. Bereziki erabilgarria da testu luzeen irakurgarritasuna hobetzeko. Horrela, paragrafoek lerro luzeegiak izatea saihesten dugu eta izango duten tamaina kontrolatzen dugu.
14.2.4 ex unitate erlatiboa
ex unitatea uneko letra-tipoaren x letraren altuerarekin lotuta dago. Adibidez:
CSS
.elemento {
height: 5ex;
}
Erabilera askoz ere urriagoa da em, rem edo ch unitateena baino.
Ohiko garapenetarako, haren existentzia ezagutzea nahikoa izan daiteke, aldizka erabili beharrik gabe.
14.2.5 Ehunekoak
% sinboloak unitate erlatibo bat adierazten du, eta haren balioa erabiltzen den testuinguruaren araberakoa da. Propietate askotan, ehunekoa edukiontzi-elementua erreferentzia gisa erabiliz kalkulatzen da.
HTML
<div class="contenedor">
<div class="caja"></div>
</div>
CSS
.contenedor {
width: 800px;
}
.caja {
width: 50%;
}
.contenedor elementuak 800px-eko tamaina finkoa du, eta haren barruko kutxak dagokion erreferentzia-tamainaren %50eko zabalera du, hau da, erdia.
Ehunekoak oso erabilgarriak dira diseinu moldagarriak sortzeko.
Ehuneko baten esanahi zehatza erabiltzen den propietatearen araberakoa da.
CSS
.caja {
padding: 10%;
}
Aurreko propietatea ez da zehazki modu berean interpretatzen; beraz, komeni da dokumentazioa irakurtzea.
Ehunekoaren erabilera propietate zehatzaren eta testuinguruaren araberakoa da.
14.2.6 viewport-arekin lotutako unitateak
CSSk nabigatzailearen leihoaren tamainarekiko erlatiboak diren unitateak ere eskaintzen ditu. viewport, modu sinplifikatuan, orriaren eremu ikusgaia da. Harekin lotutako unitate tradizionalak hauek dira:
- vw: viewport width esan nahi du eta viewport-aren zabaleraren %1 adierazten du; beraz, 100vw viewport-aren zabaleraren %100 da.
- vh: viewport height esan nahi du eta viewport-aren altueraren %1 adierazten du; beraz, 100vh viewport-aren altueraren %100 da.
CSS
.elemento {
width: 100vw;
height: 100vh;
}
Hala ere, benetako aplikazioetan ez da beti beharrezkoa zabalera adierazteko 100vw erabiltzea, arazoak sor baititzake desplazamendu-barrak agertzen direnean.
Beste unitate batzuk ere badaude, dokumentazioan azaltzen direnak.
| Unit | Relative to |
|---|---|
| dvh | 1% of the dynamic viewport’s height. |
| dvw | 1% of the dynamic viewport’s width. |
| lvh | 1% of the large viewport’s height. |
| lvw | 1% of the large viewport’s width. |
| svh | 1% of the small viewport’s height. |
| svw | 1% of the small viewport’s width. |
| vb | 1% of viewport’s size in the root element’s block axis. |
| vh | 1% of viewport’s height. |
| vw | 1% of viewport’s width. |
| vi | 1% of viewport’s size in the root element’s inline axis. |
| vmax | 1% of viewport’s larger dimension. |
| vmin | 1% of viewport’s smaller dimension. |
Aurrerago sakon aztertuko dugu zer den eta nola funtzionatzen duen Viewport-ak.
14.3 Angelu-unitateak
CSSk angeluak adierazteko unitateak ere erabiltzen ditu. Nagusiak hauek dira:
- deg: graduak.
- rad: radianak.
- grad: gradu zentesimalak.
- turn: birak.
Errotazio
.elemento {
transform: rotate(45deg);
}
Errotazio
.elemento {
transform: rotate(0.5turn);
}
Hurrengo taulan hainbat adibide eta haien baliokidetasunak ikus daitezke, MDN dokumentaziotik hartuta.
| Rotación | Equivalencias |
|---|---|
![]() |
90deg = 100grad = 0.25turn ≈ 1.5708rad |
![]() |
180deg = 200grad = 0.5turn ≈ 3.1416rad |
![]() |
-90deg = -100grad = -0.25turn ≈ -1.5708rad |
Sortu bi elementu 200px-ko zabalerarekin eta erabili biraketa unitate desberdinak erabiliz.
14.4 Denbora-unitateak
CSS propietate batzuek denbora-unitateak erabiltzen dituzte. Unitate horiek bereziki erabiliko ditugu CSS trantsizioak eta animazioak aztertzen ditugunean. Nagusiak hauek dira:
- s: segundoak.
- ms: milisegundoak.
Trantsizioak
.boton {
transition: background-color 0.3s;
}
Trantsizioak
.boton {
transition: background-color 300ms;
}
Bi balioek iraupen bera adierazten dute.
14.5 Unitate gabeko balioak
CSS propietate batzuek unitaterik gabeko zenbakiak onartzen dituzte.
Opakutasun
.elemento {
opacity: 0.5;
}
Altuera
.elemento {
line-height: 1.5;
}
Adibide hauetan ez da beharrezkoa unitatea jartzea, honako arrazoi hauengatik:
- opacity: normalean 0 eta 1 arteko zenbaki bat erabiltzen du.
- line-height: unitaterik gabe ere erabil daitekeen propietatea da.
14.6 0 balioa
CSS propietate askotan, balioa zero denean, unitatea bazter daiteke.
0 unitate barik
.elemento {
margin: 0;
padding: 0;
border-width: 0;
}
Kasu hauetan ez da unitaterik jarri behar zero jarri dugulako; beste kopuru bat balitz, berriz, px, em edo beste edozein unitate jarri beharko litzateke.
14.7 Automatikoki kalkulatutako neurriak
CSS modernoan, mugikorrak eta tabletak agertzearen ondorioz, diseinu responsive bihurtu da ezinbesteko, eta, beraz, neurri erlatiboak erabiltzea ere ezinbestekoa da. Horri neurriak automatikoki kalkulatzeko aukera gehitu behar zaio.
14.7.1 Calc()
CSSk unitate desberdinak erabiliz kalkuluak egiteko aukera ematen du calc() funtzioaren bidez.
Zabalera kalkulatu automatikoki
.caja {
width: calc(100% - 40px);
}
Arau honekin zabalera “eskuragarri dagoen zabalera ken 40px” izango dela adierazten ari gara, eta, horrela, ez dugu zabalera behartu behar, erlatiboa eta kalkulatua baita.
calc() funtzioak oinarrizko lau eragiketak onartzen ditu: batuketa (+), kenketa (-), biderketa (*) eta zatiketa (/).
14.7.2 min() eta max()
CSS modernoek tamaina kalkulatzeko bi funtzio ere eskaintzen ditu:
- min(): emandako balioetatik txikiena erabiltzen du.
- max(): emandako balioetatik handiena erabiltzen du.
Bi funtzioek komaz bereizitako parametro bat edo gehiago onartzen dituzte.
min()
.caja {
width: min(90%, 1000px);
}
max()
.caja {
width: max(300px, 50%);
}
Lehenengo adibideak emandako balioetatik txikiena erabiltzea ahalbidetzen du. Beraz:
- Pantaila txikietan
90%erabil dezake. - Pantaila handietan ez du
1000pxgaindituko.
Bigarren adibidean, max() erabiliz, bi balioetatik handiena erabiliko du.
14.7.3 clamp()
Diseinu moldagarrietarako bereziki erabilgarria den funtzio bat clamp() da. Haren sintaxiak hiru parametro onartzen ditu, clamp(min, val, max):
- min: Nahiago den balioa balio hori baino txikiagoa bada, gutxieneko balioa erabiliko da.
- val: Nahiago den balioa da. Haren emaitza gutxieneko eta gehieneko balioen artean dagoen bitartean erabiliko den adierazpena da. Normalean balio erlatiboa izaten da.
- max: Gehieneko balioa da. Nahiago den balioa goiko muga hori baino handiagoa bada, propietateari esleituko zaion adierazpen-baliorik handiena (positiboena) da.
max()
h1 {
font-size: clamp(2rem, 5vw, 4rem);
}
Adibide honen tamaina:
- Ez da inoiz 2rem baino txikiagoa izango.
- 5vw erabiltzen saiatuko da.
- Ez da inoiz 4rem baino handiagoa izango.
Horri esker, erabilgarri dagoen espaziora progresiboki egokitzen diren tamainak sor daitezke.
15 Koloreak
Koloreak web-interfaz baten diseinuaren oinarrizko zati bat dira. CSSk testuaren, atzeko planoen, ertzen eta beste hainbat elementu bisualen kolorea definitzeko aukera ematen du. Koloreen bidez, ikus-identitate bat ezar dezakegu, elementuak bereizi, erabiltzailearen arreta erakarri eta edukiaren irakurgarritasuna hobetu.
CSSk koloreak zehazteko hainbat modu eta propietate ugari eskaintzen ditu, bai testuaren kolorea bai elementuen atzeko planoa kontrolatzeko.
Aurretik ikusi dugu nola aldatu testuaren kolorea aurreko adibideetan, eta badakigu normalean heredatzen den propietatea dela.
CSS
p { color: blue; }
15.1 Koloreak nola zehaztu
Koloreak esleitzerakoan, kolorea adierazteko hainbat modu aukera ditzakegu:
15.1.1 Koloreen izenak
CSSk ingelesez ezagutzen dituen kolore-izen ugari daude. red edo blue bezalako hainbat adibide ikusi ditugu, baina beste asko ere badaude.
Honako hauek dira kolore estandarrak: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow.
Izen batzuk beste batzuen aliasak dira, hala nola:
- aqua / cyan
- fuchsia / magenta
- darkgray / darkgrey
- darkslategray / darkslategrey
- dimgray / dimgrey
- lightgray / lightgrey
- lightslategray / lightslategrey
- gray / grey
- slategray / slategrey
Ondorengo oharrak ere kontuan hartu behar dira:
- Darkgray Gray baino argiagoa da.
- Lightpink Pink baino ilunagoa da.
Oinarrizko probak egiteko izen horiek erabiltzea ondo dagoen arren, haien erabilera nahiko mugatua da.
15.1.2 Koloreak balio hamaseitarren bidez
CSSn koloreak definitzeko gehien erabiltzen den moduetako bat balio hamaseitarrak erabiltzea da. Kolore hamaseitar bat # sinboloarekin hasten da eta normalean sei karakterez osatuta dago:
Koloreak hamaseitarrean
p { color: #ff0000; }
Sei karaktereek osagai hauek adierazten dituzte:
- Gorria (R).
- Berdea (G).
- Urdina (B).
Horregatik, sistema honi RGB hamaseitarra deritzo, eta #RRGGBB gisa adierazten da. Osagai bakoitzak 00 eta FF arteko balioa izan dezake. Karaktere hamaseitarrak letra xehez ere idatz daitezke.
Sistema honekin 24 biteko kolore-sakontasuna dugu (8 bit kanal bakoitzeko), eta horrek 16.777.216 koloreko aniztasuna ematen du.
Horrela, adibide erraz gisa:
- #000000: beltza, kolorerik ez dagoelako.
- #FF0000: gorria
- #00FF00: berdea
- #0000FF: urdina
- #FFFFFF: zuria, kolore guztiak batera
Osagai bakoitzaren bikoteak bi karaktere berdinez osatuta daudenean, hiru karaktereko forma laburtua erabil dezakegu. Beraz, honako adibide hauek baliokideak dira:
- #FF0000 = #F00
- #112233 = #123
- #00FFAA = #0FA
15.1.3 Koloreak rgb() erabiliz
Beste aukera bat rgb() funtzioa erabiltzea da, RGB sistema berriro adierazteko. Funtzio honekin osagai bakoitza bi modutan adieraz daiteke:
- 0 eta 255 arteko balio baten bidez.
- %0 eta %100 arteko ehuneko baten bidez.
Koloreak rgb()-rekin
p {
color: rgb(255 0 0);
background-color: rgb(30% 20% 50% );
}
Hurrengo taulan agertzen diren koloreak berdinak dira:
| Hexadecimal | RGB | RGB |
|---|---|---|
| #FF0000 | rgb(255 0 0) | rgb(100% 0% 0%) |
| #00FF00 | rgb(0 255 0) | rgb(0% 100% 0%) |
| #0000FF | rgb(0 0 255) | rgb(0% 0% 100%) |
| #FFFFFF | rgb(255 255 255) | rgb(100% 100% 100%) |
| #000000 | rgb(0 0 0) | rgb(0% 0% 0%) |
Lehen, rgb() funtzioko balioak komaz bereizten ziren, baina gaur egun ez da beharrezkoa.
15.1.4 Koloreak HSL-rekin
CSSk HSL eredua erabiliz koloreak definitzeko aukera ere ematen du. HSL siglek honako hau esan nahi dute:
- Hue: tonua/ñabardura.
- Saturation: saturazioa.
- Lightness: argitasuna.
CSSn hsl() funtzioaren bidez erabil daiteke. Hurrengo adibidean kolore gorria erakusten da:
Koloreak hsl()-rekin
p { color: hsl(0 100% 50%); }
HSLk balioak zilindro baten moduan adierazten ditu. Lehenengo balioak tonua adierazten du eta angelu baten bidez adierazten da. Adibidez:
- 0°: gorria
- 60°: horia
- 120°: berdea
- 180°: cyana
- 240°: urdina
- 300°: magenta
- 360°: gorria berriro, zirkuluari bira osoa eman diogulako.
Saturazioa eta argitasuna ehunekoen bidez adierazten dira.
Saturazioak %100eko balioa duenean, %50ekoa duenean baino biziagoa da. Argitasuna txikiagoa denean, kolore ilunagoa lortzen dugu, eta %0 jartzen badugu, beltza izango da.
HSL bereziki erosoa izan daiteke kolore beraren aldaerak sortu behar ditugunean. Hurrengo adibidean, argitasunarekin jolastuz, kolore beraren 3 aldaera lortuko ditugu:
HSL-rekin argitasun-aldaketa
.color-base {
color: hsl(210 80% 50%);
}
.color-claro {
color: hsl(210 80% 70%);
}
.color-oscuro {
color: hsl(210 80% 30%);
}
15.1.5 Alfa-kanala
Alfa-kanalak (ingelesez alpha) kolore baten gardentasuna edo opakutasuna kontrolatzeko aukera ematen du. Bai rgb() bai hsl() funtzioetan erabil daiteke, bi funtzioei laugarren parametro bat gehituz, / karakterearen ondoren.
Gardentasuna gehitu zaio kolore bati
h1{
background-color: rgb(0 0 255 / 50%);
}
h2{
background-color: hsl(240 100% 50% / 0.5);
}
h3{
background-color: #FF00007F;
}
Alfa-kanala ehuneko gisa edo 0 eta 1 arteko balio baten bidez adieraz daiteke. Bi adibideetan adierazten ari gara zehaztutako koloreak %50eko opakutasuna duela, honela funtzionatzen baitu:
- 0%: erabat gardena.
- 50%: erdi-gardena.
- 100%: erabat opakua.
Sistema hamaseitarrean, amaieran beste bikote berri bat gehitu behar da gardentasun-maila adierazteko.
Alfa-kanala zehazteko beste modu batzuk ere badaude, rgba() eta hsla() funtzioak erabiliz, baina CSS modernoan aurrez ikusitako funtzioen aliasak dira.
15.1.6 transparent gako-hitza
Zerbait erabat gardena izatea nahi badugu, transparent gako-hitza erabil dezakegu. Dokumentazioan azaltzen den bezala, rgb(0 0 0 / 0%)-ren aliasa/shortcut da.
Elementu baten atzeko planoa zehazteko erabili ohi da, horrela atzean egon daitekeen atzeko planoa ikusgai uzteko.
Atzeko plano gardena
h1{
background-color: transparent;
}
15.2 Zein sistema erabili
Erantzun anbiguoa eman dezakeen arren, proiektuaren eta azken teknologia erabiliko dugunaren araberakoa da, horrek ere eragina baitu.
Sistema hamaseitarra edo rgb() funtzioa erabiltzen dugunean, sRGB izeneko kolore-espazioarekin lan egiten ari gara. Sistema horrek, aurrez esan bezala, 24 bit erabiltzen ditu (8 kanal bakoitzeko), guztira 16.777.216 kolore lortuz.
Aitzitik, hsl() erabiltzean ez gara kanal bakoitzeko 8 bit horietara mugatzen, eta gure nabigatzaileak/sistemak/pantailak beste kolore-sakontasun bat erabiltzen badu, hori erabili ahal izango dugu.
Teknologiak aurrera egin ahala, koloreak adierazteko modu berriak behar ditugu, kolore-espazioa zabaltzen ari delako; adibidez, kanal bakoitzeko 10 kolore-bit, HDR, …
15.3 Koloreak eta interfazeen diseinua
Interfaze batean normalean ez ditugu koloreak modu isolatuan erabiliko; ohikoena paleta txiki bat definitzea da. Adibidez:
- Kolore nagusia
- Bigarren mailako kolorea
- Atzeko planoko kolorea
- Testuaren kolorea
- Bigarren mailako testuaren kolorea
- Arrakasta-kolorea
- Errore-kolorea
- Abisu-kolorea
Aurrerago, CSS aldagaiak aztertzen ditugunean, balio horiek zentralizatu ahal izango ditugu.
16 Atzeko planoak
CSSk elementuen atzeko planoa kontrolatzeko aukera ematen du hainbat propietateren bidez. Koloreak, irudiak eta gradienteak erabil ditzakegu, eta haien tamaina, posizioa edo errepikapena bezalako alderdiak kontrolatu.
Atzeko planoekin lotutako propietateak bereziki garrantzitsuak dira interfazeen diseinuan, txartelak, goiburuak, botoiak, atal nabarmenduak eta beste ikusizko osagai batzuk sortzeko aukera ematen baitute.
16.1 Atzeko planoaren kolorea
background-color propietateak elementu baten atzeko planoaren kolorea ezartzeko aukera ematen du. Aurretik aztertutako edozein kolore-formatu erabil dezakegu:
Gehitu kolorea atzeko planoan
body {background-color: #d0d0d0}
.div1 { background-color: #2563eb }
.div2 { background-color: rgb(37, 235, 212) }
.div3 { background-color: hsl(262 83% 53% / 0.5) }
Propietate hori edozein elementuri eslei diezaiokegu, baita dokumentuaren atzeko planoari ere body elementuaren bidez, adibidean ikus daitekeen bezala.
Sortu hainbat elementu eta gehitu kolorea haien atzeko planoan, aurretik ikusitako sistema desberdinak erabiliz.
16.2 Atzeko planoko irudiak
background-image propietateak irudi bat atzeko plano gisa erabiltzeko aukera ematen du.
Gehitu irudia atzeko planoan
div { background-image: url("fondo.jpg"); }
url() funtzioak irudiaren helbidea adierazten du. Bidea CSS fitxategiarekiko erlatiboa edo absolutua izan daiteke, aplikazioa nola antolatuta dagoen kontuan hartuta. Bide erlatiboa izatea nahi badugu, honako fitxategi-egitura hau dugula irudikatuz:
Fitxategi estruktura
proyecto/
├── css/
│ └── estilos.css
└── img/
└── fondo.jpg
Irudia estilos.css fitxategitik kargatzeko, honako bide hau erabiliko dugu: url("../img/fondo.jpg").
background-image background-color-rekin batera erabil dezakegu, baina koloreak irudia erabilgarri ez dagoenean bakarrik funtzionatuko du.
Sortu elementuak eta gehitu irudiak atzeko plano gisa. Egiaztatu zer gertatzen den background-color gehitzen bada eta irudia existitzen ez bada.
16.2.1 background-repeat
Atzeko planoko irudi bat errepikatu egin daiteke erabilgarri dagoen espazio guztia betetzeko. Portaera hori background-repeat propietatearen bidez kontrola dezakegu. Haren balio nagusietako batzuk, besteak beste, hauek dira:
- repeat: irudia horizontalki zein bertikalki errepikatzea ahalbidetzen du. Atzeko planoko irudi baten portaera lehenetsia da. Bereziki erabilgarria da ereduak osatzen dituzten irudi txikiak erabiltzen ditugunean.
- repeat-x: irudia horizontalki errepikatzen da.
- repeat-y: irudia bertikalki errepikatzen da.
- no-repeat: irudia errepika ez dadin erabiltzen da; aukera egokiena da atzeko plano gisa argazki bakar bat gehitu nahi dugunean.
- space: irudia ebakirik egin gabe errepikatzen da. Lehenengo irudia elementuaren hasieran eta amaieran jartzen da, eta erdian errepikapenak gehitzen dira, tarte libreak utziz.
Hurrengo irudiak MDN adibidetik hartutakoak dira.
Egiaztatu background-repeat-ren parametro desberdinen arteko aldea.
16.2.2 Atzeko planoko hainbat irudi
CSSk aldi berean atzeko planoko hainbat irudi erabiltzeko aukera ematen du; horri esker, irudiak konbina ditzakegu efektuak sortzeko, aurrez prozesatu beharrik gabe.
Hainbat irudi jartzean, geruzak bata bestearen gainean gehituz funtzionatzen du: jartzen den lehenengoa bigarrenaren gainean egongo da, bigarrena hirugarrenaren gainean, eta horrela hurrenez hurren.
W3C dokumentazioko hurrengo adibidean bi irudi gehitu zaizkio elementu bati:
HTML
<div id="example1">
<h1>Lorem Ipsum</h1>
<p>Lorem ipsum ...</p>
</div>
CSS
#example1 {
background-image: url(img_flwr.gif), url(paper.gif);
background-position: right bottom, left top;
background-repeat: no-repeat, repeat;
padding: 15px;
}
#example1 p {
width:60%;
}
Ikus daitekeen bezala, hainbat url() parametro gehi daitezke background-image-en, eta gauza bera egin daiteke posizioarekin eta irudia errepikatzea nahi badugu.
Garrantzitsua da gogoratzea irudiak geruzatan antolatzen direla, “goitik” beherantz.
16.3 Atzeko planoaren beste propietate batzuk
Atzeko planoarekin lotutako beste propietate batzuk ere badaude; beraz, komeni da bakoitzaren dokumentazioa kontsultatzea, eskaintzen dituen aukerak ezagutzeko.
- background-position: atzeko planoko irudi baten posizioa kontrolatzeko aukera ematen du, honako balio hauek erabiliz:
- Gako-hitzak, konbina daitezkeenak: left, center, right, top edo bottom.
- Ehunekoak, bi posiziorekin: ezkerretik eta goitik dagoen posizioa.
- px eta em bezalako posizioak ere erabil daitezke.
- background-size: atzeko planoko irudiaren tamaina kontrolatzeko aukera ematen du.
- Dimentsio bakarra jartzen badugu, zabalera izango da eta proportzioa mantenduko du. Bigarren bat gehitzen badugu, altuera izango da.
- cover hitz erreserbatua erabiltzen badugu, elementu osoa estaliko du, baina proportzioa bat ez badator, irudiaren zati bat ikusgai dagoen eremutik kanpo gera daiteke.
- contain hitz erreserbatua erabiltzen badugu, irudia eskalatu egingo da elementuaren barruan osorik ikus dadin, baina espazio librea utziko du.
- background-attachment: scroll-a egiten dugunean atzeko planoaren portaera kontrolatzeko aukera ematen du. Balio hauek onartzen ditu:
- scroll: ohiko portaera.
- fixed: kasu honetan, atzeko planoa finko gera daiteke edukia desplazatzen dugun bitartean.
- background-origin: atzeko planoko irudia kutxaren zein eremutatik kokatzen den zehazteko aukera ematen du. Balioak border-box, padding-box edo content-box dira.
Propietate jakin batzuen adibideak soilik
.a {background-position: top left;}
.b {background-position: 10% 50%;}
.c {background-position: 10em 50px;}
.d {background-size: 300px;}
.e {background-size: cover;}
.f {background-size: contain;}
16.4 Gradienteak
CSSk gradienteak sortzeko aukera ematen du kanpoko irudirik erabili beharrik gabe. Gradienteak nabigatzaileak berak sortzen ditu, eta horri esker ikusmen aldetik konplexuak diren atzeko planoak sor daitezke irudirik deskargatu beharrik gabe.
Gradienteak sortzeko hainbat modu daude:
- linear-gradient(): gradiente lineal bat sortzen du. Norabidea lehen parametro gisa adieraz daiteke:
- to right: gradientea ezkerretik eskuinera doa.
- to bottom: goitik behera.
- Bi kolore baino gehiago adieraz daitezke, eta nabigatzaileak haien arteko trantsizioak egingo ditu. Horietako bakoitzaren posizioa ere adieraz daiteke.
- radial-gradient(): erdiko puntu batetik abiatzen eta kanporantz hedatzen den gradientea sortzen du.
- conic-gradient: erdiko puntu baten inguruan gradiente koniko bat sortzen du.
Gradiente
.a { background: linear-gradient(red, orange); }
.b { background: linear-gradient(to right, red, orange, yellow); }
.c { background: linear-gradient(45deg, red 25%, yellow 50%, blue 100% ); }
.d { background: linear-gradient( to right, red 0%, yellow 50%, blue 100% ); }
.e { background: radial-gradient(circle, white, blue); }
.f { background: conic-gradient(red, orange, yellow, green, blue, purple, red); }




Sortu hainbat gradiente, ikusitako aukerak eta dokumentazioan agertzen direnak erabiliz.
16.4.1 Irudi baten gaineko gradientea
Irudiak bata bestearen gainean jar daitezkeela ikusi dugun bezala, gradiente bat ere sor dezakegu irudi baten gainean jartzeko.
Gradiente
.a {
background-image:
linear-gradient(
rgb(0 0 0 / 50%),
rgb(0 0 0 / 50%)
),
url("paisaje.jpg");
}
Emaitza argazki ilundu bat da, geruza beltz erdi-gardenez estalia, eta haren gainean testua jar dezakegu.
16.5 background propietate laburtua
Atzeko planoak propietate espezifikoen bidez nola sortu edo gehitu ikusi dugu, baina background propietateari aurrez ikusitako atributu guztiak gehi dakizkioke, ondorengo ordenan:
CSS
.caja {
background:
#222
url("imagen.jpg")
no-repeat
center
/ cover;
}
Propietate bakar honekin atzeko planoaren kolorea, irudi bat, errepikapena, posizioa eta tamaina ezarri ditugu. Propietate laburtua oso erabilgarria izan daiteke, baina hasieran errazagoa izan daiteke propietate bakoitza banaka erabiltzea.
Box Model eta dimentsioak
17 Box Model
Benetan web-orri batek nola jokatzen duen ulertzeko, kutxen eredua (Box Model) ezagutu behar da, CSSren kontzeptu garrantzitsuenetako bat baita.
Nabigatzaileak ez ditu HTML elementuak testu edo irudi isolatu gisa interpretatzen, kutxa angeluzuzen gisa baizik. Paragrafo, botoi, irudi, goiburu edo formulario bakoitzak dimentsio batzuk dituen kutxa bat hartzen du, baita gainerako elementuekiko espazio jakin bat ere.
Kutxen eredua ulertzeak galdera hauei erantzuteko aukera emango digu:
- Zergatik daude bi elementu elkarrengandik bereizita?
- Zergatik hartzen du kutxa batek espero baino leku gehiago?
- Zein da padding eta margin arteko aldea?
- Zergatik aldatzen du ertz batek elementu baten ikusgai dagoen tamaina?
17.1 Kutxa baten eremuak
Esan bezala, HTMLko elementu bakoitza kutxa angeluzuzen gisa interpretatzen da, eta kutxa horrek, aldi berean, lau eremu desberdin ditu:
- Edukia (content): Elementuaren edukia.
- Betegarria (padding): Barneko espazioa.
- Ertza (border): Ikusgai dagoen ertza.
- Marjina (margin): Kanpoko espazioa, kutxa hau inguruko beste kutxetatik bereizteko.
Nabigatzaileak kutxaren tamaina kalkulatzen du eremu horien guztien espazioa kontuan hartuta. Ondorengo irudietan hobeto ikus daiteke:
Gure nabigatzaileko garatzaile-tresnetatik box model eta orri bateko elementu bakoitzak hartzen duen tamaina ikus ditzakegu.
Eredu hau CSSko diseinuaren oinarria da, eta ezinbestekoa da ulertzea atal konplexuagoak ikusi aurretik.
17.2 Kutxaren tamaina eta box-sizing
Demagun honako kutxa hau dugula:
Altuera maximoa
.caja {
width: 300px;
height: 200px;
padding: 20px;
border: 5px solid black;
margin: 10px;
}
Nahiz eta oraindik propietateak sakon aztertu ez ditugun, aurrez ikusitako kutxen eredua kontuan hartuta:
Zein uste duzu dela kutxaren zabalera osoa? Eta altuera?
Aurreko adibidean kutxaren zabalera 300+20+20+5+5=350px da, ezarritako zabalera gehi alde bakoitzeko padding-a eta ertzaren zabalera gehitu behar baitira, baita alde bakoitzean ere. Marjina ez da tamainaren kalkuluan sartzen, elementuen arteko bereizketa baita. Portaera hori arraroa izan daiteke hasieran.
box-sizing propietateak dimentsioak nola kalkulatzen diren aldatzeko aukera ematen du. Bi balio nagusi daude:
- content-box: portaera tradizionala da. Zabalera edukiari dagokio. Hau da portaera lehenetsia.
- border-box: zabalerak padding-a eta ertza barne hartzen ditu. Portaera hau intuitiboagoa da.
Ondorengo irudietan hobeto ikus daiteke kutxaren benetako dimentsioa nola kalkulatzen den bi kasuetan:
Ikus daitekeen bezala, aukera content-box denean, tamaina width-en ezarritakoa da, eta ondoren gainerako tamainak gehitzen dira. Aldiz, border-box denean, garatzaile-tresnek erakusten dute edukiaren tamainari padding-aren eta border-aren tamaina kendu zaiola, width-ren guztizko tamainarekin bat etor dadin.
Egiaztatu box-sizing-en erabilera eta content-box edo border-box gisa konfiguratzearen arteko aldea. Barneratu bien arteko desberdintasuna eta pentsatu zein erabiliko zenukeen benetako proiektu batean.
17.2.1 box-sizing:border-box orri osoan aldatzea
Gure web-orrian box-sizing: border-box erabili nahi badugu, eta elementu guztiei aplikatu nahi badiegu banan-banan joan beharrik gabe, honako araua erabil dezakegu gure CSSaren hasieran:
Border-box aplikatu dokumentu osoan
*,
*::before,
*::after {
box-sizing: border-box;
}
Horrela, elementu guztiek kutxa-eredu bera erabiliko dute. Gaur egun oso gomendatutako praktika da, dimentsioen kalkulua asko errazten duelako.
Gaur egun box-sizing: border-box erabiltzea gomendatzen da hasierako diseinu-erabaki gisa.
Garrantzitsua da portaera lehenetsia ezagutzea, gero aldatzea erabakitzen bada, sortu ditugun osagai guztien tamainak berriro egokitu beharko baitira.
17.3 Bloke-elementuak eta lerroko elementuak
Kutxa-ereduak elementu guztiei eragiten die, nahiz eta guztiek ez duten berdin jokatzen. Elementuak bloke-elementuak edo lerroko elementuak izan daitezke, baina inoiz ez biak aldi berean.
17.3.1 Bloke-elementuak
Bloke-elementuek ezaugarri hauek dituzte:
- Eskuragarri dagoen zabalera osoa hartzen dute.
- Lerro berri batean hasten dira.
- Zabalera eta altuera onartzen dituzte.
Ondorengo taulan bloke motako elementu guztiak daude (iturria: w3schools):
| <address> | <article> | <aside> | <blockquote> | <canvas> | <dd> |
| <div> | <dl> | <dt> | <fieldset> | <figcaption> | <figure> |
| <footer> | <form> | <h1> | -<h6> | <header> | <hr> |
| <main> | <nav> | <noscript> | <ol> | <p> | <pre> |
| <section> | <table> | <tfoot> | <ul> | <video> |
17.3.2 Lerroko elementuak
Lerroko elementuek ezaugarri hauek dituzte:
- Edukiak hartzen duen espazioa baino ez dute hartzen.
- Ez dira lerro berri batean hasten.
- Zabalera eta altuerarekiko portaera desberdina dute.
Ondorengo taulan bloke motako elementu guztiak daude (iturria: w3schools):
| <a> | <abbr> | <b> | <bdo> | <br> | <button> |
| <cite> | <code> | <dfn> | <em> | <i> | <img> |
| <input> | <kbd> | <label> | <map> | <object> | <output> |
| <q> | <samp> | <script> | <select> | <small> | <span> |
| <strong> | <sub> | <sup> | <textarea> | <time> | <var> |
Aurrerago display propietatea aztertuko dugu, portaera hori aldatzeko aukera ematen duena.
18 Dimentsioak
Dimentsioek HTML elementuen tamaina kontrolatzeko aukera ematen dute. CSSk zabalera eta altuera definitzeko propietateak eskaintzen ditu, baita gutxieneko eta gehieneko mugak ere, gailu desberdinetara egokitzen diren interfazeak sortzea ahalbidetzen dutenak.
Ondorengo propietateak kutxa-ereduaren (box model) parte dira eta funtsezkoak dira edozein web-diseinu eraikitzeko:
- width: elementuaren eremuaren zabalera.
- min-width: elementuaren gutxieneko zabalera.
- max-width: elementuaren gehieneko zabalera.
- height: elementuaren altuera.
- min-height: elementuaren gutxieneko altuera.
- max-height: elementuaren gehieneko altuera.
- box-sizing: dimentsioak kalkulatzeko zer “kutxa-eredu” mota erabili.
18.1 Dimentsioak eremuaren arabera
Jarraian, HTMLko box model-aren kutxen dimentsioak aldatzeko hainbat propietate ikusiko ditugu. Propietateak honela bereiz daitezke:
- Propietate orokorra: izenak ez du adierazten zein eremuri eragiten dion, eta, beraz, eremu guztietan egingo du aldaketa.
- Propietate espezifikoa: zein eremu aldatuko duen adierazten du, eta eremu horri bakarrik eragingo dio.
18.1.1 Propietate orokorra: eremu guztiak
Box model-aren eremu guztiei eragiten dieten propietateak dira: goian, eskuinean, behean eta ezkerrean. Beraz, ondorengo adibidea badugu:
Padding
.caja {
padding: 30px;
}
Gure kutxak 30px-ko padding-a duela adierazten du eremu bakoitzean: goian, eskuinean, behean eta ezkerrean*. Propietate orokorrak erabil ditzakegu eremu jakin batzuei bakarrik eragin nahi diegula zehazteko, eta hori zenbat parametro pasatzen ditugun araberakoa da:
Zein eremuan eragiten dio?
.a { padding: 2px; }
.b { padding: 2px 4px; }
.c { padding: 2px 4px 6px; }
.d { padding: 1px 2px 3px 4px;}
- Balio 1: eremu guztietan aplikatzen dela adierazten dugu.
- 2 balio: lehenengo balioa top eta bottom-erako da, eta bigarrena right eta left-erako.
- 3 balio: top, right eta left; azken balioa bottom-erako da.
- 4 balio: top, right, bottom eta down.
Honek padding, border-width eta margin bezalako propietateei eragiten die.
Garrantzitsua da ordena hau ezagutzea, aurrerago ikusiko ditugun hainbat propietate orokorretan errepikatzen baita.
18.1.2 Propietate espezifikoa: eremu bati bakarrik eragiten dio
Aurrerago ikusiko ditugun propietate askok propietate espezifikoak dituzte, dagokien eremuari bakarrik eragiten diotenak. Adibidez:
- padding-top: goiko aldean bakarrik gehitzen du padding-a.
- border-right: eskuineko aldeko ertza bakarrik konfiguratzeko.
- margin-bottom: beheko aldean bakarrik gehitzen du marjina.
Horrela, propietatearen izenak berak argi zehazten du zein eremuri eragiten dion.
18.2 width propietatea
width propietateak elementu baten eduki-eremuaren zabalera ezartzen du.
Zabalera
.caja {
width: 300px;
}
Edukiak 300px-ko zabalera izango du. Garrantzitsua da gogoratzea, lehenespenez, padding eta border ez daudela zabalera horren barruan. Portaera hori aurrerago aztertuko dugu box-sizing-ekin.
18.2.1 Zabalera erlatiboa
Ehunekoek elementu moldagarriak sortzeko aukera ematen dute.
Padding con anchura relativa
.contenedor { width: 80%; }
Zabalera elementu edukitzailearen tamainaren araberakoa izango da. Edukiontziak 1000px neurtzen badu, elementuak gutxi gorabehera 800px hartuko ditu. Ondoren 600px neurtzen badu, zabalera gutxi gorabehera 480px izango da.
18.3 min-width propietatea
min-width propietateak elementu batek izan dezakeen gutxieneko zabalera ezartzen du.
abalera eta ziurtatu gutxieneko zabalera
.caja {
width: 50%;
min-width: 250px;
}
Elementua 50% hartzen saiatuko da, baina ez da inoiz 250px baino txikiagoa izango. Propietate hau oso erabilgarria da responsive diseinuetan.
18.4 max-width propietatea
max-width-ek onartzen den gehieneko zabalera ezartzen du.
Zabalera eta ziurtatu gehienezko zabalera
.caja {
width: 90%;
max-width: 1200px;
}
Eredu hau oso ohikoa da. Lehenespenez, pantaila txikietan 90% hartuko du, eta pantaila handietan, berriz, ez ditu inoiz 1200px gaindituko. Horrela, edukia gehiegi zabala izatea saihesten dugu.
18.5 height propietatea
height-ek eduki-eremuaren altuera definitzen du.
Altuera
.caja { height: 200px; }
Edukiak 200px-ko altuera izango du. Edukiak erabilgarri dagoen espazioa baino leku gehiago hartzen badu, gainezkatzea gerta daiteke; hurrengo atalean aztertuko dugu.
height-en ehuneko batek behar bezala funtzionatzen du guraso-elementuak altuera definitua duenean soilik. Guraso-elementuak ez badu altuera definiturik, baliteke ehunekoak espero den emaitza ez ematea.
18.6 min-height propietatea
min-height propietateak gutxieneko altuera bat ezartzen du.
Altuera
.caja { min-height: 200px; }
Edukia oso txikia izan arren, kutxak gutxienez 200px-ko altuera izango du. Edukia hazten bada, elementua ere hazi egingo da.
Edukia hazi daitekeenean, altuera finko bat erabili beharrean min-height erabiltzea gomendatzen da.
18.7 max-height propietatea
max-height-ek gehieneko altuera mugatzen du.
Altuera maximoa
.caja { max-height: 400px; }
Edukiak tamaina hori gainditzen badu, gainezkatzea gerta daiteke, overflow propietatearen arabera. Konbinazio hau oso ohikoa da alboko paneletan eta desplazamendua duten zerrendetan.
19 Overflow / gainezkatzea
Batzuetan, elementu baten edukiak erabilgarri dagoen espazioa baino leku gehiago hartzen du. Testua luzeegia delako, irudi bat handiegia delako edo dimentsio finko txikiegiak ezarri ditugulako gerta daiteke.
overflow propietateak nabigatzaileak zer egin behar duen kontrolatzen du edukiak elementuaren mugak gainditzen dituenean. Propietate hau oso erabilia da paneletan, txarteletan, menuetan, leiho modaletan eta desplazamendua duten edukiontzietan.
Demagun hurrengo adibidean bezalako altuera finkoa duen kutxa bat dugula:
Kutxa
.caja {
width: 100px;
height: 100px;
border: 2px solid black;
}
Testu oso luze bat sartzen badugu, edukiak erabilgarri dagoen altuera gaindi dezake; horri overflow edo gainezkatzea esaten zaio. Nabigatzaileak eduki horrekin zer egin erabaki behar du, eta horretarako overflow propietatea erabiltzen dugu, honako aukeretako batekin konfigura daitekeena:
- auto: barrak beharrezkoak direnean bakarrik agertzen dira.
- hidden: soberan dagoen edukia ezkutatzen da.
- scroll: desplazamendu-barrak beti agertzen dira.
- visible: edukia elementutik kanpora ateratzen da.
Zein konfigurazio erabili behar dugun erabaki ondoren, CSSari gehituko diogu:
Kutxa overflow-rekin
.caja {
width: 100px;
height: 100px;
border: 2px solid black;
overflow: auto;
}
19.1 Ardatz bakoitzaren kontrol independentea
Gainezkatzea kontrolatzerakoan, horizontalki eta bertikalki bereizita kontrola dezakegu. Horretarako, propietate hauek ditugu:
- overflow-x: ardatz horizontalarentzat.
- overflow-y: ardatz bertikalarentzat.
20 Padding
Padding-a elementu baten edukiaren eta ertzaren artean dagoen barneko espazioa da. Kutxa-ereduaren (Box Model) parte da, eta barneko bereizketa sortzeko, irakurgarritasuna hobetzeko eta botoiak, txartelak edo formularioak bezalako elementuen eremu erabilgarria handitzeko erabiltzen da.
Aurretik jarritako irudia gogoratuko dugu, garrantzitsua baita padding-a marjinatik bereiztea:
Gogoratu:
- Padding: edukiaren eta ertzaren arteko barruko espazioa.
- Margin: elementuen arteko kanpoko espazioa.
Beraz, honako adibide hau egin dezakegu:
Padding
.caja {
padding: 20px;
}
Edukia ertzetik 20px-ra egongo da bere alde guztietan. Aurretik ikusi dugun bezala, padding-ak propietate bana du kaxaren alde bakoitzerako: padding-top, padding-right, padding-bottom eta padding-left.
Atzeko kolorea gehitzen badugu, padding-a ere estaltzen du, eta ertzeraino iritsiko da.
20.1 Padding-aren erabilera botoietan
Padding-aren erabilera ohikoenetako bat botoi baten sakatze-eremua handitzea da. Testua txikia izan arren, botoiak erabiltzailearentzat askoz azalera erosoagoa izango du. Eredu hori ia edozein interfaze modernotan agertzen da.
Sortu hainbat elementu padding-a gehituz. Aldatu botoi bat padding pertsonalizatua gehitzeko eta, horrela, sakatze-eremu handiagoa izan dezan. Konparatu padding-ak aurreko ariketako marjinarekiko duen eragina.
21 Ertzak
Ertzek web-orri bateko elementuak ikusmenez mugatzeko aukera ematen dute. CSS-k hainbat propietate eskaintzen ditu haien lodiera, estiloa, kolorea eta forma kontrolatzeko.
Ertzak kutxa-ereduaren (Box Model) oinarrizko osagaietako bat dira, eta etengabe erabiltzen dira botoiak, txartelak, formularioak, taulak eta interfazeko beste elementu batzuk sortzeko.
21.1 border propietatea
Ertz bat sortzeko modurik errazena border propietate laburtua erabiltzea da. Hiru parametro ematen zaizkio:
- Ertzaren lodiera: neurri-unitate batekin edo thin, medium eta thick bezalako gako-hitzekin adieraz daiteke.
- Marra estiloa: hainbat gako-hitz daude ertz mota adierazteko:
- none: Ertzik gabe.
- solid: Marra jarraitua.
- dashed: Marra etena.
- dotted: Puntuzko marra.
- double: Marra bikoitza.
- groove: Hondoratutako hiru dimentsioko efektua.
- ridge: Goratutako hiru dimentsioko efektua.
- inset: Barruko itxura.
- outset: Kanpoko itxura.
- Ertzaren kolorea.
Hurrengo adibidean kodea propietate bakar batean edo parametro bakoitza bere propietatean banatuta ikus daiteke:
border propietatea
p {
border: 2px solid black;
}
border propietatea
p {
border-width: 2px;
border-style: solid;
border-color: black;
}
border-width propietatea propietate “orokorra” da, eta batetik lau parametrora onartzen ditu eremu desberdinetarako, lehenago azaldu dugun bezala.
Sortu ertz desberdinak lodiera, estilo eta kolore desberdinekin.
21.2 Alde bakoitzean ertz desberdinak
CSS-k ertzaren alde bakoitza modu independentean konfiguratzeko aukera ematen du, border-top, border-right, border-bottom eta border-left propietateen bidez.
border propietatearen modu berean funtzionatzen dute; beraz, alde bakoitzari lodiera, estilo eta kolore desberdinak eslei diezazkiokegu.
Eta ezaugarri bakoitza banaka esleitu nahi badugu, propietate bereiziak ditugu, hala nola:
- border-top-width
- border-right-style
- border-bottom-color
Eta horrela kaxaren alde eta propietate bakoitzerako.
21.3 Ertz biribilduak border-radius erabiliz
Gehien erabiltzen den propietateetako bat border-radius da, izkinak biribiltzeko aukera ematen baitu.
border-radius propietatea
.a { border-radius: 5px; }
.b { border-radius: 1rem; }
.c { border-radius: 50%; }
Zirkulu perfektua
.avatar {
width: 120px;
height: 120px;
border-radius: 50%;
}
Izkinak modu independentean konfigura daitezke propietate espezifiko hauen bidez:
- border-top-left-radius
- border-top-right-radius
- border-bottom-right-radius
- border-bottom-left-radius
21.4 Ertz eliptikoak
border-radius-ek erradio horizontal eta bertikal desberdinak definitzeko aukera ere ematen du.
Ertz eliptikoa
.caja {
border-radius: 50px / 20px;
}
Horrek forma eliptikoa duten izkinak sortzen ditu, zirkularrak izan beharrean. Ezaugarri interesgarria bada ere, diseinu gehienetan erradio berdinak erabiltzen dira. Ertz eliptikoak ondo ulertzeko, MDNren border-radius generator webgunean nola funtzionatzen duten ikus dezakegu.
Sortu ertz desberdinak kaxaren alde bakoitzerako. Sortu beste ertz batzuk ertz biribildu, eliptiko eta tamaina desberdinekin.
22 Marjinak
Marjinak elementu baten inguruan dagoen kanpoko espazioa dira, ertzaren ondoren. Elementuak elkarrengandik bereizteko aukera ematen dute, eta kutxa-ereduaren (box model) oinarrizko ataletako bat dira. Beste behin gogoratuko dugu:
- Padding: edukiaren eta ertzaren arteko barruko espazioa.
- Margin: elementuen arteko kanpoko espazioa.
Marjinak ezartzeko modurik errazena margin propietatea erabiltzea da:
20px-eko marjina
.caja {
margin: 20px;
}
Zona bakoitzak propietate espezifiko bat ere badu: margin-top, margin-right, margin-bottom eta margin-left.
Aurretik ikusi ditugun unitate mota desberdinak adieraz ditzakegu:
Marjina
.caja {
margin: 1em 20px 2rem 5%;
}
Marjinerako ehuneko bat erabiltzen badugu, leihoaren tamainaren araberakoa izango da, eta hori erabilgarria izan daiteke diseinu responsiveetan.
Marjin negatiboak ere gehi ditzakegu; horren ondorioz, edukia bere “norabide naturalaren” kontrako aldera desplazatuko da. Marjin negatiboak tresna indartsuak dira, baina neurriz erabili behar dira, mantentzen zailak diren gainjartzeak sor baititzakete.
Kontuz marjin negatiboak erabiltzean, nahi ez diren gainjartzeak sor baititzakete.
22.1 margin: auto
auto balio bereziak nabigatzaileari marjina automatikoki kalkulatzeko aukera ematen dio. Kasurik ezagunena horizontalki zentratzea da.
auto marjina
.caja {
margin: auto;
}
Garrantzitsua da konturatzea auto bakarrik adierazten badugu, goiko eta beheko marjinak automatikoki desagertzen direla.
22.2 Marjinak eta atzeko planoa
Ezaugarri garrantzitsu bat da atzeko kolorea ez dela marjinera hedatzen.
Adibidez:
Marjinak eta atzeko planoa
.caja {
margin: 20px;
background-color: lightblue;
border: 1px solid black;
}
Kolore urdina ertzera iritsi arte bakarrik hedatzen da. Hortik aurrera dagoen guztiak, hau da, marjinak, ez du atzeko kolore hori izango.
Garrantzitsua da kaxaren edukia noraino iristen den ulertzea; atzeko kolorea ez da ertzetik haratago hedatzen.
22.3 Marjinen kolapsoa
Marjin bertikalen ezaugarri esklusibo bat marjinen kolapsoa da (margin collapsing).
Demagun A eta B blokeak ditugula, biak bertikalki jarraian. A-k margin-bottom=20px du, eta B-k margin-top=30px. Zein izango da bien arteko bereizketa bertikala?
Logikak 50px pentsatzera eramango gintuzke, baina ez da horrela, aldameneko marjin bertikalek kolapsatu egiten baitute eta handiena erabiltzen baita; kasu honetan, 30px. Dokumentazioan kasu guztiak azaltzen dira.
Kontuan izan behar da kolapsoa ez dela kasu guztietan gertatzen. Adibidez:
- Marjin horizontaletan.
- Flexbox elementuetan.
- Grid elementuetan.
- Posizionamendu berezia duten elementuetan.
- Padding edo ertz baten bidez bereizitako elementuetan.
Horregatik, Flexbox edo Grid-en oinarritutako diseinu modernoetan portaera hori askoz gutxiagotan agertzen da.
Sortu hainbat elementu marjinak gehituz. Egiaztatu zer gertatzen den auto erabiltzean, aztertu marjin bertikalen eta horizontalen arteko desberdintasuna, eta egiaztatu elkarren ondoan dauden elementuen marjin bertikalen kolapsoa.
Aldagaiak, funtzioak eta organizazioa
23 CSSko aldagaiak
CSSko aldagaiek, propietate pertsonalizatuak (Custom Properties) ere deitzen direnek, estilo-orri baten barruan berrerabil daitezkeen balioak gordetzeko aukera ematen dute. Horiei esker, koloreak, tamainak, marjinak edo beste edozein balio behin bakarrik definitu eta proiektu osoan zehar berrerabil ditzakegu.
Haien erabilerak kodearen mantentzea errazten du, balioak bikoiztea saihesten du eta askoz errazagoa egiten du gai argiak edo ilunak sortzea, edo aplikazio baten ikus-identitatea aldatzea.
Gaur egun arraroa da aldagaiak ez erabiltzea, baina aldagaiak ez ziren eraginkorrak izan nabigatzaile askotan 2016ra arte, eta aurretik haien erabilera CSS aurreprozesadoreetan baino ez zen existitzen.
23.1 Nola sortu aldagai bat CSSn
CSS aldagai bat propietate bat da, eta haren izena bi marratxorekin hasten da (--); ondoren, var() funtzioaren bidez erabil dezakegu, aurretik emandako izena adieraziz. Aldagaiak ---rekin hastearen arrazoia propietate pertsonalizatuak CSSren propietate estandarretatik bereiztea da.
Aldagaia sortu
:root {
/* COLORES */
--color-main: #2563eb;
--color-ok: #16a34a;
--color-error: #dc2626;
--color-text: #222222;
/* ESPACIO */
--espacio-md: 1rem;
/* BORDES */
--bordes: 2px;
--radio: 10px;
}
Aldagaia erabili
h1 {
color: var(--color-main);
}
a {
color: var(--color-main);
}
.ok {
border: var(--bordes) solid var(--color-ok);
border-radius: var(--radio);
padding: var(--espacio-md);
}
Ohikoena aldagaiak :root hautatzailearen barruan deklaratzea da; horrela, aldagaiak orrialde osoan egongo dira eskuragarri. Horregatik, diseinuaren konfigurazio globala gordetzeko erabiltzen den lekua izan ohi da.
Aldagaiak behar adina aldiz erabil daitezke, eta etorkizunean aldaketak egin nahi badira, deklarazioan bakarrik aldatu behar da, eta horrek orrialde osoa aldatzea eragingo du.
Adibidean ikus daitekeen bezala, aldagaiak koloreetarako ez ezik, tarteetarako eta baita tipografietarako ere erabil daitezke.
Aldagaiak kategorien arabera taldekatzea eta izen deskribatzaileen konbentzio bat mantentzea gomendatzen da.
23.2 Aldagai lokalak eta herentzia
Aurreko atalean aldagai “globalak” nola sortu ikusi dugu, :root barruan definitu baitira, baina elementu baterako aldagai lokalak ere sor ditzakegu. Kontuan izan behar da CSSko aldagaiak heredatu egiten direla; beraz, aldagai bat elementu batean definitzen badugu, haren seme-alabek erabili ahal izango dute.
Aldagai lokala eta heredatua
.tarjeta {
--color-local: blue;
}
.tarjeta p {
color: var(--color-local);
}
Aldagaia .tarjeta barruan eta haren ondorengo elementuetan baino ez da existitzen. Horri esker, konfigurazio propioak dituzten osagaiak sor ditzakegu.
Garrantzitsua da aldagai lokalak sortzean kontuan izatea osagai bakoitzak izen bereko beste aldagai bat defini dezakeela, eta, beraz, definizio desberdinak izango direla, osagai bakoitzak bere testuingurua mantentzen baitu:
Aldagai lokala osagai batean
.alerta {
--color: #dc2626;
color: var(--color);
border: 2px solid var(--color);
}
Aldagai lokala osagai batean
.exito {
--color: #16a34a;
color: var(--color);
}
23.3 Aldagaiak berriro esleitzea berrerabiltzeko
Osagai generikoak sor ditzakegu eta, ondoren, aldaerak sortu aldagai baten balioa bakarrik aldatuz; horrela, ez ditugu propietate guztiak errepikatu behar.
Osagai generala
.boton {
--color-boton: #2563eb;
background: var(--color-boton);
border: 2px solid var(--color-boton);
color: white;
}
Kolore aldaketa
.boton-rojo {
--color-boton: #dc2626;
}
.boton-verde {
--color-boton: #16a34a;
}
Ondoren, HTMLn osagaiak behar ditugun klaseak izango ditu.
Sortu hainbat aldagai global eta lokal, heredatu eta aldatu egiten direnak osagai desberdinetan, eta erabil itzazu.
23.4 Balio lehenetsiak var()-rekin
var() funtzioak bigarren parametro bat onartzen du, ordezko balio gisa erabiltzen dena. Lehenengo aldagaia existitzen ez bada, bigarren balioa erabiliko du.
Lehendabiziko balorea eta ordezkoa
color: var(--color-texto, black);
Mekanismo hau erabilgarria da osagai berrerabilgarriak garatzen ditugunean.
23.5 Aldagaiak eta modu iluna
CSSko aldagaien abantaila handienetako bat gaiak sortzeko aukera da. Gaur egun ohikoa da webguneek modu argia eta modu iluna izatea.
Gaiak
/* tema claro*/
:root {
--fondo: white;
--texto: #222;
}
/* tema oscuro */
body.dark {
--fondo: #111;
--texto: #eee;
}
Gaia erabili
body {
background: var(--fondo);
color: var(--texto);
}
<body>-ren klasea aldatzean, interfaze osoa automatikoki aldatzen da.
23.6 Aldagaiak eta calc()
Aldagaiak CSSko funtzioekin konbina daitezke; horrela, nabigatzaileak kalkulua automatikoki egiten du.
Aldagaia
:root {
--espacio: 1rem;
}
calc erabilera
.caja {
padding: calc(var(--espacio) * 2);
}
Konbinazio hau oso indartsua da diseinu-sistema malguak sortzeko.
24 CSSko funtzioak
CSSko funtzioak estilo-orri baten barruan kalkuluak egiteko, koloreak manipulatzeko, aldagaiak erabiltzeko edo balio dinamikoak sortzeko aukera ematen duten adierazpen bereziak dira. Funtzio bat izen batez eta ondoren parentesiez osatuta dagoelako ezagutzen da. Horietako batzuk dagoeneko ikusi ditugu, hala nola:
- calc(): kalkuluak egiten ditu, neurri-unitate desberdinak erabiltzeko aukera emanez.
- min(): gutxieneko balioa itzultzen du.
- max(): gehieneko balioa itzultzen du.
- clamp(): balioa gutxieneko, hobetsitako eta gehieneko balio baten artean mugatzen du.
- var(): aldagaiak erabiltzeko.
- url(): irudiak gehitu ahal izateko.
Beste funtzio batzuk ere badaude, ia guztiak funtzio matematikoak, dokumentazioan ikus ditzakegunak. Interesgarria da horiek ezagutzea, agian erabilgarriak izango baitira gure proiektuan.
24.1 if() funtzioa
CSS estilo-orrietarako hizkuntza gisa sortu bazen ere, dagoeneko ikusi dugu funtzioak eta aldagaiak dituela eta kalkuluak egiteko aukera ematen duela. Gainera, etengabe garatzen ari denez, 2025ean if() baldintza sortzea proposatu zen.
if() baldintza gaur egun Chrome, Opera eta horien eratorrietan baino ez da funtzionala. Ez dugu erabiliko.
if() funtzioa
.ok {
background-color: if(
style(--black: true): black;
else: white;
);
color: if(
style(--black: true): white;
else: black;
);
}
Gai iluna erabili
<div class="ok">
Lorem ipsum ...
</div>
<div class="ok" style="--black: true">
Lorem ipsum ...
</div>
Adibidean baldintza nola erabili ikus dezakegu, testuaren kolorea eta atzeko planoa aldatzeko.
24.2 Funtzioak sortzea
Berriro ere, atal honek CSS garatzen eta estilo-orri baten berezkoak baino programazio-lengoaien ezaugarri propioagoak gehitzen ari dela ikusteko baino ez du balio.
@function arauak funtzio berrerabilgarriak definitzeko aukera emango digu; horiei parametroak pasa eta balioak itzuli ahal izango dizkiegu.
@function araua gaur egun Chrome, Opera eta horien eratorrietan baino ez da funtzionala. Ez dugu erabiliko.
Funtzioaren sortu
:root {
--espacio-md: 1rem;
}
@function --double(--value) {
result: calc(var(--value) * 2);
}
Funtzioa erabili
p {
--base-spacing: 10px;
border-radius: --double(var(--espacio-md));
padding: --double(var(--espacio-md));
}
Parametro gisa balio bat jasotzen duen eta haren bikoitza itzultzen duen funtzio bat deklaratu da. Funtzioa erabiltzean, aurretik existitzen den aldagai bat pasa zaio; horrela, CSS ia “programazio-lengoaia” bihurtzen ari dela ikus dezakegu.
Probatu adibide hau Chrome-n eta bateragarria ez den beste nabigatzaile batean.
Kokapenak eta ikusgarritasuna
25 display
display propietateak HTML elementu bat dokumentuaren barruan nola irudikatzen den zehazten du. CSSko propietate garrantzitsuenetako bat da, elementu batek lerro osoa hartzen duen, testuaren moduan jokatzen duen, beste elementu batzuekin lerrokatu daitekeen edo orrialdearen fluxutik erabat desagertzen den kontrolatzen baitu.
Aurretik ikusi dugu elementuak bloke eta lerroko elementuen artean bereiz daitezkeela; hala ere, CSSk portaera hori aldatzeko aukera ematen du display propietatearen bidez.
display-ri eman diezazkiokegun balioak hauek dira:
| Balioa | Erabilera nagusia |
|---|---|
| block | Bloke-elementua |
| inline | Lerroko elementua |
| inline-block | Bloke eta lerroaren arteko nahasketa |
| none | Elementua ezkutatzen du |
| flex | Flexbox edukiontzia |
| inline-flex | Lerroko Flexbox |
| grid | Grid edukiontzia |
| inline-grid | Lerroko Grid |
Unitate honetan lehenengo lauetan zentratuko gara. Flexbox eta Grid hurrengo unitateetan aztertuko ditugu.
25.1 display: block
Edozein elementu bloke-elementu bihur dezakegu.
HTML
<span>Inicio</span>
CSS
span {
display: block;
}
Orain <span> lerro berri batean hasiko da eta erabilgarri dagoen zabalera osoa hartuko du. Baliabide hau oso erabilgarria da estekak edo lerroko elementuak osagai handiago bihurtzeko.
25.2 display: inline
Bloke-elementu bat lerroko elementu bihur dezakegu.
HTML
<div>Uno</div>
<div>Dos</div>
<div>Tres</div>
CSS
div {
display: inline;
}
Emaitza hiru elementuak lerro bakarrean izango dira, bata bestearen ondoan. Hala ere, muga garrantzitsu bat dute: ez dituzte behar bezala errespetatzen width eta height, lerroko elementuen tamaina batez ere edukiaren arabera zehazten baita. Tamaina kontrolatu behar dugunean, normalean inline-block erabiltzen da, jarraian ikusiko dugun bezala.
25.3 display: inline-block
inline-block aukerak bi ereduen abantailak konbinatzen ditu. Ezaugarriak:
- Beste elementu batzuekin lerro berean kokatzen da.
- width eta height definitzeko aukera ematen du.
- padding eta margin errespetatzen ditu.
CSS
.boton {
display: inline-block;
width: 140px;
padding: 12px;
border: 1px solid black;
}
Oso erabilia izan den propietatea da botoiak eta osagai txikiak sortzeko, Flexbox ezagun egin aurretik.
25.4 display: none
none balioak elementua dokumentuaren fluxutik erabat ezabatzen du.
HTML
<p>Primer párrafo</p>
<p class="oculto">Segundo</p>
<p>Tercer párrafo</p>
CSS
.oculto {
display: none;
}
Bigarren paragrafoa desagertu egiten da eta espazioa betetzeari uzten dio.
25.4.1 display: none eta visibility: hidden arteko aldea
Bi propietateek elementuak ezkutatzen dituzten arren, haien portaera desberdina da.
- display: none
- Ez da bistaratzen.
- Ez du espaziorik hartzen.
- Dokumentuaren fluxutik desagertzen da.
- visibility: hidden
- Ez da bistaratzen.
- Bai, espazioa hartzen du.
- Gainerako elementuek beren kokapenari eusten diote.
visibility xehetasunez aztertuko dugu aurrerago.
25.5 Balioak: flex eta grid
Balio klasikoez gain, display-ek maketazio-sistema osoak aktibatzen ditu.
- display: flex: Elementua edukiontzi malgu bihurtzen du.
- display: grid: Elementua sare-edukiontzi bihurtzen du.
Bi eredu hauek sakonago ikusiko ditugu aurrerago.
25.6 Balioak: inline-flex eta inline-grid
Lerroko bertsioak ere badaude. Dokumentuarekiko lerroko elementu baten moduan jokatzen dute, baina barneko edukiak Flexbox edo Grid erabiltzen du. Erabilgarriak dira osagai txikietarako, hala nola botoi- edo ikono-taldeetarako.
25.7 Elementu baten portaera aldatzea
CSSren indarguneetako bat da portaera bisuala alda daitekeela HTMLa aldatu gabe. Adibidez, navbar estiloko menu bat zerrenda gisa idatz daiteke:
HTML
<ul>
<li>Inicio</li>
<li>Productos</li>
<li>Contacto</li>
</ul>
Posteriormente, CSSk bere elementuak banaketa horizontal batean bihur ditzake display erabiliz. Horri esker, HTML semantikoa mantendu eta CSS aurkezpenerako soilik erabil daiteke.
Egiaztatu bloke-elementuen eta lerroko elementuen arteko desberdintasunak, eta ikusi display-ek block, inline eta inline-block balioekin haien portaeran duen eragina. Saiatu zerrenda batekin navbar bat egiten.
26 position
Lehenespenez, HTML elementuak dokumentuan idatzita dauden ordena berean agertzen dira. Nabigatzaileak bata bestearen atzean kokatzen ditu, orrialdearen fluxu normala errespetatuz.
position propietateak portaera hori aldatzeko eta elementu baten kokapen zehatza kontrolatzeko aukera ematen du. Horri esker, menu finkoak, leiho emergenteak, irudien gaineko etiketak edo orrialdea desplazatzean ikusgai mantentzen diren elementuak sor ditzakegu.
Eskuragarri dauden balioak hauek dira:
| Balioa | Deskribapena |
|---|---|
| static | Ohiko kokapena |
| relative | Jatorrizko kokapenarekiko desplazamendua |
| absolute | Aitzindari batekiko kokapen absolutua |
| fixed | Leihoarekiko kokapen finkoa |
| sticky | Erlatiboaren eta finkoaren konbinazioa |
Bakoitzak nabigatzaileak elementuaren kokapena kalkulatzeko modua aldatzen du. Elementu bat mugitzeko, top, right, bottom eta left propietateak ere erabiltzen dira; adibideetan ikusiko ditugu elementua kokatzeko.
26.1 Dokumentuaren fluxu normala
Ikus dezagun dokumentu sinple bat.
HTML
<header>Cabecera</header>
<main>Contenido</main>
<footer>Pie de página</footer>
Kokapen-propietaterik aplikatu gabe, nabigatzaileak HTMLaren ordenari jarraituz kokatzen ditu elementuak. Portaera horri dokumentuaren fluxu normala (Normal Flow) deritzo.
Elementu guztiek hasieran position: static dute.
26.2 position: static
Balio lehenetsia da. Elementua fluxu normalaren barruan mantentzen da, eta top, right, bottom eta left propietateak ez dira kontuan hartzen.
CSS
div {
position: static;
top: 50px;
}
Adibide honetan, top-ek ez du inolako eraginik izango. Normalean ez da beharrezkoa position: static idaztea, elementu guztiek hasieran balio hori baitute.
26.3 position: relative
relative balioak elementu bat jatorrizko kokapenarekiko desplazatzen du.
HTML
<div class="caja">
Caja
</div>
CSS
.caja {
position: relative;
top: 20px;
left: 20px;
}
Ondorioz, kutxa 20px mugitzen da eskuinera eta gora (20px gehitzen ditu elementuaren ezkerrean eta goialdean). Garrantzitsuena da jatorrizko espazioak existitzen jarraitzen duela. Hau da, gainerako elementuek kutxa mugitu ez balitz bezala jokatzen jarraitzen dute.
top, right, bottom eta left propietateek elementuaren alde horretan dagoen espazioa hartzen dute kontuan.
Desplazamendu txikiez gain, relative-ek oso funtzio garrantzitsua du: elementu absolutuentzako erreferentzia gisa balio izatea, ondoren ikusiko dugun bezala.
26.4 position: absolute
Elementu absolutu bat dokumentuaren fluxu normaletik ateratzen da.
HTML
<div class="padre">
<div class="hijo"></div>
</div>
CSS
.padre {
position: relative;
}
.hijo {
position: absolute;
top: 20px;
left: 10px;
}
Seme-kutxa elementu gurasoaren eskuinera eta beherantz pixka bat kokatuta agertuko da. Gainerako elementuek semeak espaziorik hartuko ez balu bezala jokatuko dute.
Elementu absolutu batek position balioa static ez duen lehen aitzindaria bilatzen du, eta halakorik ez badago, erreferentzia orrialde osoa izango da. Horregatik, oso ohikoa da adibidean agertzen den bezalako konbinazio bat aurkitzea.
Elementu absolutu batek position balioa static ez duen lehen aitzindaria bilatzen du.
Aitzindaririk ez badago posizionatuta, erreferentzia orrialde osoa izango da.
Jar dezagun beste adibide bat, oraingoan irudi baten gainean jarritako testu batekin:
HTML
<div class="producto">
<img src="camiseta.jpg" alt="">
<span class="oferta">-20%</span>
</div>
CSS
.producto {
position: relative;
}
.oferta {
position: absolute;
top: 10px;
left: 10px;
background: crimson;
color: white;
}
26.5 position: fixed
Elementu finko bat nabigatzailearen leihoaren kokapen berean mantentzen da beti. Erabiltzaileak scroll egiten badu ere, menuak ikusgai jarraituko du.
CSS
.menu {
position: fixed;
top: 0;
left: 0;
}
Elementu finkoak honako hauetarako erabiltzen dira:
- Goiburuetarako.
- Gorantz itzultzeko botoietarako.
- Txat flotagarrietarako.
- Nabigazio-barretarako.
Dokumentuaren fluxu normaletik ere ateratzen dira.
26.6 position: sticky
sticky balioak relative eta fixed balioen portaera konbinatzen du. Hasieran, elementua elementu normal baten moduan jokatzen da. Desplazamenduan zehar posizio jakin batera iristen denean, finkatuta geratzen da.
CSS
aside {
position: sticky;
top: 20px;
}
Elementua goiko ertzetik 20px-ra itsatsita mantenduko da, haren edukiontziaren barruan espazioa dagoen bitartean. Oso erabilgarria da aurkibideetarako eta alboko barrentzat.
Erabili position propietatea ondorengo adibideak sortzeko:
- Posizio estatikoa duen kutxa.
- Gehitu irudi bati “Deskontua” testua, posizio erlatiboarekin, beheko ezkerrean.
- Sortu goiko aldean fixed dagoen navbar bat.
- Sortu “ohar” mezu bat, sticky izan dadila paragrafo batzuk ikusten ditugun bitartean.
Zer dago “arraroa” ariketa honetan scroll egitean? 6d ariketan konponduko dugu.
27 float (ikuspegi historikoa)
Flexbox eta CSS Grid agertu aurretik, float propietatea zen zutabeekin, menu horizontalekin eta banaketa konplexuekin diseinuak sortzeko gehien erabiltzen zen tresna. Hamarkada bat baino gehiagoz, web-orriak maketatzeko eskuragarri zegoen ia irtenbide bakarra izan zen, nahiz eta benetan oso bestelako helburu batekin diseinatu zen.
Gaur egun float ez da jada maketazioak sortzeko erabiltzen, baina CSS estandarraren parte izaten jarraitzen du eta oraindik ere erabilgarria da testua irudien inguruan jartzeko (hori baitzen bere jatorrizko helburua), testu-prozesadore batean bezala, aldizkari eta egunkarietan ikusten den moduan.
Propietateak lau balio nagusi onartzen ditu:
| Balioa | Deskribapena |
|---|---|
| left | Ezkerretara flotatzen du |
| right | Eskuinerantz flotatzen du |
| none | Flotaziorik gabe |
| inline-start / inline-end | Testuaren norabidera egokitutako bertsioak (gutxiago erabiltzen dira) |
left eta right erabiliz, elementua ezkerrera eta eskuinera desplazatuko da, hurrenez hurren, eta testuak (edo ondorengo elementuek) libre geratutako espazio hori hartuko dute. Hori da gaur egun erabilera nagusia.
HTML
<img src="moon.jpg" class="foto">
<p>Lorem ipsum dolor...</p>
<p>Lorem ipsum dolor...</p>
CSS
.foto {
float: left;
margin-right: 1rem;
margin-bottom: 0.5rem;
}
Elementu batek flotatzen duenean:
- Fluxu normaletik partzialki ateratzen da.
- Albo batera desplazatzen da.
- Ondorengo elementuak haren inguruan kokatzen saiatzen dira.
Erabili float propietatea bi irudi inguratzeko, bata ezkerrean eta bestea eskuinean kokatuz.
27.1 Erabilera historikoak
Beste sistema batzuen faltagatik, 2000ko hamarkadan float diseinatuta ez zegoen maketazioa sortzeko erabiltzen zen, batez ere zutabeak sortzeko. Ikusmenean ondo funtzionatzen bazuen ere, mantentze-arazo ugari sortzen zituen.
Eragozpen ospetsuenetako bat edukiontziaren kolapsoa zen; horren ondorioz, elementu gurasoak altuera ezagutzeari uzten zion eta, beraz, elementua desplazatu egiten zen.
Horren ondorioz, maketazioa hobetzen eta arazo horiek saihesten saiatzeko hack batzuk sortzen hasi ziren. Gaur egun, ordea, zaharkituta daude Flexbox eta Grid agertu direlako.
Ez litzateke float erabili behar maketazioak egiteko, testuarekin irudi bat inguratzeko soilik.
28 z-index propietatea
Web-interfaze askotan, hainbat elementu elkarren gainean jartzen dira: leiho modalak, goitibeherako menuak, goiburu finkoak, irudien gaineko etiketak edo botoi flotagarriak. Bi elementuk pantailaren eremu bera hartzen dutenean, nabigatzaileak erabaki behar du zein marraztuko den bestearen gainean.
z-index propietateak posizionatuta dauden elementuen pilaketa-ordena (stacking order) kontrolatzen du. Zenbat eta balio handiagoa izan, orduan eta gorago agertuko da elementua gainerakoekiko.
Lehenespenez, HTML elementuak dokumentuaren ordenari jarraituz marrazten dira: HTMLn beranduago agertzen direnak normalean gainean bistaratzen dira gainjartzea dagoenean. Portaera hori z-index erabiliz alda daiteke.
Z letra hiru dimentsioko irudikapenetik dator. Bi dimentsioko diseinu grafikoan bi ardatz erabiltzen dira: X ardatz horizontala eta Y ardatz bertikala. Hirugarren ardatza, Z, gehitzen badugu, marrazketa-ordena adierazten du.
28.1 Nola aldatu z-index
z-index-ren balioa positiboa, zero edo negatiboa izan daiteke. Zenbakia zenbat eta handiagoa izan, orduan eta gorago marraztuko da elementua, baina position duten elementuei baino ez die eragiten (static balioa izan ezik).
HTML
<div class="caja roja"></div>
<div class="caja azul"></div>
CSS
.caja {
position: relative;
width: 120px;
height: 120px;
}
.roja {
background: crimson;
z-index: 20;
}
.azul {
background: royalblue;
z-index: 10;
left: 60px;
top: -60px;
}
Bi kutxak partzialki gainjartzen dira. z-index existitzen ez bada, ordena dokumentuaren fluxuaren araberakoa izango da. Propietateari balio bat gehitzen zaion unean, kutxak marrazteko kontuan hartuko da; kasu honetan, kutxa gorria urdinaren gainean agertuko da, zenbakizko balioaren ondorioz.
Bi elementuek balio bera izango balute, HTMLaren ordena mantenduko litzateke; beranduago idatzitako elementua gainean marraztuko litzateke.
z-index-ren erabilerarik ohikoena leiho modaletan, navbar-etan, goitibeherako menuetan eta abarretan da, beti dokumentuaren gainerako elementuen “gainean” daudela ziurtatzeko.
28.2 Pilaketa-testuingurua
Kontzeptu garrantzitsu bat stacking context edo pilaketa-testuingurua da. Elementu batek bere testuingurua sortzen duenean, haren seme-alaben z-index balioak haien artean soilik konparatzen dira.
MDNren dokumentazioan pilaketaren funtzionamendua azaltzen duen adibide bat dago:
HTML
<section>
<div id="div1">#1</div>
<div id="div2">#2</div>
</section>
<div id="div3">#3</div>
CSS
/*...*/
#div1 {
z-index: 5;
}
#div2 {
z-index: -9;
}
#div3 {
z-index: 0;
}
section {
position: absolute;
z-index: 2;
}
Adibide honetan bi testuinguru daude: bata “section” barruan (“div1” eta “div2” artean), eta bestea “section” eta “div3” artean. Biak bereizita kalkulatzen dira, eta testuinguru bakoitzaren barruan dagokien balio propioak hartzen dira kontuan.
Zein dela uste duzu aurreko adibidearen marrazketa-ordena?
- Erabili z-index propietatea aurretik jarritako adibidea ikusteko. Egiaztatu portaera propietatea gehitzean eta kentzean.
- Konpondu 6b ariketako scroll-arekin eta navbar-arekin zegoen arazoa.
- Egiaztatu pilaketa-testuinguruari buruzko erantzuna zuzena izan den.
Pilaketa-testuinguruak dokumentazioan MDN agertzen diren hainbat propietatek sor ditzakete, adibidez:
- z-index duten elementu posizionatuak.
- 1 baino txikiagoa den opacity.
- Zenbait transformazio (transform).
- filter eta bestelako propietate grafikoak.
28.3 Pilaketa-eskala
Ez dago zenbakikuntza ofizialik, baina proiektu askok elementu desberdinetarako antolatutako eskala erabiltzen dute:
| Elementua | Gutxi gorabeherako balioa |
|---|---|
| Eduki normala | 1 |
| Txartelak | 10 |
| Goiburu finkoa | 100 |
| Menuak | 200 |
| Modala | 1000 |
| Elkarrizketa kritikoak | 2000 |
Garrantzitsuena ez da zenbaki zehatza, hierarkia koherentea mantentzea baizik. Garrantzitsua da, halaber, balio desberdinen artean tarte nahikoa uztea, etorkizunean tarteko testuinguru berriak gehitu nahi baditugu.
Zein da gutxieneko eta gehieneko balioa? Araberakoa da! Balioa “integer” bat denez, sistema eragilearen eta/edo nabigatzailearen araberakoa da.
29 visibility propietatea
Web-garapenean hainbat modu daude elementu bat ezkutatzeko. Ezagunena display: none da, baina ez da beti aukera egokiena. Askotan elementu bat ikusmenez desagertzea nahi dugu, dokumentuaren banaketa aldatu gabe.
visibility propietateak hori kontrolatzen du: elementu bat ikusezin bihurtzeko aukera ematen du, orrialdean hartzen duen espazioa mantenduz. Propietate sinplea da, baina oso erabilgarria animazioetan, tauletan, interfaze dinamikoetan eta osagai interaktiboetan.
Balio garrantzitsuenak hauek dira:
| Balioa | Deskribapena |
|---|---|
| visible | Elementua bistaratzen da |
| hidden | Elementua ezkutatzen da, baina bere espazioa mantentzen du |
| collapse | Tauletarako portaera berezia |
Elementu guztien balio lehenetsia visible da; beraz, ez da beharrezkoa adieraztea eta ez da azalduko. Erabilera ohikoenak hauek dira:
- Informazioa aldi baterako ezkutatzea, diseinua mantenduz.
- Osagaiak erakutsi eta ezkutatzea, beste elementuak desplazatu gabe.
- Egoera ikusgai/ikusezinak dituzten interfazeak.
- Errenkada jakin batzuk ikusmenez desagertu behar duten taulak.
- opacity-rekin konbinatutako animazioak.
29.2 visibility: collapse
Taulen errenkadetarako eta zutabeetarako nagusiki pentsatuta dagoen balio bat dago: collapse.
Nabigatzaile moderno gehienetan, balio honek hidden-en antzera jokatzen du, nahiz eta haren inplementazio osoa elementu motaren araberakoa izan. Ohiko proiektuetan oso gutxitan erabiltzen da tauletatik kanpo.
- Erabili visibility propietatea elementuak ezkutatzeko eta egiaztatu nola mantentzen den haien espazioa.
- Zer gertatzen da tauletan collapse erabiltzean?
29.3 visibility-ren herentzia
visibility propietatea heredagarria da; beraz, hidden balioa duen elementu baten seme guztiak ere ezkutatuta egongo dira.
30 opacity propietatea
Interfaze moderno askotan leunki agertu eta desagertzen diren elementuak aurkitzen ditugu: leiho modalak, goitibeherako menuak, sagua gainetik pasatzean aldatzen diren irudiak edo intentsitatea aldatzen duten botoiak. Efektu horiek guztiek elementu komun bat dute: gardentasuna.
opacity propietateak elementu oso baten gardentasun-maila kontrolatzen du, elementua guztiz ikusgai, partzialki gardena edo guztiz ikusezina izatea ahalbidetuz, dokumentuan espazioa hartzen jarraitzen duen bitartean. Dokumentuan existitzen jarraitzen du eta saguaren gertaerak jasotzen jarrai dezake.
visibility-k ez bezala, opacity efektu bisualak eta animazioak sortzeko pentsatuta dago.
opacity-ren balioa kontrolatzeko, 0 (guztiz gardena) eta 1 (guztiz opakua) arteko balioa erabiltzen da; azken hori da balio lehenetsia. Adibidez:
| Balioa | Emaitza |
|---|---|
0 |
Ikusezin bihurtzen da |
0.25 |
Oso gardena |
0.5 |
Erdi-gardena |
0.75 |
Apur bat gardena |
1 |
Guztiz ikusgai |
opacity propietatea aldatzen dugunean, elementu osoari eragiten dio; beraz, atzeko planoa, testua, irudiak, ertzak eta ikonoak garden bihurtzen dira.
opacity-ek elementu osoari eragiten dio, baita atzeko planoari, testuari, irudiei, ertzei eta ikonoiei ere.
30.1 Trantsizio leunak
Opakutasuna erraz animatu daiteke transition erabiliz, aldaketa berehalakoa izan beharrean pixkanaka egiten baita, adierazitako denbora kontuan hartuz. Trantsizioak sakonago aztertuko ditugu ondorengo unitate batean, baina hona hemen adibide bat:
HTML
<img src="img/moon.jpg" alt="" class="imagen">
CSS
.imagen {
opacity: 0.5;
transition: opacity 0.3s;
}
.imagen:hover {
opacity: 1;
}
Adibide hau oso ohikoa da irudi-galerietan.
- Aurreko ariketa bikoiztu eta alderatu visibility eta opacity.
- Gehitu listener bat hainbat kutxatan. Noiz jartzen da indarrean?
- Sortu irudi-galeria bat opacity erabiliz eta gehitu trantsizio bat sagua gainetik pasatzean.
31 Irudiak eta bideoak doitzea object-fit-ekin
Irudiekin eta bideoekin lan egitean ohikoenetako arazo bat multimedia-fitxategi bat tamaina finkoko edukiontzi batera egokitzea da. width eta height besterik gabe aldatzen baditugu, oso erraza da irudia deformatuta agertzea edo proportzioak galtzea.
object-fit propietateak aukera ematen du irudi edo bideo bat bere edukiontziaren barruan nola doitzen den kontrolatzeko, eta haren aspektu-erlazioa mantendu edo aldatzeko aukera ematen du, gure beharren arabera.
Oso erabilia da txarteletan, irudi-galerietan, erabiltzaile-profiletan, online dendetan eta aplikazio mugikorretan.
object-fit multimedia-elementuetan baino ez da erabilgarria, hala nola <img> eta <video> elementuetan. Ez da nahastu behar background-size propietatearekin; azken hori atzeko planoko irudietarako erabiltzen da.
Imajina dezagun honako egoera hau, non 1920x1080px bereizmeneko argazki bat jartzen dugun:
HTML
<img src="paisaje.jpg" class="foto" alt="">
Forzar tamaño contenedor
.foto {
width: 300px;
height: 300px;
}
Irudia deformatuta agertuko da, nabigatzaileak zabalera eta altuera modu independentean doitzen baititu. object-fit-ekin arazo hori saihestu daiteke, irudia edukiontzira nola egokitu behar den adieraziz. Balio nagusiak hauek dira:
| Balioa | Deskribapena |
|---|---|
| contain | Proportzio osoa mantentzen du. Hutsuneak gera daitezke. |
| cover | Gehiegizko zatia moztuz betetzen du, eta edukiontzi osoa betetzen du. |
| fill | Irudia deformatuz betetzen du. Ez da erabiltzea gomendatzen. |
| none | Jatorrizko tamaina mantentzen du. |
| scale-down | none eta contain balioen artean aukeratzen du. |
Beraz, aurreko adibidea konpontzeko, honako hau jar dezakegu:
Forzar imagen con object-fit
.foto {
width: 300px;
height: 300px;
object-fit: contain;
}
Praktikan, gehien erabiltzen diren balioak cover eta contain dira.
- Sortu irudi-galeria bat eta erabili object-fit.
- Zein balio iruditzen zaizu hobea?
32 object-position propietatea
Aurreko atalean ikusi genuen object-fit: cover propietateak edukiontzi bat erabat betetzea ahalbidetzen duela, irudiaren zati bat moztuz. Hala ere, beste galdera bat sortzen da: irudiaren zein zati mantendu behar da?
object-position propietateak galdera horri erantzuten dio. Irudi edo bideo baten zein eremu mantenduko den ikusgai aukeratzeko aukera ematen du, edukia edukiontziaren barruan mozten denean.
Oso erabilia da avatarrentzat, produktuen argazkientzat, erretratuentzat eta irudi panoramikoak dituzten goiburuentzat.
Edukiontzia baino txikiagoak diren irudietan, irudia edukiontziaren barruan non kokatu aukeratzeko aukera ematen du.
object-position propietateak bi balio onar ditzake:
- Balio horizontala
- Balio bertikala
Balioak honako hauek izan daitezke: top, center, bottom, left, right, ehuneko bat edo neurri bat.
Lehenetsitako balioa irudiaren erdigunea da.
HTML
<img src="paisaje.jpg" class="a">
<img src="icono.jpg" class="b">
CSS
.a {
width: 100px;
height: 100px;
object-fit: cover;
object-position: top left;
}
.b {
width: 400px;
height: 400px;
object-fit: none;
object-position: 25% 50%;
}
Aurreko adibideetan honako egoera hauek suposatzen ditugu:
- Irudia ez da emandako espaziora sartzen:
- Irudia moztu egingo da, baina irudia edukiontziaren goiko ezkerreko zatiarekin lerrokatzen da; beraz, behealdetik eta eskuinaldetik moztuko da.
- Irudia edukiontzia baino txikiagoa da:
- Irudia horizontalki ezkerrerantz (%25) kokatzen da eta bertikalki zentratuta geratzen da.
Aurreko ariketa oinarritzat hartuta, saiatu edukiontziak handiagoak edo txikiagoak egiten, irudi handiagoekin edo txikiagoekin, eta erabili object-position balio desberdinekin.
Maketazio modernoa
33 Sarrera
Orain arte, elementuen itxura bisuala nola sortu ikasi dugu, koloreak, letra-tipoak, ertzak, marjinak eta kutxen eredua erabiliz. Hala ere, oraindik falta zaigu elementuak orri baten barruan nola banatu.
Urte askotan, hori izan da CSSren zeregin konplexuenetako bat. Garatzaileek taulak, elementu flotagarriak (float) eta kokapen absolutua ere erabiltzen zituzten menuak, zutabeak eta orri osoak eraikitzeko. Teknika horiek funtzionatzen zuten, baina zailak ziren mantentzen, eta ez ziren benetan maketazioak sortzeko diseinatu.
CSS3tik aurrera, interfazeak diseinatzeko modua erabat aldatu zuten bi teknologia agertu ziren:
34 Flexbox
Flexbox (Flexible Box Layout) elementuak norabide bakarrean, horizontalean zein bertikalean, antolatzen dituen maketazio-sistema da. Edukiontzi baten barruan elementuak modu errazean banatu eta lerrokatzea ahalbidetzen du.
Abantaila nagusia da nabigatzaileak elementuen artean automatikoki banatzen duela erabilgarri dagoen espazioa, eta horrela float-ekin zeuden arazo asko saihesten dira.
Gaur egun, Flexbox da honako hauek sortzeko gehien erabiltzen den tresna:
- Menu horizontalak.
- Nabigazio-barrak.
- Lerrokatutako botoiak.
- Txartelak.
- Goiburuak.
- Inprimakiak.
- Tresna-barrak.
Flexbox-ek bi elementu mota erabiltzen ditu beti:
- Flex edukiontzia: Flexbox aktibatzen duen elementu gurasoa.
- Flex elementuak: edukiontziaren seme zuzenak.
34.1 Flex edukiontzia
Flex edukiontzia beste elementu batzuk izango dituen elementu gurasoa da. Elementu horiek horizontalean edo bertikalean lerrokatuko dira erabilgarri dagoen espazioan.
HTML
<div class="contenedor">
<div class="caja">A</div>
<div class="caja">B</div>
<div class="caja">C</div>
</div>
CSS
.contenedor {
display: flex;
}
.caja {
width:50px;
height: 50px;
border: 1px solid black;
}
Lehenespenez, elementuak errenkadetan lerrokatzen dira, bata bestearen atzetik, ezkerretik eskuinera. Edukiontzia semeak okupatutako espazioa baino handiagoa bada, lehenespenez ezkerreko zatia soilik beteko da.
Propietate lehenetsiak aldatu nahi baditugu, honako propietate hauek ditugu:
- flex-direction: ardatzaren norabidea zehazten du (errenkada edo zutabea).
- flex-wrap: seme guztientzat lekurik ez badago, lerro edo zutabe berri batera igarotzen den zehazten du.
- flex-flow: aurreko propietateen konbinazioa da.
- gap: semeen arteko tartea adierazteko.
- row-gap: errenkaden arteko tartea.
- column-gap: zutabeen arteko tartea.
Propietate horiek elementu guztien multzoari eragiten diote, eta ez seme bakar bati.
34.1.1 flex-direction
Zein ardatz mota erabili nahi dugun (errenkada edo zutabea) eta haren ordena aukeratzeko aukera ematen digu. Balio posibleak hauek dira:
- row: Errenkada bat sortzen du.
- row-reverse: Errenkada alderantzikatua sortzen du, eskuineko aldetik ezkerrera hasita; lehen seme amaieran jarriko du, ondoren bigarrena, … Garrantzitsua da azpimarratzea irudikapen bisuala soilik aldatzen duela, ez HTML dokumentuaren ordena.
- column: Zutabe bat sortzen du.
- column-reverse: Alderantzizko zutabe bat sortzen du, errenkadaren kasuan bezala, baina zutabe moduan.
34.1.2 flex-wrap
Lehenespenez, Flexbox elementu guztiak lerro bakarrean jartzen saiatzen da, eta lekurik ez badago, semeak konprimitu egin daitezke. flex-wrap erabiliz portaera hori alda dezakegu, adierazitako balioaren arabera:
- nowrap: beti lerro bakarra erabiliko du. Portaera lehenetsia da.
- wrap: hainbat lerro erabiltzea ahalbidetzen du leku nahikorik ez badago.
- wrap-reverse: hainbat lerro erabiltzea ahalbidetzen du, baina alderantzizko ordenan.
34.1.3 flex-flow
Propietate honek flex-direction eta flex-wrap konbinatzen ditu. Funtsean, aurreko bi propietateak idatzi behar izatea saihesten du, eta horrela bakarra izan dezakegu:
CSS
.contenedor {
flex-flow: row wrap;
}
Erabat baliozkoa bada ere, talde askok nahiago dute bi propietateak banaka idaztea, irakurgarritasuna hobetzeko.
34.1.4 gap
Tradizionalki, marjinak erabili behar ziren elementuak elkarrengandik bereizteko. Flexbox-ek askoz ere irtenbide garbiagoa ekarri zuen: gap propietatea. Espazioa automatikoki aplikatzen da elementuen artean, edukiontziaren kanpoko ertzei eragin gabe.
CSS
.contenedor {
gap: 30px;
}
Gaur egun, gap aukera gomendatzen da marjinak erabili beharrean osagai malguak elkarrengandik bereizteko.
Norabide bakoitza banaka kontrolatzea ere posible da.
- row-gap: errenkaden arteko tartea kontrolatzen du.
- column-gap: zutabeen arteko tartea kontrolatzen du.
Propietate hauek bereziki erabilgarriak dira flex-wrap erabiltzen dugunean.
Sortu edukiontzi guraso malgu bat:
- Gehitu hainbat elementu barruan.
- Konbinatu aurretik ikusitako propietateak.
- Egin leihoa txikiagoa, semeak nola berrantolatzen diren ikusteko.
- Gehitu haien artean tarte desberdinak.
34.2 Elementu malguak
Elementu malguak (edukiontzi malgu baten barruan daudenak) hazi, tamaina txikitu, hasierako tamaina desberdina izan, ikusizko ordena aldatu edo gainerako kideekiko modu desberdinean lerrokatu daitezke.
Propietate nagusiak, erabileraren laburpen batekin, hauek dira:
- flex-grow: elementua proportzionalki hazten da.
- flex-shrink: elementuak tamaina murrizten du lekurik ez dagoenean.
- flex-basis: elementuaren hasierako tamaina.
- order: ikusizko ordena.
- align-self: banakako lerrokatzea.
Propietate hauek edukiontziaren semei aplikatzen zaizkie, inoiz ez edukiontziari berari.
34.2.1 flex-grow
flex-grow propietateak adierazten du elementu bat zenbat hazi daitekeen edukiontziaren barruan leku librea dagoenean. Lehenespenez, balioa 0 da; beraz, elementuak ez dira hazten. Propietate honek ez du pixelik adierazten, baizik eta proportzioak.
Tamaina aldatu
.c1 { flex-grow: 1; }
Propietate hau duen elementua edukiontzi gurasoaren soberako espazioa okupatuz haziko da. Seme guztiek balio bera badute, guztiak berdin haziko dira eta espazioa modu ekitatiboan banatuko dute. Horrela, tamaina bereko zutabeak sor ditzakegu.
Aldiz, hiru seme baditugu eta honako balio hauek badituzte:
Tamaina aldatu
.c1 { flex-grow: 1; }
.c2 { flex-grow: 2; }
.c3 { flex-grow: 1; }
Horrela, hiru semeak espazioa banatuko dute, eta “c1” eta “c3” tamaina berekoak izango dira; “c2”, berriz, aurreko biak baino bi aldiz handiagoa izango da.
34.2.2 flex-shrink
flex-grow propietateak hazkundea kontrolatzen duen bitartean, flex-shrink propietateak lekurik ez dagoenean elementu bat zenbat murriztu daitekeen kontrolatzen du. Lehenespenezko balioa 1 da, eta horrek esan nahi du elementua txikitu egin daitekeela.
Txikiagoa izatea eragoztea
.c4 {
width: 150px;
flex-shrink: 0;
}
Horrela, elementu hau ez da txikiago egingo, eta hori erabilgarria da logo eta ikonoetarako.
34.2.3 flex-basis
flex-basis propietateak elementu baten hasierako tamaina definitzen du, espazioa banatu aurretik. Flexbox-ek banaketa kalkulatzeko erabiltzen duen abiapuntua dela imajina dezakegu.
Hasierako tamaina
.c5 {
flex-basis: 200px;
}
Askotan width erabiltzearen ordez erabiltzen da, width-ek elementuaren zabalera definitzen baitu, eta flex-basis-ek, berriz, Flexbox-en algoritmoaren barruko hasierako tamaina definitzen baitu.
Flexbox-ekin lan egiten dugunean, normalean width erabili beharrean flex-basis erabiltzea gomendatzen da, banaketa-sistema honetarako berariaz pentsatuta baitago.
34.2.4 flex propietate laburtua
Aurreko hiru propietateak idatzi behar ez izateko, flex propietatea erabil dezakegu. Propietate honek grow shrink basis ordenari jarraitzen dio; beraz, honako instrukzio hauek baliokideak dira:
Propietateak banaka
.item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 200px;
}
Propietate bakarra
.item {
flex: 1 1 200px;
}
34.2.5 order
order propietateak elementu baten ikusizko ordena aldatzen du.
HTML
<div class="contenedor">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
</div>
CSS
.a { order: 2; }
.b { order: 3; }
.c { order: 1; }
Kasu honetan, ikusizko emaitza C A B izango da. Irudikapen bisuala soilik aldatzen da; HTML hierarkiak, berriz, bere horretan jarraitzen du.
34.2.6 align-self
Orain arte, elementu guztiek lerrokatze bertikal bera partekatzen zuten. align-self erabiliz, elementu bakar batek beste lerrokatze bat izatea lor dezakegu.
CSS
.destacado {
align-self: center;
}
Elementu hau bertikalki zentratuta lerrokatzen da, eta gainerako elementuek edukiontziaren lerrokatzea mantentzen dute.
Aurreko ariketan oinarrituta, erabili propietateak flex edukiontzi baten barruko elementuetarako.
35 Lerrokatzeak
Flexbox-ek float ordezkatzeko arrazoi nagusietako bat elementuak horizontalki eta bertikalki lerrokatzeko ematen duen erraztasuna izan zen. Flexbox-en aurretik, orri bateko elementu bat zentratzeak marjinen konbinazioak, kokapen absolutua edo baita taulak ere erabiltzea eskatzen zuen. Flexbox-ekin, lerrokatzea oso argiak diren hiru propietateren bidez egiten da:
- justify-content: ardatz nagusiaren gaineko lerrokatzea.
- align-items: zeharkako ardatzaren gaineko lerrokatzea.
- align-content: hainbat errenkada edo zutaberen lerrokatzea, flex-wrap dagoenean.
Ardatz nagusiaren eta zeharkako ardatzaren arteko aldea ulertzeko, ondorengo taula erabil dezakegu:
| flex-direction: row | flex-direction: column | |
|---|---|---|
| Ardatz nagusia | Horizontala | Bertikala |
| Zeharkako ardatza | Bertikala | Horizontala |
Propietate hauek erabili aurretik, garrantzitsua da beti edukiontziaren ardatz nagusia identifikatzea.
35.1 justify-content
justify-content propietateak elementuak ardatz nagusian zehar banatzen ditu: errenkadekin lan egiten dugunean, espazio horizontala banatzen du. Balio nagusiak hauek dira:
- flex-start: Lehenespenezko balioa da. Elementuak edukiontziaren hasieran biltzen dira.
- flex-end: Elementuak edukiontziaren amaieran biltzen dira.
- center: Elementuak edukiontziaren erdian biltzen dira.
- space-between: Espazioa elementuen artean banatzen du. Muturrak edukiontziaren ertzei itsatsita geratzen dira.
- space-around: Elementu bakoitzak espazioa jasotzen du bi aldeetan. Kanpoko espazioak barnekoen erdia dira gutxi gorabehera.
- space-evenly: Espazioa erabat modu uniformean banatzen du. Espazio guztiak, muturretakoak barne, berdinak dira.
justify-content adibidea
.contenedor { justify-content: space-between; }
Sortu edukiontziak justify-content propietateak bere seme-alabak lerrokatzeko eskaintzen dituen aldaerekin.
35.2 align-items
align-items propietateak zeharkako ardatzean lerrokatzea kontrolatzen du. Errenkada batekin lan egiten badugu, lerrokatze bertikala esan nahi du. Propietate honek hainbat balio ditu; beraz, komeni da dokumentazioa kontsultatzea, baina nagusiak hauek dira:
- stretch: Lehenespenezko balioa da. Elementuak edukiontziaren altuera osoa betetzeko luzatzen dira, betiere altuera definituta ez badute. Oso erabilgarria da altuera bereko zutabeak sortzeko.
- center: Elementuek definitutako altuera mantentzen dute eta beren ardatz bertikalarekiko lerrokatzen dira.
- flex-start: Elementuak edukiontziaren goiko aldean lerrokatzen dira bertikalki.
- flex-end: Elementuak edukiontziaren beheko aldean lerrokatzen dira bertikalki.
- baseline: Testuaren oinarri-lerroarekiko lerrokatzen dira.
Azalpenetan errenkaden erabilera hartu da erreferentziatzat.
align-items adibidea
.contenedor {
display: flex;
flex-wrap: wrap;
align-items: center;
}
Egiaztatu align-items-en azaldutako balioak eta egin zeure adibideak.
35.3 align-content
align-content propietatea align-items-ekin nahastu ohi da, baina haren funtzioa desberdina da. flex-wrap dagoenean eta hainbat errenkada edo zutabe daudenean soilik jarduten du. Parametro honekin errenkada osoak lerrokatzen dira, ez banakako elementuak (aurreko parametroan gertatzen zen bezala). Balioak aurrekoen antzekoak dira:
- center: Errenkadak edukiontziaren elementuaren ardatz bertikalaren erdian lerrokatzen dira.
- start: Errenkadak edukiontziaren goiko aldean lerrokatzen dira bertikalki.
- end: Errenkadak edukiontziaren beheko aldean lerrokatzen dira bertikalki.
- space-between, space-around, space-evenly: justify-content-en azaldutakoaren modu berean funtzionatzen dute, baina errenkada-mailan.
Errenkada bakarra badago, align-content-ek ez du inolako eraginik.
align-content adibidea
.contenedor {
display: flex;
flex-wrap: wrap;
align-content: center;
}
align-content propietateak lerro/zutabe osoan eragiten du.
Egiaztatu align-items-en azaldutako balioak eta egin zeure adibideak.
36 CSS Grid
Orain arte Flexbox erabili dugu elementuak norabide bakarrean banatzeko. Hala ere, interfaze askok errenkadak eta zutabeak aldi berean kontrolatu behar dituzte: irudi-galeriak, administrazio-panelak, egutegiak edo web-orri baten banaketa osoa.
CSS Grid Layout, besterik gabe Grid izenez ezagutzen dena, mota horretako saretak sortzeko bereziki diseinatutako bi dimentsioko maketazio-sistema da. Flexbox-ek elementuak errenkada edo zutabe batean antolatzen dituen bitartean, Grid-ek errenkadek eta zutabeek aldi berean osatutako egitura oso bat definitzea ahalbidetzen du. Gaur egun, Grid da web-aplikazio baten layout nagusia eraikitzeko gomendatzen den tresna.
Bi sareta/grid mota daudela defini dezakegu:
- Grid esplizitua: errenkaden eta/edo zutabeen kopurua eta tamaina eskuz definitzen dira. Garatzaileak esplizituki definitutako diseinu finko bat du. Normalean, webgunearen egitura orokorra edo irakurketa-zutabeen sistema definitzeko erabiltzen da…
- Grid inplizitua: nabigatzaileak behar denean automatikoki sortzen dituen errenkadek eta/edo zutabeek osatzen dute. Normalean argazki-galerietan edo web-orrietako azal-diseinuetan erabiltzen da, elementu kopuru finko bat baina tamaina desberdinak daudenean… Hasierako sarean zehaztu dena baino elementu gehiago daudenean gertatzen da.
36.1 Grid edukiontzia
Grid aktibatzeko, nahikoa da elementu bat sareta-edukiontzi bihurtzea; une horretatik aurrera, haren seme-alaba zuzen guztiak saretako elementu bihurtzen dira.
HTML
<div class="contenedor">
<div class="caja">A</div>
<div class="caja">B</div>
<div class="caja">C</div>
</div>
CSS
.contenedor {
display: grid;
}
.caja {
width:50px;
height: 50px;
border: 1px solid black;
}
Nahiz eta oraindik errenkadarik eta zutaberik definitu ez dugun, elementua dagoeneko Grid edukiontzia da. Atal honetan ikusiko ditugun propietateak beti edukiontziari aplikatzen zaizkio. Sareta/grid bat bi pista (track) motak osatzen dute:
- Zutabeak: grid-template-columns
- Lerroak/Errenkadak: grid-template-rows
grid-template-areas izeneko ezaugarri berezi bat dago, aurrerago ikusiko duguna.
36.1.1 grid-template-columns
Grid-en propietate garrantzitsuena da, eta zutabeak sortzeko erabiltzen da:
CSS
.contenedor {
display: grid;
grid-template-columns: 150px 150px 150px;
}
Balio bakoitzak zutabe baten zabalera definitzen du; beraz, aurreko adibidean 150px-eko hiru zutabe sortzen dira.
36.1.1.1 fr unitatea
fr (fraction) unitateak eskuragarri dagoen espazioaren zati bat adierazten du.
CSS
.contenedor {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
}
Hiru zutabeek espazioa proportzio desberdinetan banatzen dute; kasu honetan, erdiko zutabeak alboetakoen bikoitza hartzen du. Funtzionamendua flex-grow-en oso antzekoa da. Unitate hau errenkadekin ere erabil daiteke.
36.1.2 grid-template-rows
Lerroak modu baliokidean definitzen dira.
CSS
.contenedor {
display: grid;
grid-template-rows: 80px 200px 60px;
}
Kasu honetan, tamaina desberdineko hiru errenkadaz osatutako grid bat sortu da.
36.2 gap Grid-en
Flexbox-ek bezala, Grid-ek gap erabiltzen du elementuak elkarrengandik bereizteko. Horrek marjinak erabiltzea ordezkatzen du eta errenkaden eta zutabeen arteko tarte uniformea sortzen du.
CSS
.contenedor {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 20px;
}
gap-ez gain, row-gap eta column-gap ere badaude.
36.3 repeat() funtzioa
Zutabe berdin asko daudenean, eskuz idaztea errepikakorra da; horregatik, repeat() funtzioa erabil dezakegu. Adibidez, lau zutabe sortzeko 1fr 1fr 1fr 1fr idatzi beharrean, honako hau erabil dezakegu:
CSS
.contenedor {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
}
Emaitza erabat bera da, eta kodea irakurgarriagoa da. repeat() CSS Grid-en gehien erabiltzen diren funtzioetako bat da.
36.4 Grid moldagarriak
Grid responsiveak sor ditzakegu minmax() eta auto-fit erabiliz.
CSS
.contenedor {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 20px;
}
Jarraian, funtzioaren azalpena:
- repeat: funtzioa zutabe-sistema errepikatzen saiatzen da.
Beraz, zutabe-sistema bat sortzea da helburua, zutabe bakoitzak gutxienez 220px izan ditzan eta, espazio gehiago badago, zutabe berriak sor daitezen.
Patroi hau web-garapen modernoan gehien erabiltzen denetako bat da.
Sortu grid bidez sareta den edukiontzi guraso bat, erabili aurretik ikusitako propietateak eta erabili errepikapen-sistema.
36.5 Beste parametro batzuk
Beste parametro batzuk ere badaude gridak gure beharretara egokitzeko eta kontrolatzeko. Jarraian, dokumentazioan agertzen den zerrendako batzuk ditugu.
- grid-auto-flow: kokapen automatikoko algoritmoaren funtzionamendua kontrolatzen du, automatikoki kokatutako elementuak saretan nola banatzen diren zehaztuz (errenkadetan edo zutabeetan).
- grid-auto-columns: grid-aren zutabeen tamaina zehazten du.
- grid-auto-rows: grid-aren errenkaden tamaina zehazten du.
- grid-column-start: elementu batek sareko zutabe baten barruan duen hasierako kokapena zehazten du.
- grid-column-end: elementu batek sareko zutabe baten barruan duen amaierako kokapena zehazten du.
- grid-row-start: elementu batek sareko errenkada baten barruan duen hasierako kokapena zehazten du.
- grid-row-end: elementu batek sareko errenkada baten barruan duen amaierako kokapena zehazten du.
36.6 Grid Areas
Orain arte, errenkada eta zutabe kopurua definituz eraiki ditugu sareak, eta elementuak automatikoki kokatzen utzi dugu. Hala ere, web-orri baten egitura osoa diseinatzen dugunean, erosoagoa izan ohi da layout-aren eremu bakoitzari izen bat ematea, errenkada eta zutabeen zenbakiekin lan egitea baino.
Grid Areas-ek “header”, “menu”, “main” edo “footer” bezalako izenak esleitzea ahalbidetzen die sareta bateko eskualde desberdinei, eta horrela kodea askoz irakurgarriagoa eta mantentzeko errazagoa bihurtzen da. grid-template-areas propietatearen bidez, banaketa hau egin dezakegu, ikusmen aldetik argiagoa izan daitekeena.
Imajina dezagun ohiko web-orri bat, hainbat atal dituena:
HTML
<div id="page">
<div id="logo">logo</div>
<header>Header</header>
<nav>Navigation</nav>
<main>Main area</main>
<div id="ads">ads</div>
<footer>Footer</footer>
</div>
CSS
#page {
display: grid;
width: 100%;
height: 100vh;
grid-template-areas:
"logo head head"
"nav main ads"
". foot .";
grid-template-rows: 50px 1fr 30px;
grid-template-columns: 150px 1fr 150px;
}
#page > header {
grid-area: head;
}
#page > nav {
grid-area: nav;
}
/* resto áreas */
grid-template-areas-en ikus daiteke nola bereizten den elementu bakoitza modu “bisualean”, hiru errenkada eta hiru zutabe sortuz, eta “gelaxka” bakoitzak izen bat du. Izen bat errenkada berean errepikatzen denean, horizontalki zabaltzen da; gauza bera gertatzen da zutabeekin bertikalki. Puntu batez (.) markatutako eremuak gelaxka hutsak dira. Emaitza honako hau izango litzateke:
“Gelaxketan” izenak jartzean, eremuek laukizuzenak osatu behar dituzte; ezin dute forma “arrarorik” izan:
Sortu webgune modernoen txantiloiak grid-template-areas erabiliz.
37 Grid eta Flexbox batera
Grid eta Flexbox ez dira teknologia lehiakideak, baizik eta osagarriak. Ohikoa da biak batera erabiltzea, bakoitzak ezaugarri batzuk eskaintzen baititu, eta horrek bestea erabiltzea baino errazagoa egiten du. Gainera, biak CSS estandarraren parte dira, nabigatzaile moderno guztiekin bateragarriak dira eta proiektu berean batera erabil daitezke.
Hurrengo taulan bi teknologien ezaugarri desberdinen laburpen osoa ikus daiteke:
| Flexbox | Grid | |
|---|---|---|
| Dimentsioak | 1 | 2 |
| Errenkadak | Bai | Bai |
| Zutabeak | Bai | Bai |
| Errenkaden eta zutabeen aldibereko kontrola | Ez | Bai |
| Espazioaren banaketa automatikoa | Bikaina | Bikaina |
| Layout osoa | Mugatua | Ezin hobea |
| Osagai txikiak | Ezin hobea | Posible |
| Galeriak | Onargarria | Bikaina |
Adibidez, bi teknologiak batera erabiltzeko modu bat honako hau izan daiteke:
- Txantiloi orokorra: Grid-ekin sortua, hainbat atalekin:
- Header: Flexbox erabiltzea logoa, atalak, bilaketa-koadroa eta abar kokatzeko.
- Sidebar
- Main: Edukiaren arabera, Flexbox edo Grid erabil daiteke.
- Footer: Flexbox atalak gehitzeko.
Responsive diseinua
38 Sarrera
Internet 1990eko hamarkadan ezaguntzen hasi zenean, erabiltzaile gehienek mahaigaineko ordenagailuetatik nabigatzen zuten, eta monitoreen bereizmen-teknologiak antzeko tamainak zituen. Web-orriak bereizmen bakar bat kontuan hartuta diseinatzen ziren; beraz, ohikoa zen 800 edo 1024 pixeleko zabalera finkoa zuten webguneak sortzea.
Denborarekin, ordenagailu eramangarriak, pantaila panoramikoak, tabletak, telefono adimendunak eta baita Internetera konektatutako telebistak ere agertu ziren. Bat-batean, web-orri bera behar bezala ikusi behar zen 320 pixel inguruko pantailetan zein 2.500 pixel baino gehiagoko zabalerako monitoreetan. Aniztasun horrek diseinurako ikuspegi berri bat behar izatea ekarri zuen: Responsive Web Design.
Gaur egun, diseinu responsive ezinbesteko baldintza da edozein web-garapenetan. Ez da soilik web-orri bat mugikor batean “sartzea”, baizik eta banaketa, elementuen tamaina eta erabiltzaile-esperientzia gailu bakoitzera egokitzea.
Diseinu responsive bat ez da soilik web-orria mugikor batean sartzea; banaketa, elementuen tamaina eta erabiltzaile-esperientzia gailu bakoitzera egokitzea baizik.
38.1 Web moldagarria eta web responsive
Askotan sinonimo gisa erabiltzen badira ere, bi kontzeptuen artean desberdintasunak daude.
| Diseinu moldagarria (Adaptive) | Diseinu responsive |
|---|---|
| Webgunearen hainbat bertsio | Bertsio bakarra |
| Aurrez zehaztutako zabalerak | Diseinu fluidoa |
| Aldaketak puntu zehatzetan | Etengabeko egokitzapena |
| Mantentze-lan handiagoa | Malguagoa |
Diseinu moldagarriak webgune beraren hainbat bertsio sortzen ditu (adibidez, bat mugikorrerako eta beste bat mahaigaineko ordenagailurako). Diseinu responsive-ak egitura bakarra erabiltzen du, CSS bidez egokitzen dena.
Gaur egun, gomendatutako ikuspegia responsive da.
39 Viewport
Web-orri bat ordenagailu batean bistaratzen denean, nabigatzaileak normalean pantaila nahiko handi bat du eskuragarri. Hala ere, web-orri bera telefono mugikor batetik bisitatzen denean, erabilgarri dagoen eremua askoz txikiagoa da.
Lehen smartphoneak agertu zirenean, webgune asko ez zeuden prestatuta pantaila txikietarako. Ordenagailuetarako diseinatutako web-orriak erakusten saiatzeko, nabigatzaile mugikorrek pantaila fisikoa baino nabarmen zabalagoa zen viewport birtuala erabiltzen zuten. Emaitza web-orri txiki-txiki bat zen, eta erabiltzaileak zoom bidez handitu behar zuen.
Nabigatzaileak gailu mugikorretan web-orriaren tamaina behar bezala interpreta dezan, viewport kontzeptua erabiltzen da. Nabigatzailearen leihoaren barruan web-orri batek duen ikusgai dagoen eremua da. Funtsezkoa da kontzeptu hori ulertzea Media Queries eta diseinu responsive-rekin lanean hasi aurretik.
39.1 Viewport-a ez da nahitaez pantailaren bereizmenaren berdina
Garrantzitsua da viewport eta pantailaren bereizmenaren kontzeptuak ez nahastea. Gaur egun, gailu mugikorrek ordenagailuko pantaila baten bereizmen fisiko bera izan dezakete (1920 x 1080 pixel, edo are gehiago), baina horrek ez du esan nahi web-orri batek 1080px-eko zabalera duen viewport bat duenik.
Gailu mugikorrek pixel-dentsitate desberdina erabiltzen dute (ppi edo pixels per inch) ohiko pantailekin alderatuta, eta nabigatzaileek viewport logiko bat erabiltzen dute web-orriak irudikatzeko. Horregatik, CSSri buruz hitz egiten dugunean, normalean CSS pixelekin lan egiten dugu, ez panelaren pixel fisikoekin.
39.2 meta viewport etiketa
Nabigatzaile mugikorrari viewport-a nola erabili behar duen adierazteko, <meta> etiketa erabiltzen da <head> elementuaren barruan. Ohiko konfigurazioa honako hau da:
HTML viewport-ekin <head> elementuan
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mi página</title>
</head>
<body>
<h1>Mi página responsive</h1>
</body>
</html>
Etiketa hau ia nahitaezkoa da responsive izan nahi duen edozein web-orri modernotan. Jarraian, etiketaren atributu bakoitzaren azalpena dago, nahiz eta komeni den dokumentazioa kontsultatzea, erabil daitezkeen atributu guztiak ikusteko:
- <meta … >: beste etiketa batzuek irudikatu ezin dituzten metadatuak adierazten dituen HTML etiketa da. Barruan hainbat atributu onartzen ditu:
- name="viewport": metadatuen izena da; kasu honetan, viewport-ari egiten diogula erreferentzia adierazten du.
- content="…": metadatuen edukia da. Komaz bereizitako balioen zerrenda bat da, key=value motako gako-balio bikoteak dituena. Kasu honetan, honako gako hauek definitzen dira:
- width=device-width: nabigatzaileari adierazten dio viewport-aren zabalerak gailuan erabilgarri dagoen zabalerarekin bat etorri behar duela, CSS pixelekin neurtuta.
- initial-scale=1.0: web-orriaren hasierako zoom-maila adierazten du. 0 eta 100 arteko balioa izan daiteke; 1 balioa %100 da, hau da, ez dago zoom gehigarririk.
meta viewport etiketa <head> goiburuan egon behar da.
Sortu HTML orri bat meta viewport etiketarekin eta egiaztatu zure mugikorrean nola ikusten den. Ezabatu etiketa eta egiaztatu berriro.
39.3 Viewport-arekin lotutako unitateak
CSSek viewport-arekin lotutako unitateak ditu, aurretik ikusi dugun bezala. Adibide bat honako hau izango litzateke:
HTML con cabecera viewport
.content {
height: 100vh;
}
Arau honek adierazten du elementuak viewport-aren altueraren %100aren baliokidea izango den altuera izango duela.
39.4 Viewport-a eta gailuaren orientazioa
Telefono bat bi orientaziotan erabil daiteke: bertikalean eta horizontalean. Viewport-aren zabalera eta altuera aldatu egiten dira gailua biratzean. Horri esker, web-orri responsive-ek beren banaketa automatikoki egokitu dezakete.
39.5 Erabiltzailearen zooma ez blokeatu
Viewport etiketaren konfigurazioaren barruan, erabiltzailearen zooma blokeatzeko aukera dago:
HTML con cabecera viewport
<meta name="viewport"
content="width=device-width, initial-scale=1.0,
maximum-scale=1.0, user-scalable=no"
>
Ez da gomendagarria user-scalable=no erabiltzea web-orri arrunt batean. Erabiltzaileari edukia handitzea eragozteak irisgarritasunari kalte egin diezaioke, bereziki irakurtzeko orriaren tamaina handitu behar duten pertsonei. iPhone-etan, iOS 10etik aurrera, Applek konfigurazio hori ez du aintzat hartzen.
Ez da gomendagarria erabiltzailearen zooma blokeatzea.
40 Media Queries
Web-orri responsive batek ez du bere diseinua automatikoki aldatzen. Nabigatzaileak gailuaren ezaugarrien arabera estilo batzuk edo besteak aplikatzeko mekanismo bat behar du. Mekanismo horri Media Queries deitzen zaio.
Media Queries CSSren ezaugarri bat dira, baldintzazko arauak idazteko aukera ematen duena. Horiei esker, zutabe kopurua aldatu, tipografiaren tamaina egokitu, elementuak ezkutatu edo layout bat erabat berrantola dezakegu viewport-aren tamaina aldatzen denean. Responsive Web Design-aren zutabeetako bat dira; Ethan Marcottek proposatu zuen 2010ean.
40.1 Media Queries-en konfigurazioa
Media Queries-ak estilo-bloke bat aplikatu aurretik ebaluatzen dira, eta haien sintaxia honako hau da:
Sintaxis
@media (condición) {
/* Reglas CSS */
}
Adibidea
@media(max-width:768px){
/*pantallas pequeñas*/
body {
background: red;
}
}
Adibidea
@media(min-width:768px){
/*pantallas grandes*/
body {
background: gray;
}
}
Baldintza adierazteko sintaxia ohikoena honako hauek erabiltzea da:
- min-width: adierazitako tamaina gutxienez denean aplikatzeko.
- max-width: adierazitako tamaina gehienez denean arauak aplikatzeko.
Media Query baten barruan dauden arauak baldintza egia denean soilik aplikatzen dira.
Aurreko adibideak konfigurazio-fitxategi berean egon daitezke, eta web-aplikazio bererako behar adina erabil ditzakegu.
40.2 Baldintzak konbinatzea
Hainbat baldintza konbina daitezke and erabiliz:
Media Queries kobinatu
@media (min-width: 768px) and (max-width: 1199px) {
body {
background: beige;
}
}
Arau hau 768px eta 1199px artean soilik aplikatuko da. Erabilgarria da tabletetarako estilo espezifikoak sortu nahi ditugunean.
40.3 Gailuaren orientazioaren arabera
Media Queries-ek gailuaren orientazioa ere hauteman dezakete, hau da, portrait moduan (bertikalean) edo landscape moduan (horizontalean) dagoen kontuan hartuta.
Gailuaren orientazioa
@media (orientation: landscape) {
body {
background: beige;
}
}
Horri esker, zenbait osagai egokitu ditzakegu erabiltzaileak gailua biratzen duenean.
40.4 Eskuragarri dauden beste ezaugarri batzuk
Zabalera gehien erabiltzen den baldintza bada ere, beste hainbat ezaugarri daude.
| Ezaugarria | Adibidea |
|---|---|
| Zabalera (gutxienez) | min-width |
| Zabalera (gehienez) | max-width |
| Altuera (gehienez) | max-height |
| Orientazioa | orientation |
| Inprimaketa | |
| Pantaila | screen |
Adibidez, inprimatzeko ere web-orria alda dezakegu:
Media Query inprimatzerakoan
@media print {
nav {
display: none;
}
}
Nabigatzaileak estilo hauek inprimaketa edo PDF bat sortzean soilik aplikatuko ditu; horrela, ez du nabigazio-barra inprimatuko.
40.5 Arauen ordena
CSSren ordenak garrantzitsua izaten jarraitzen du Media Queries erabiltzean. Bi arauek espezifikotasun bera badute, behean agertzen den eta baldintza betetzen duen araua izango da nagusi.
Arauen ordena
h1 { font-size: 16px; }
@media (min-width: 768px) {
h1 {
font-size: 32px;
}
}
Portaera horrek cascade-aren ohiko arauak jarraitzen ditu.
40.6 Adibideak
Jarraian, aurretik ikusitakoaren arabera estiloak aldatzen dituzten media queries batzuen adibideak ditugu.
Adibide honetan portaera honako hau da:
- Mugikorrean → 1.5rem.
- Tabletetan eta ordenagailuetan → 3rem.
Adibide basikoa
h1 { font-size: 1.5rem; }
@media (min-width: 768px) {
h1 {
font-size: 3rem;
}
}
Oinarrizko estiloak gailu txikienari dagozkio.
Hurrengo adibidean, Grid baten bistaratzea aldatzen da, pantailaren tamainaren arabera.
Grid-ekin adibidea
#grid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
@media (min-width: 768px) {
#grid {
grid-template-columns: repeat(3, 1fr);
gap: 3rem;
}
}
Pantaila handiak dituzten gailuetan hiru zutabe egongo dira; pantaila txikietan, berriz, bakarra ikusiko da.
Sortu HTML orri bat, pantaila-tamaina desberdinetarako media queries desberdinak dituena. Egiaztatu funtzionatzen duela mahaigaineko nabigatzailean zooma eginez eta mugikorrarekin.
41 Breakpoints eta haustura-puntuak
Aurreko atalean ikasi dugu Media Queries-ek baldintza jakin bat betetzen denean estiloak aplikatzeko aukera ematen dutela. Sor dakigukeen galdera honakoa da: zein zabaleratan aldatu behar dugu diseinua?:
Breakpoints edo haustura-puntuak interfazearen banaketa aldatzen den viewport-aren balioak dira. Horiei esker, web-orri bera berrantola daiteke telefono mugikorretan, tabletetan, ordenagailu eramangarrietan edo mahaigaineko monitoreetan esperientzia egokia eskaintzeko.
Garrantzitsua da ulertzea breakpoint batek ez duela gailu zehatz bat adierazten, baizik eta diseinua tamaina horretara egokitzeko Media Query desberdin bat aplikatzea erabakitzen dugun unea.
Aurretik hainbat adibide ikusi ditugu, hala nola honako hau:
Media Query
@media (min-width: 768px) {
/* CSS */
}
Kasu honetan, 768 px da breakpoint-a, hau da, “viewport-ak 768px edo gehiago hartzen dituenean, zenbait arau aplikatu” esan nahi du.
41.1 Ohiko breakpoint-ak
Proiektu bakoitzak balio desberdinak erabil ditzakeen arren, eta gehien komeni zaizkigunak aukeratu ditzakegun arren, badira oso hedatuta dauden haustura-puntu batzuk:
Breakpoints. Iturria: devsheets
/* Standard Breakpoints */
/* Mobile First Approach */
@media (min-width: 320px) { /* Mobile Small */ }
@media (min-width: 480px) { /* Mobile Large */ }
@media (min-width: 576px) { /* Mobile XL */ }
@media (min-width: 768px) { /* Tablet */ }
@media (min-width: 1024px) { /* Desktop */ }
@media (min-width: 1200px) { /* Large Desktop */ }
@media (min-width: 1440px) { /* Extra Large */ }
/* Desktop First Approach */
@media (max-width: 1439px) { /* Below XL */ }
@media (max-width: 1199px) { /* Below Large */ }
@media (max-width: 1023px) { /* Below Desktop */ }
@media (max-width: 767px) { /* Below Tablet */ }
@media (max-width: 479px) { /* Below Mobile Large */ }
Balio hauek orientagarriak dira, eta ez dira CSSren estandarraren parte. Proiektu bakoitzak bere diseinura hobekien egokitzen diren breakpoint-ak aukeratu behar ditu.
CSSko frameworks-ek ere sistema hauek erabiltzen dituzte, eta guztiek normalean aliasak erabiltzen dituzten arren, tamainak antzekoak dira. Adibidez, badago nolabaiteko aldea Bootstrap eta TailwindCSS artean:
| Bootstrap | Tailwindcss | |
|---|---|---|
| sm | min-width: 576px | min-width: 640px |
| md | min-width: 768px | min-width: 768px |
| lg | min-width: 992px | min-width: 1024px |
| xl | min-width: 1200px | min-width: 1280px |
| xxl / 2xl | min-width: 1400px | min-width: 1536px |
41.1.1 JavaScript bidez viewport-aren tamaina ezagutzea
Responsive orri baten garapenean oso erabilgarria da jakitea zein den nabigatzailea erabiltzen ari den viewport-aren benetako tamaina. Media Queries-ek automatikoki estilo egokiak aplikatzen dituzten arren, dimentsio horiek ezagutzeak lagundu egiten digu breakpoint jakin batean sartzen ari garen egiaztatzen edo gure diseinuaren portaera arazten.
JavaScriptek viewport-aren zabalera eta altuera lortzeko aukera ematen du window.innerWidth eta window.innerHeight propietateen bidez. Propietate horiek nabigatzailearen eremu ikusgaiaren tamaina itzultzen dute CSS pixelekin, hau da, CSSek Media Queries-ak ebaluatzeko erabiltzen dituen unitate berberekin.
Pantailaren tamaina jakitea
console.log("Ancho:", window.innerWidth);
console.log("Alto:", window.innerHeight);
Kode hau nabigatzailearen kontsolatik exekutatzean, leihoaren tamaina aldatzean aldatuko diren bi zenbaki ikusiko ditugu. Adibidez, leihoaren zabalera 768px-etik behera murrizten badugu, window.innerWidth balioa ere txikiagoa izango da, eta dagozkion Media Queries-ak aplikatzen hasiko dira.
Garrantzitsua da ulertzea viewport-a ere aldatu egiten dela mahaigaineko nabigatzaile batean zooma egiten dugunean. Zooma %125era edo %150era handitzean, nabigatzaileak orriaren zati txikiagoa erakusten du; beraz, viewport eraginkorra txikitu egiten da eta, ondorioz, itzulitako balioak txikiagoak izango dira.
Era berean, zooma murriztean, viewport-a handitu egiten da eta lortutako balioa handiagoa izango da. Horregatik, Media Queries-ek eta JavaScriptek beti viewport eraginkorrarekin lan egiten dute, eta ez monitorearen bereizmen fisikoarekin.
Aldaketa hauek ikusteko modu oso erosoa resize gertaera entzutea da. Gertaera hori viewport-aren tamaina aldatzen den bakoitzean aktibatzen da (leihoa tamainaz aldatzean edo, nabigatzaile askotan, zooma aldatzean).
Pantailaren tamaina jakitea
window.addEventListener("resize", () => {
console.log(
`Viewport: ${window.innerWidth} × ${window.innerHeight}`
);
});
Este script txiki hau oso erabilgarria da garapenean zehar, gure responsive diseinua lanean ari den dimentsioak denbora errealean ikusteko aukera ematen baitu.
Garrantzitsua da kode hau produkzioan ez uztea, errendimendu-arazoak saihesteko.
41.2 Gailuetarako ez, edukirako diseinatzea
Oso ohikoa den akats bat iPhone baterako edo gailu zehatz baterako breakpoint bat sortzea dela pentsatzea da. Egia esan, responsive diseinu modernoak gailu zehatzetarako lan egitea saihesten du.
Responsive diseinu modernoak gailu zehatzetarako lan egitea saihesten du.
Estrategia zuzena edukia behar bezala ikusten ez den unea behatzea da. Adibidez, elementu bat 720px-etan estuegi ikusten hasten bada, hori izan daiteke breakpoint egokia, nahiz eta gailu zehatz batekin bat ez etorri. Edukia bera izan behar da diseinu-aldaketa zehazten duena.
41.3 Breakpoint-ak eta garapen-tresnak
Nabigatzaileek responsive diseinu-modu bat dute garapen-tresnen barruan. Bertatik honako hauek egin ditzakegu:
- Telefonoak eta tabletak simulatu.
- Zabalera pertsonalizatua ezarri.
- Viewport-a denbora errealean ikusi.
- Media Queries-ak noiz aktibatzen diren egiaztatu.
Responsive interfazeak garatzeko ezinbesteko tresna da, hainbat gailu fisikoki eduki beharrik gabe.
Nabigatzaileek aurrez konfiguratutako gailuak simulatzeko zerrenda bat dute, eta, horrez gain, gure gailu propioa gehi dezakegu, interesatzen zaizkigun datuekin.
Aldatu aurreko ariketa eta gehitu JavaScript funtzioa viewport-a denbora errealean ezagutzeko.
42 Mobile First diseinua
Urte askoan, webguneak ordenagailuak kontuan hartuta diseinatzen ziren lehenik. Mahaigaineko bertsioa amaitutakoan, garatzaileak mugikorretara egokitzen saiatzen ziren, Media Queries eta salbuespen ugari erabiliz. Ikuspegi horrek funtzionatzen zuen, baina mantentzen zailak ziren estilo-orriak eta gailu mugikorretarako gutxi optimizatutako orriak sortzen zituen.
2010etik aurrera, telefono mugikorretatik nabigatzen zuten erabiltzaileen kopurua azkar hazten hasi zen. Orri askok pantaila handietarako diseinatuta jarraitzen zuten, eta esperientzia txarra eskaintzen zuten gailu txikietan.
Luke Wroblewski diseinatzaileak Mobile First filosofia zabaldu zuen, oso ideia sinple bat proposatuz: muga gehien dituen gailutik (tamainari dagokionez) hastea eta erabilgarri dagoen espazioa handitu ahala funtzionalitateak gehitzea. Ikuspegi horrek hasieratik benetan garrantzitsua den edukia lehenestera behartzen du. Gaur egun, framework eta web-garapeneko gida gehienek gomendatzen duten ikuspegia da.
Lan-sekuentzia honako hau da:
- Mugikorrerako diseinatu.
- Tabletara egokitu.
- Mahaigaineko ordenagailurako hobetu.
- Monitore handietan dagoen espazioa aprobetxatu.
CSSn, horrek esan nahi du ohiko estiloak mugikorrarenak direla, eta Media Queries-ek, oro har, min-width erabiltzen dutela.
42.1 Proiektu baten ohiko egitura
Mobile First-en, estiloak tamaina txikienetik handienera idazten dira.
Mobile first estruktura
/* Estilos base (móvil) */
body { margin: 0; }
/* ... */
@media (min-width: 768px) {
/* Adaptaciones para Tablet */
}
@media (min-width: 1200px) {
/* Adaptaciones para Escritorio */
}
Kontuan izan Media Queries-ek estiloak gehitzen dituztela, ez dutela estilo-orri osoa ordezkatzen.
42.2 Mobile First ikuspegiaren abantailak
Gure web-aplikazioa diseinatzerakoan, mobile first ikuspegiarekin hastea lagungarria da errendimendua hobetzeko, gailu mugikorrek normalean potentzia txikiagoa eta konexio motelagoak izaten baitituzte. Lehenik haientzat diseinatzeak orri arinagoak eta azkarragoak sortzen laguntzen du.
Bestalde, espazio mugatuak benetan zer informazio den garrantzitsua eta webgunean zein lekutan egon beharko lukeen galdetzera behartzen du, baita zein diren bigarren mailako elementuak ere. Horrek interfaze garbiagoak sortzen laguntzen du.
Azkenik, mahaigaineko estiloak ezabatu beharrean, hobekuntzak gehitzen ditugu soilik, erabilgarri dagoen zabalera handitu ahala.
43 Desktop First diseinua
Desktop First ikuspegia mahaigaineko bertsioa diseinatzen hasten da, eta ondoren interfazea gero eta pantaila txikiagoetara egokitzen du, max-width duten Media Queries erabiliz. Gaur egun proiektu berrietarako normalean gomendatzen ez den aukera bada ere, oso garrantzitsua da ezagutzea, oraindik ere webgune eta ondarezko proiektu ugaritan erabiltzen baita.
Lan-sekuentzia honako hau da:
- Ordenagailurako diseinatu.
- Ordenagailu eramangarrira egokitu.
- Tabletara egokitu.
- Mugikorrera egokitu.
2000ko hamarkadan, erabiltzaileen gehiengo zabalak mahaigaineko ordenagailuetatik nabigatzen zuen. Logikoa zen diseinatzaileak 960 pixeleko zabalerako orriak sortzen hastea eta, ondoren, gailu txikietarako egokitzapen batzuk gehitzea, telefono adimendunak agertzen hasi zirenean.
Oso ohikoa zen honako adibide hau:
Desktop first adibidea
.wrapper {
width: 960px;
margin: 0 auto;
}
Telefono mugikorrak iritsi zirenean, Media Queries gehitu behar izan ziren egitura hori aldatzeko.
43.1 Desktop First-en ohiko egitura
Estilo nagusiak mahaigaineko ordenagailuari dagozkio.
Desktop first estruktura
/* Estilos base (escritorio) */
body { font-size: 18px; }
/* adaptaciones */
@media (max-width: 992px) { }
@media (max-width: 768px) { }
@media (max-width: 576px) { }
Kontuan izan orain baldintzek gehienezko zabalerak erabiltzen dituztela.
43.2 Desktop First-en abantailak eta desabantailak
Ikuspegi hau oraindik ere erabilgarria izan daiteke kasu batzuetan.
- Barne-erabilerako aplikazioak: Aplikazio bat bulegoko ordenagailuetan soilik erabiliko bada, zentzuzkoa izan daiteke lehenik mahaigaineko ordenagailuetarako diseinatzea.
- Ondarezko proiektuak: Duela urte batzuk garatutako webgune askok filosofia hori jarraitzen dute dagoeneko. Kasu horietan, normalean praktikoagoa da egitura bera mantentzea CSS erabat berridaztea baino.
Baina hainbat desabantaila ere baditu web-aplikazio publiko moderno bat sortzea denean helburua:
- Arau zuzentzaile gehiago: Ohikoa da mahaigaineko estiloak “desegin” behar izatea.
- Kode gehiago: Aurreko puntuaren ondorioz, normalean CSS arau gehiago erabiltzen dira mobile first ikuspegian baino.
44 Irudi moldagarriak eta responsive irudiak
Irudiak izan ohi dira web-orri baten pisuaren ehuneko handiena hartzen duten elementuak. Diseinu responsive bat ez da zutabeak eta menuak berrantolatzea soilik: irudiak ere gailuaren tamainara egokitzea, haien proportzioa mantentzea eta, ahal denean, pantaila bakoitzerako bertsiorik egokiena deskargatzea lortu behar du.
Bi kontzeptu oso garrantzitsu bereizi behar ditugu:
- Irudi moldagarriak: nabigatzaileak bertsio desberdin bat deskargatzen du gailuaren arabera.
- Irudi responsiboak: irudi berak tamaina aldatzen du eta erabilgarri dagoen espaziora egokitzen da.
Demagun 3000 × 2000 pixeleko argazki bat dugula:
- 390 pixeleko zabalerako telefono batean erakusten badugu, nabigatzaileak haren tamaina asko murriztu beharko du.
- Gainera, irudiak hainbat megabyte hartzen baditu, beharrezkoa baino askoz eduki gehiago deskargatuko dugu.
Arazo nagusiak hauek dira:
- Kargatzeko denbora luzeagoa.
- Datu mugikorren kontsumo handiagoa.
- Erabiltzaile-esperientzia okerragoa.
- Bilatzaileetan kokapen okerragoa.
Horregatik, irudiek responsive diseinuaren parte izan behar dute.
44.1 Irudi responsiveak eta aspect-ratio
Gure webgunean irudiak gehitzean, ohikoa da erabilgarri dagoen espaziora egokitzeko tamaina aldatzea eta proportzioa mantentzea, itxura desitxuratu ez dadin.
Responsive irudiak
img {
max-width: 100%;
height: auto;
}
Arau sinple honek irudiak honako hau lortzea ahalbidetzen du:
- Inoiz ez izatea edukiontzia baino zabalagoa.
- Proportzioa automatikoki mantentzea (height:autori esker).
- Erabilgarri dagoen espazioa murrizten denean, tamaina ere murriztea.
Ia edozein web-proiektutan gomendatutako jardunbidea da.
Desberdintasun txikiak daude width: 100% eta max-width: 100% artean:
- width:100%: Irudiak beti edukiontziaren zabalera osoa hartzen du, nahiz eta jatorriz txikiagoa izan.
- max-width:100%: Irudia beharrezkoa denean soilik murrizten da, baina inoiz ez da jatorrizko tamainatik gora handitzen. Hau izan ohi da gomendatutako aukera.
Hona hemen Grid bidez sortutako galeria baten adibidea, irudi responsiveekin:
HTML
<section class="galeria">
<img src="1.jpg" alt="">
<img src="2.jpg" alt="">
<img src="3.jpg" alt="">
</section>
CSS
.galeria {
display: grid;
grid-template-columns:
repeat(auto-fit, minmax(220px, 1fr));
gap: 16px;
}
.galeria img {
width: 100%;
height: auto;
object-fit: cover;
}
height:auto erabili beharrean, aspect-ratio:auto ere erabil daiteke, proportzioa mantenduko baitu. Propietate horrek irudiak zehaztutako ratio batera behartzea ahalbidetzen du, nahiz eta egokiena beti fallback bat gehitzea den: aspect-ratio: auto 16/9:
CSS
.galeria img {
width: 100%;
aspect-ratio: auto 16/9;
}
44.2 Irudi moldagarriak srcset-ekin
Orain arte beti irudi bera deskargatzen genuen, baina HTMLk baliabide beraren hainbat bertsio eskaintzeko aukera ematen du srcset bidez. Horrela, nabigatzaileak automatikoki aukeratzen du irudirik egokiena, honako hauen arabera:
- Viewport-aren zabalera.
- Gailuaren bereizmena.
- Pixelen dentsitatea.
Horrek datu-kontsumoa murrizten du eta errendimendua hobetzen du.
HTML
<img alt="Paisaje"
src="foto-800.jpg"
srcset="
foto-400.jpg 400w,
foto-800.jpg 800w,
foto-1200.jpg 1200w
"
sizes="
(max-width: 768px) 100vw,
50vw
">
sizes atributua srcset-ekin konbinatzen da, eta horrela honako hau lortzen dugu:
- 768 px baino txikiagoak diren pantailetan, irudiak viewport-aren %100 hartuko du.
- Pantaila handiagoetan, gutxi gorabehera %50 hartuko du.
Informazio horrekin, nabigatzaileak bertsiorik eraginkorrena hauta dezake deskargatu aurretik.
44.2.1 <picture> elementua
Batzuetan ez da nahikoa bereizmena aldatzea: beste argazki bat erakutsi nahi dugu gailuaren arabera.
Horretarako, <picture> elementua dago.
Irudi desberdinak tamainaren arabera
<picture>
<source
media="(max-width: 768px)"
srcset="cabecera-mobile.jpg"
>
<source
media="(min-width: 769px)"
srcset="cabecera-desktop.jpg"
>
<img src="cabecera-desktop.jpg" alt="Cabecera">
</picture>
Nabigatzaileak baldintza betetzen duen lehen irudia aukeratuko du. Metodo hau oso erabilgarria da argazkiaren enkoadraketa mugikorraren eta mahaigainekoaren artean aldatzen denean.
44.2.2 Atzeko planoko irudiak
CSS bidez erabilitako irudiak ere responsive izan daitezke.
Irudi desberdinak tamainaren arabera
.hero {
background-image: url("hero-mobile.jpg");
}
@media (min-width: 768px) {
.hero {
background-image: url("hero-desktop.jpg");
}
}
Horrela, gailu bakoitzak irudi desberdin bat deskargatzen du. Oso ohikoa da tamaina handiko goiburuetan teknika hau erabiltzea.
Egiaztatu tamaina desberdinetarako irudi desberdinak erabiltzearen funtzionamendua.
44.3 Irudi-formatu modernoak
Responsive diseinuaz gain, komeni da formatu eraginkorrak ere erabiltzea, konpresio-algoritmoa hobetzen baitute eta fitxategiek leku gutxiago har dezaketelako:
| Formatua | Gomendatutako erabilera |
|---|---|
| JPEG | Argazkiak |
| PNG | Gardentasunak |
| SVG | Ikonoak eta logotipoak |
| WebP | Argazki optimizatuak |
| AVIF | Gehienezko konpresioa |
Gaur egun, WebP eta AVIF formatuak kalitatearen eta fitxategi-tamainaren arteko erlazio bikaina eskaintzen dute; beraz, oso gomendagarriak dira proiektu modernoetarako.
45 Tipografia moldagarria
Responsive diseinuaren helburu nagusietako bat edukia edozein gailutan irakurgarria dela bermatzea da. Ez da nahikoa zutabeak berrantolatzea edo irudien tamaina aldatzea: tipografiak ere erabilgarri dagoen espaziora egokitu behar du.
Tipografia moldagarriak testuaren tamaina progresiboki egokitzen du viewport-aren tamainaren arabera, eta horrela letrak mugikor batean txikiegiak izatea edo bereizmen handiko monitore batean handiegia izatea saihesten da. Horretarako, CSSek unitate erlatiboak eta clamp() bezalako funtzioak eskaintzen ditu.
Oraindik ere ohikoa da honelako estiloak aurkitzea:
Tipografia estatika
h1 { font-size: 48px; }
p { font-size: 16px; }
Eta funtzionatzen badu ere, hainbat desabantaila ditu:
- Mugikor batean, 48 px-ko izenburu batek lerro gehiegi har ditzake.
- 4K monitore batean, 16 px-ko testua txikiegia izan daiteke.
- Tamaina bakoitza egokitzeko Media Queries ugari sortzera behartzen du.
Horregatik, responsive diseinuan unitate erlatiboak eta tamaina fluidoak hobesten dira.
45.1 Tipografia-eskala
Aurretik unitate erlatibo rem-ari buruz hitz egitean ikusi dugun arren, komeni da gogoratzea tipografia-eskala koherentea erabiltzea gomendatzen dela.
Tipografia erlatiboa
h1 { font-size: 2.5rem; }
h2 { font-size: 2rem; }
h3 { font-size: 1.5rem; }
p { font-size: 1rem; }
small { font-size: 0.875rem; }
Hierarkia horrek irakurketa errazten du eta webgunearen ikus-koherentzia mantentzen du. Gainera, nabigatzailearen lehenetsitako tamaina kontuan hartzen du, erabiltzaileak alda dezakeena.
45.2 Tipografia Media Queries-ekin egokitzea
Orain tipografia responsive bihurtzea baino ez zaigu geratzen, Media Queries erabiliz interesatzen zaigun tamainara egokitzeko. Aurreko adibidea kontuan hartuta:
Media Queries gehitzen
@media (min-width: 768px) {
h1 { font-size: 3.5rem; }
}
45.2.1 Viewport-aren unitateak
CSSek testuaren tamaina viewport-aren zabalerarekin erlazionatzeko aukera ere ematen du vw unitatearen bidez.
Tipografiak viewport-aren arabera
h1 { font-size: 6vw; }
Si viewport-ak 1000px neurtzen baditu:
- 1vw = 10 px
- 6vw = 60 px
Viewport-ak 400px neurtzen baditu:
- 1vw = 4 px
- 6vw = 24 px
Leihoa aldatzean, testuaren tamaina automatikoki aldatzen da. Arazoa da vw erabiltzean monitore oso handi batean izenburua izugarri handia bihur daitekeela, eta mugikor oso txiki batean, berriz, txikiegia izan daitekeela.
Horregatik, normalean vw gutxieneko eta gehienezko mugekin konbinatzen da clamp() bidez.
45.3 clamp() erabiltzea
Aurretik clamp() funtzioa ikusi dugu, baina orain aurkitzen diogu benetako balio erantsia, vw erabiltzeak sortzen duen arazoa konponduko baitigu. Gaur egun, tipografia fluidoa sortzeko gomendatzen den teknika da.
Tipografia erlatiboa clamp()-ekin
h1 { font-size: clamp(2rem, 5vw, 4rem); }
Aurreko arauak tipografiak honako hau egitea ahalbidetzen du:
- Inoiz ez izatea 2 rem baino txikiagoa.
- 5vw erabiliz hazten saiatzea.
- Inoiz ez gainditzea 4 rem.
Nabigatzaileak automatikoki kalkulatzen du balio egokia.
clamp() behar bezala erabiltzen badugu, tipografiarako Media Queries-ak sortzea saihesten dugu.
45.4 Kontuan hartu beharreko beste alderdi batzuk
Web-orria egokitzerakoan kontuan hartu beharreko tipografiarekin lotutako beste alderdi batzuk ere badaude, besteak beste:
- Lerroaren altuera: Irakurgarritasuna ez dago letraren tamainaren mende soilik. Lerroaren altuera (line-height) ere funtsezkoa da.
- Lerroaren luzera: Gehiegi zabalak diren paragrafoak zailak dira irakurtzeko; horregatik, komeni da haien zabalera max-width-ekin mugatzea. Lerro bakoitzeko 60–75 karaktereko zabalera optimotzat jo ohi da testu luzeetarako. Lerro bakoitzeko 70–80 karaktereko zabalera optimotzat jo ohi da testu luzeetarako.
- Paragrafoen arteko tartea: Lerroarteaz gain, komeni da paragrafoak ikusmenez bereiztea. Horretarako, p {margin-bottom:1rem;} erabil daiteke, eta horrela tartea gainerako tipografiarekin proportzionalki handitzea lortzen da.
46 Edukiontzi fluidoak
Responsive diseinuaren oinarrizko printzipioetako bat elementuek beharrezkoa ez denean tamaina finkorik izan ez dezaten saihestea da. 960px edo 1200px-eko zabalera duten kutxak diseinatu beharrean, edukiontzi modernoek erabilgarri dagoen espaziora egokitzen dute beren tamaina, ehunekoak, unitate erlatiboak eta gehienezko mugak erabiliz.
Edukiontzi fluidoa viewport-arekin batera zabaldu eta txikitzen den elementua da, eta, aldi berean, pantaila handietan irakurketa erosoa mantentzen du. Teknika hau ia framework moderno guztietan erabiltzen da, hala nola Bootstrap, Tailwind CSS edo Bulma.
46.1 Edukiontzi fluidoa max-width-ekin batera
Edukiontziak sortzeko moduak bilakaera hau izan du:
Zabalera finkoa
.container {
width: 960px;
margin: 0 auto;
}
Fluido
.container {
width: 100%;
}
max-width erabiltzen
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
}
- Zabalera finkoa: Diseinu honek behar bezala funtzionatzen zuen garai hartako monitoreetan, baina hainbat desabantaila zituen:
- Mugikorretan desplazamendu horizontala agertzen zen.
- Pantaila txikietan edukia ez zen sartzen.
- Diseinua zuzentzeko Media Queries ugari sortu behar ziren.
- Ehunekoen erabilera: Orain edukiontziak erabilgarri dagoen zabalera osoa hartzen du beti. Hala ere, tamaina handiko monitore batean paragrafoak gehiegi luzeak izan daitezke.
- max-width erabiltzea: Mugikor batean zabalera osoa hartuko du, ordenagailu eramangarri batean progresiboki handituko da eta oso pantaila zabaletan (esaterako, ultra-wide motakoetan) ez ditu inoiz 1200 px gaindituko.
- margin erabiltzeak edukia zentratzen laguntzen du.
- padding-ekin testua gailuaren ertzera itsatsita ez egotea lortzen dugu.
46.2 Edukiontzia hobetu
Aurretik sortutako edukiontzi fluidoa hobetu dezakegu, arau gutxiago erabiliz baina portaera mantenduz:
Edukiontzia hobetzen
.container {
width: min(100%, 1200px);
margin-inline: auto;
padding-inline: 1rem;
}
Ezaugarri berriak:
- min()-ek 100% eta 1200px balioen artean txikiena aukeratzen du.
- margin-inline-ek margin-left eta margin-right ordezkatzen ditu.
- padding-inline-ek betegarri horizontala aplikatzen du, testuaren norabidea errespetatuz.
Interfaze baten osagaiak
47 Interfazearen osagaiak
Orain arte HTML, CSS, Flexbox, Grid eta responsive diseinua erabiliz web-orriak eraikitzen ikasi dugu. Hala ere, erabiltzaile-interfazea ez da elementuen banaketa hutsa: ia edozein web-aplikaziotan agertzen diren osagai berrerabilgarriek osatzen dute.
Goiburu bat, menu bat, txartel bat edo inprimaki bat interfazearen osagaien adibideak dira. Bakoitzak arazo zehatz bat konpontzen du eta proiektu bereko hainbat web-orritan berrerabil daiteke.
47.1 Goiburuak <header>
Goiburua (header) web-orri baten goiko eremua da. Normalean, gunearen identitatea, nabigazio nagusia eta, batzuetan, bilatzailea edo erabiltzailearen sarbidea bezalako tresnak izaten ditu.
Edozein interfazeren osagai garrantzitsuenetako bat da; izan ere, normalean gune bereko web-orri guztietan agertzen da eta erabiltzailearentzako nabigazio-puntu nagusia da.
HTMLn badago goiburua adierazteko elementu semantiko espezifiko bat: <header>. Elementu horrek adierazten du edukia web-orri baten edo atal baten sarrera-zatiari dagokiola. Goiburu batek honako hauek izan ditzake:
- Gunearen logotipoa edo izena.
- Nabigazio-menua.
- Bilatzailea.
- Erabiltzailearen ikonoak.
- Sarbide-botoiak.
Ez dago diseinu zuzen bakar bat; garatzen ari garen aplikazio-motaren araberakoa izango da. Adibiderik sinpleenak gunearen izena soilik erakutsiko luke, baina gaur egun webgune batek hainbat atal izan ohi ditu, nabigazio-barra baten bidez atzitu daitezkeenak:
HTML
<header class="header">
<h1 class="logo">MiWeb</h1>
<nav>
<a href="#">Inicio</a>
<a href="#">Cursos</a>
<a href="#">Blog</a>
<a href="#">Contacto</a>
</nav>
</header>
CSS
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 2rem;
background-color: #1f2937;
}
.logo {
margin: 0;
color: white;
}
.header nav {
display: flex;
gap: 1.5rem;
}
.header a {
color: white;
text-decoration: none;
}
Flexbox aukera onena da mota honetako banaketa horizontaletarako.
48 Alboko barrak
Alboko barra (sidebar) pantailaren alboetako batean nabigazio-aukerak, tresnak edo bigarren mailako informazioa biltzen dituen interfazearen osagaia da. Oso ohikoa da administrazio-panel, hezkuntza-plataforma, eduki-kudeatzaile eta enpresa-aplikazioetan.
Goiburuan kokatu ohi den menu nagusiak ez bezala, alboko barrak aukera ugari antolatzeko aukera ematen du, espazio bertikala okupatu gabe. Normalean honako hauek izaten ditu:
- Nabigazio nagusia.
- Kategoriak.
- Sarbide azkarrak.
- Konfigurazioa.
- Erabiltzailearen informazioa.
48.1 Oinarrizko HTML egitura
Egitura semantikoak normalean <aside> erabiltzen du eduki osagarria adierazteko.
HTML
<div class="layout">
<aside class="sidebar">
<h2>Panel</h2>
<nav>
<a href="#">Inicio</a>
<a href="#">Alumnos</a>
<a href="#">Cursos</a>
<a href="#">Configuración</a>
</nav>
</aside>
<main>
<h1>Contenido principal</h1>
</main>
</div>
CSS
.layout {
display: grid;
grid-template-columns: 240px 1fr;
min-height: 100vh;
}
.sidebar {
padding: 1rem;
}
main {
padding: 2rem;
}
<aside> elementuak adierazten du eduki hori osagarria dela <main> elementuaren bidez adierazitako eduki nagusiarekiko. Grid da alboko barra bat sortzeko tresnarik egokiena; CSS bidez, bi zutabe sortzen dira: lehenengoa 240px-koa da alboko barrarako, eta gainerakoa eduki nagusirako <main>.
48.2 Barne-menua Flexbox-ekin
Sidebar-aren barruan, estekak edo atalak bertikalki kategoriatan antolatu nahi ditugunez, Flexbox erabil dezakegu estekak antolatzeko.
CSS
.sidebar nav {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
Esteka bakoitza aurrekoaren azpian agertzen da, tarte uniformea utziz. Horrela, ikus dezakegu nola Grid-ek orria antolatzen duen eta Flexbox-ek osagaiak antolatzen dituen, kasu honetan alboko barraren osagaiak.
48.4 Kokapen finkoa scroll egitean
Administrazio-paneletan ohikoa da menua ikusgai mantentzea eta scroll egitean ez mugitzea. Horretarako, honako arau hauek gehi ditzakegu mahaigaineko bertsioaren barruan.
Sidebar-a finko mantendu
.sidebar {
position: sticky;
top: 0;
height: 100vh;
}
Aurreko ariketan oinarrituta: - Gehitu alboko barra bat. - Aldatu mugikorraren eta mahaigainaren arteko portaera.
49 Txartelak
Txartelak (cards) interfaze modernoen diseinuan gehien erabiltzen diren osagaietako batzuk dira. Txartela erlazionatutako informazioa azalera bisual independente baten barruan biltzen duen edukiontzia da, edukia antolatzea eta berrerabiltzea erraztuz.
Gaur egun, ia edozein aplikaziotan aurki ditzakegu txartelak: online denda bateko produktuak, hezkuntza-plataforma bateko ikastaroak, albisteak, erabiltzaile-profilak, estatistika-panelak edo sare sozialetako argitalpenak. Normalean, izenburua, testua, etiketak, botoiak, ikonoak eta/edo irudi bat izaten ditu.
Oinarrizko egitura honakoa bezain sinplea da:
HTML
<article class="card">
<img src="curso.jpg"
alt="Curso de HTML">
<h2>Curso de HTML</h2>
<p>
Aprende los fundamentos
del desarrollo web.
</p>
</article>
CSS
.card {
padding: 1.5rem;
border: 1px solid #d1d5db;
border-radius: 0.75rem;
background-color: white;
}
.card h2 {
margin-top: 0;
}
.card img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
border-radius: 0.5rem;
}
<article> erabiltzen dugu, beste leku batzuetan berrerabil daitekeen eduki-unitate independentea adierazten duelako.
Txartelaren goiko zatia estaltzen duen irudi bat gehitu da, eta txartelari zein irudiari ertz biribilduak gehitu zaizkie itxura hobetzeko.
49.1 Txartelak eta Grid-en kokapena
Txartelak erabiltzea eredu ezin hobea da sareta/grid bat sortzeko. Txartelak kokatzeko orduan, hainbat modutan egin dezakegu eta, beraz, grid-aren konfigurazioa gehien nahi dugun diseinura egokitu dezakegu:
- Beti zutabe kopuru bera izatea: diseinu hau egokia da pantailaren tamaina kontrolatuta badugu eta beste sistema batean ikusiko ez dela badakigu. EZ da gomendatutako sistema.
- Txartelek beti zabalera bera izatea: aproposa da beti itxura bera izatea nahi badugu. Arazoa da ez dela pantailaren tamainara egokitzen.
- grid responsive erabiltzea: txartelek gutxieneko tamaina bat izango dute esleituta, baina pantailaren tamainara egokituko dira. Hau da gaur egun gomendatutako sistema.
50 Botoiak
Botoiak erabiltzaileek gehien elkarreragiten duten osagaietako bat dira. Inprimakiak bidaltzeko, leihoak irekitzeko, ekintzak berresteko, eragiketak bertan behera uzteko edo aplikazio baten barruan nabigatzeko aukera ematen dute. Botoien diseinu on batek erabilgarritasuna hobetzen du, ekintza bakoitzaren garrantzia argi adierazten du eta berehalako erantzun bisuala ematen dio erabiltzaileari.
HTMLn oso erabilgarriak diren bi elementu daude: <button> eta <a>. CSS bidez biek itxura bera izan dezaketen arren, haien esanahi semantikoa desberdina da:
- <button>: ekintza bat exekutatzen du.
- <a>: beste web-orri batera nabigatzen du.
50.2 Botoi baten egoerak
Botoi batek egoera bisual desberdinak izan ditzake, eta, beraz, CSS arau gisa erabil ditzakegu:
- button: egoera lehenetsia.
- button:hover: sagua gainean jartzean duen egoera.
- button:active: botoian klik egiten denean.
- button:disabled: botoia desaktibatuta dago eta ezin da gainean klik egin.
50.3 Botoien arteko desberdintasunak eta taldekatzea
Ekintza guztiek ez dute garrantzi bera; beraz, ekintza desberdinak egiteko botoiak badaude, kolore eta/edo forma desberdinak izan beharko lituzkete, edo ikono desberdinen bidez adierazi beharko lirateke. Botoiak erraz identifikatzeko eta erabiltzeko modukoak izan behar dira. Horretarako, jardunbide egoki gisa, garrantzitsua da:
- Egiten duen ekintza deskribatzen duen testua erabiltzea.
- Ekintzak bereizteko kolorearen mende soilik ez egotea.
- Testuaren eta atzeko planoaren arteko kontraste nahikoa mantentzea.
- Sakatzeko eremu zabala eskaintzea (gutxienez 44 × 44 px inguru ukipen-interfazeetan).
- Ekintza erabilgarri ez dagoenean disabled atributua erabiltzea.
Aplikazio askotan ohikoa da ekintza desberdinak egiteko botoiak lerrokatzea eta elkarrengandik hurbil jartzea. Horretarako modurik onena Flexbox eta haren lerrokatze-sistema erabiltzea da, horizontalki zein bertikalki. Zenbait framework-ek botoiak taldekatzea ahalbidetzen dute; ekintza elkarren artean erlazionatuta dituzten botoietarako erabiltzen da.
Aurreko ariketan oinarrituta: - Sortu txartelak dituen grid sistema bat. - Txartel bakoitzak irudi bat, goiburu bat, testu labur bat eta botoi motako esteka bat izan behar ditu. - Gehitu txartelen batean “eskaintza” testua, beheratutako produktu bat balitz bezala.
51 Inprimakiak
Inprimakiak <form> dira web-aplikazio batek erabiltzailearen informazioa jasotzeko erabiltzen duen mekanismo nagusia. Saioa hasteko prozesutik matrikula batera, online erosketa batera edo kontaktu-inprimaki batera, ia edozein webgunek behar ditu ondo diseinatutako inprimakiak.
Inprimaki on batek ez du soilik estetikoki atsegina izan behar: argia, irisgarria, betetzeko erraza eta gailu mugikorretara egokitzeko modukoa ere izan behar du. Inprimaki baten barruan aurkituko ditugun elementurik ohikoenak hauek dira:
- Etiketak (label): eremu bakoitzak etiketa deskribatzaile bat izan behar du. for atributuak etiketa dagokion <input> eremuaren id-arekin lotzen du. Erlazio horrek irisgarritasuna hobetzen du eta testuaren gainean klik egitean sarrera-eremua ere aktibatzea ahalbidetzen du.
- Testu-eremuak (input): datu-mota jakin batzuetarako mota desberdinak daude, eta garrantzitsua da egokia aukeratzea, balidazioa eta erabiltzaile-esperientzia hobetzen baititu gailu mugikorretan.
- text: Testu orokorra.
- email: Posta elektronikoa.
- password: Pasahitzak.
- tel: Telefonoa.
- number: Zenbakizko balioak.
- date: Datak.
- Testu-eremu zabalak (textarea): testu luzeak gehitzeko.
- Goitibeherako zerrendak (select): hainbat aukeraren artean hautatzeko aukera ematen du.
- Egiaztapen-laukiak (input type="checkbox"): hainbat aukera hautatzeko aukera ematen du.
- Hautaketa-laukiak (inpuyt type="radio"): hainbat aukeren artean aukera bakarra hautatzeko aukera ematen du.
- Botoiak (button).
Inprimakiak sarrerako kontrol guztiak biltzen ditu eta informazioa zerbitzarira bidaltzea ahalbidetzen du erabiltzaileak dagokion botoia sakatzen duenean.
HTML
<form>
<div class="form-group">
<label for="nombre">Nombre</label>
<input
id="nombre"
type="text"
>
</div>
<div class="form-group">
<label for="email">Correo</label>
<input
id="email"
type="email"
>
</div>
</form>
CSS
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-bottom: 1rem;
}
input,
textarea,
select {
width: 100%;
padding: 0.75rem;
border: 1px solid #d1d5db;
border-radius: 0.5rem;
font: inherit;
box-sizing: border-box;
}
Aurreko adibideak oinarrizko inprimaki bat sortzen du, honako ezaugarri hauekin:
- Zabalera osoa.
- Tarte erosoa.
- Ertz biribilduak.
- Orrialdearen gainerakoarekin bat datorren tipografia.
label bakoitza dagokion input-arekin talde batean bateratuz Flexbox sistema bat sor daiteke. Kasu honetan, bertikalki lerrokatu da, baina mahaigaineko ikuspegirako horizontalki ere konfigura daiteke.
Sortu gailu desberdinetan itxura desberdina izango duen inprimaki bat.
52 Taulak
Taulek errenkada eta zutabeetan antolatutako informazioa irudikatzeko aukera ematen dute. Bereziki erabilgarriak dira elkarren artean erlazioa duten datuak erakutsi behar ditugunean, hala nola ikasleen zerrendak, produktuak, ordutegiak, emaitzak edo estatistikak.
CSSk ia edozein elementu-multzo taula bisual batean bihurtzeko aukera ematen duen arren, datuak benetan taulakoak direnean HTMLko tauletarako elementu espezifikoak erabili behar ditugu. Horrek egitura semantikoa eskaintzen du, irisgarritasuna errazten du eta nabigatzaileei informazioa behar bezala interpretatzeko aukera ematen die.
Taula bat honako elementu hauen bidez eraikitzen da:
- <table>: Taularen edukiontzia.
- <thead>: Taularen goiburua osatzen duten errenkadak biltzen ditu. Aukerakoa da.
- <tbody>: Taularen eduki nagusia osatzen duten errenkadak biltzen ditu. Aukerakoa da.
- <tfoot>: Taularen beheko zatia osatzen duten errenkadak biltzen ditu. Aukerakoa da.
- <tr>: Errenkada.
- <th>: Goiburuaren gelaxka.
- <td>: Datuen gelaxka.
HTML
<table>
<thead>
<tr>
<th>Student ID</th>
<th>Name</th>
<th>Major</th>
<th>Credits</th>
</tr>
</thead>
<tbody>
<tr>
<td>3741255</td>
<td>Jones, Martha</td>
<td>Computer Science</td>
<td>240</td>
</tr>
<tr>
<td>3971244</td>
<td>Nim, Victor</td>
<td>Russian Literature</td>
<td>220</td>
</tr>
</tbody>
<tfoot>
<tr>
<th colspan="3">Totals</td>
<td>460</td>
</tr>
</tfoot>
</table>
CSS
thead, tfoot {
border-bottom: 2px solid rgb(160 160 160);
text-align: center;
background-color: #2c5e77;
color: white;
}
tbody {
background-color: #e4f0f5;
}
table {
border-collapse: collapse;
border: 2px solid rgb(140 140 140);
font-family: sans-serif;
font-size: 0.8rem;
letter-spacing: 1px;
}
th, td {
border: 1px solid rgb(160 160 160);
padding: 8px 10px;
}
tbody > tr > td:last-of-type {
text-align: center;
}
tbody tr:nth-child(even) {
background-color: #f3f4f6;
}
52.1 Taulen estiloak
Nabigatzaileek ia ez diete estilorik gehitzen taulei, eta horrek irakurketa zaildu dezake; beraz, garrantzitsua da geure estiloak gehitzea. Gehitu ohi diren estiloen artean honako hauek gomendatzen dira:
- Goiburuak: goiburuei estilo bat gehitzeak zutabe bakoitzak zer adierazten duen argi ikusteko aukera ematen du.
- Ertzak: edukia bereizteko aukera ematen dute, eta horrela bistaratzea hobetzen da.
- Txandakako errenkadak: taula luzeetan komenigarria da errenkada bikoitien eta bakoitien koloreak txandakatzea.
- :hover efektua: irakurketa errazteko, kurtsorea dagoen errenkada ere nabarmendu daiteke.
- Taula responsiveak: taulen arazo nagusietako bat pantaila txikietan duten portaera da. Irtenbide erraza desplazamendu horizontala baimentzea da, overflow-x: auto erabiliz taularen elementu gurasoaren edukiontzian.
Sortu aurretik azaldutakoa jasoko duen taula bat.
53 Modalak
Modal bat web-orri baten eduki nagusiaren gainean agertzen den leiho bat da, informazioa erakusteko edo erabiltzaileari ekintza bat egiteko eskatzeko. Modala irekita dagoen bitartean, normalean erabiltzaileak harekin elkarreragin behar du atzean geratzen den edukiarekin jarraitu aurretik.
Modalak normalean honako hauetarako erabiltzen dira:
- Informazio gehigarria erakusteko.
- Ekintza garrantzitsuak berresteko.
- Datuak sortzeko/editatzeko inprimakiak erakusteko.
- Egoera jakin batzuen berri emateko.
- Irudiak edo eduki handituak erakusteko.
Modalak neurriz erabili behar dira. Ekintza bat zuzenean web-orrian egin badaiteke, normalean hobe da erabiltzailea leiho modal batekin ez etetea.
<dialog> etiketa agertu aurretik nola sortzen ziren azalduko da, eta ondoren etiketa berriarekin nola egiten diren.
53.1 Antzinako oinarrizko egitura
Modalek nola funtzionatzen duten ulertzeko, modu “artisauan” nola egiten ziren azalduko da. Gaur egun ere metodo hori erabiltzen dute hainbat framework-ek.
HTML
<div class="modal">
<div class="modal-content">
<h2>Confirmar acción</h2>
<p>
¿Seguro?
</p>
<button>Cancelar</button>
<button>Eliminar</button>
</div>
</div>
<button id="abrir">Open Modal</button>
CSS
.modal {
display: none;
position: fixed;
z-index: 1;
padding-top: 100px;
left: 0;
top: 0;
/* ... */
}
Egiturak hiru elementu nagusi ditu:
- .modal: edukiaren gainean overlay gisa kokatzen den elementua da.
- .modal-content: erakutsi nahi dugun mezua da.
- <button>: ekintza exekutatzen duen botoia da. Kasu honetan, modala soilik erakutsiko du.
- JavaScript kodea: botoia sakatzean, modala ikusgai bihurtuko du. Mezua ezkutatzeko hainbat modu erabil daitezke:
- Modalak adierazten duen ekintza berrestea/baztertzea.
- Modalaren ixteko botoi batean klik egitea (sistema eragilearen leiho baten antzera).
- Modalaren overlay-aren gainean klik egitea. Horrela, ixtea errazten da.
JavaScript kodea
var modal = document.getElementById("myModal");
var btn = document.getElementById("myBtn");
btn.onclick = function() {
modal.style.display = "block";
}
// para ocultar/cerrar el modal
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
53.2 <dialog> elementua
2022tik aurrera, nabigatzaile guztietan dago erabilgarri <dialog> elementua, Chrome-k proposatu zuena. Etiketa honekin modal elementu bat sor dezakegu (nahiz eta modal bat ez izan ere), osagai interaktibo bat, alerta bat edo azpi-leiho bat sortzeko.
Adibiderik oinarrizkoenetan ez da beharrezkoa JavaScript erabiltzea, 2023tik popovertarget atributua baitago. Atributu horri esker, botoi bat elkarrizketa-koadroa irekitzeko lotu daiteke, id kontuan hartuta.
HTML
<button popovertarget="my-dialog">Open dialog</button>
<dialog id="my-dialog" popover>
<p>bla bla</p>
<button popovertarget="my-dialog" popovertargetaction="hide">Close</button>
</dialog>
<dialog>-ek modalak egiteko modu “tradizionalean” oinarritutako funtzionalitateak eskaintzen ditu; oraingoan, ordea, nabigatzailea gai da ekintza batzuk egiteko, eta, beraz, ez ditugu eskuz egin behar. Aukera bereziki interesgarria da web-aplikazio modernoetan, eta gomendagarria da MDNren dokumentazioan dauden aukera desberdinak ikustea.
HTML eta CSS etengabe garatzen ari diren teknologiak dira; beraz, noizean behin, garatzailearen lana errazteko ezaugarriak gehitzen dira.
53.3 Kontuan hartu beharreko alderdiak
Modal bat sortzean, zenbait alderdi kontuan har daitezke itxura eta erabilgarritasun orokorra hobetzeko. Horietako batzuk nahitaezkoak dira, eta beste batzuk aukerakoak:
- Overlay-ak atzeko planoa iluntzea, modalaren edukia hobeto ikusteko.
- Ez dugu ahaztu behar modalak eduki orokorrak baino z-index handiagoa izan behar duela.
- Erakusteko/ezkutatzeko animazio bat gehitzeak erabiltzaileari begirada non finkatu behar duen jakiten lagun diezaioke.
- Atzeko planoko scroll-a saihesteak fokua modalean mantentzeko sentsazioa hobetzen du.
CSS
body.modal-open {
overflow: hidden;
}
JavaScript
//Al abrir el modal, se añade una clase
btn.addEventListener("click", () => {
modal.classList.add("is-open");
document.body.classList.add("modal-open");
});
// falta quitar la clase al cerrar el modal
Aurreko adibidearekin, modal bat irekita dagoenean ezinezkoa da web-orrian scroll egitea.
Sortu honako hauek dituen HTML web-orri bat:
- Custom modala irekitzeko botoia.
- <dialog> bat irekitzeko botoia.
- Egiaztatu dituen aukerak eta begiratu ea interesgarria den horietakoren bat.
54 Abisuak eta/edo alertak
Abisuak eta alertak aplikazio baten egoerari buruzko informazio garrantzitsua erabiltzaileari erakusteko erabiltzen diren osagaiak dira. Modalek ez bezala, alertak normalean ez dute orriaren gainerakoarekiko interakzioa blokeatzen, eta, beraz, erabiltzaileak lanean jarrai dezake alertak ikusgai dauden bitartean. Bereziki erabilgarriak dira honako hauek jakinarazteko:
- Eragiketak behar bezala egin direla.
- Erroreak.
- Abisuak.
- Informazio gehigarria.
- Aplikazio baten egoeran gertatutako aldaketak.
Adibide ohikoa litzateke inprimaki baten datuak bidali ondoren behar bezala gorde direla adierazten duen mezua erakustea.
HTML
<div class="aviso alert-info ">
Los datos se han guardado.
</div>
<div class="aviso alert-error ">
¡ERROR!
</div>
CSS
.aviso {
padding: 1rem;
border-radius: 0.5rem;
border: 1px solid transparent;
margin: 10px 0;
}
.alert-info {
background-color: #dbeafe;
color: #1e3a8a;
}
54.1 Abisu motak
Abisuak edo alertak sortzerakoan, kontuan hartu beharko genuke zer motatako aplikazioa eraikitzen ari garen eta zer abisu jakinarazi nahi dizkiogun azken erabiltzaileari. Aplikazio estandar batean, honako hauek sor ditzakegu:
- Informazio-abisu: erabiltzailearentzat erabilgarria den informazioa adierazten du.
- Berrespen-/arrakasta-abisu: eragiketa behar bezala egin dela adierazteko (datuak gordetzea, erabiltzailea sortzea, …).
- Abisu-alerta: erabiltzailearen arreta behar denean, errore bat ez den arren.
- Errore-alerta: ekintza ezin izan dela egin edo errore batekin amaitu dela adierazteko.
54.2 Egin daitezkeen hobekuntzak
Abisuak eta alertak sortzerakoan, honako ezaugarri hauek gehitzea interesgarria izan daiteke:
- Ikonoak: ikono batek mezu-mota azkar identifikatzen lagun dezake.
- Izenburua: izenburu bat gehi dezakegu edukia bereizteko.
- Ixteko botoia: abisua/alerta desagerrarazteko, ixteko botoi bat gehitu.
- Aldi baterako alerta: aplikazio batzuek mezuak segundo batzuez erakusten dituzte eta ondoren automatikoki ezkutatzen dituzte. Baliagarria da berrespen-mezuetarako, baina ez ditugu automatikoki ezkutatu behar erabiltzaileak irakurtzeko denbora behar duen mezu garrantzitsuak.
- Errorearen IDa: gertatutakoa arazteko (debug egiteko), errore-kode bakar bat gehi dezakegu, erabiltzaileak errore horren berri eman ahal izan dezan.
- Errorea non gertatu den adieraztea: hau bereziki erabilgarria da inprimakietan. Huts egin duen sarrera-erregistroari ertz gorri bat gehitzeak argi adierazten dio erabiltzaileari non dagoen errorea.
Sortu abisu- eta alerta-elkarrizketa desberdinak:
- Gehitu kolore desberdinak abisu-mota bakoitzerako.
- Gehitu izenburu bat.
- Gehitu testuarekin lerrokatutako ikono bat (erabili Flexbox).
56 Orri-zenbakitzailea
Orri-zenbakitzailea eduki-kantitate handia hainbat orritan banatzeko aukera ematen duen nabigazio-osagaia da. Emaitza guztiak aldi berean erakutsi beharrean, elementu-talde txikiak aurkezten dira eta erabiltzaileari haien artean nabigatzeko aukera ematen zaio.
Ohikoa da orri-zenbakitzailea honako hauetan aurkitzea:
- Produktu-zerrendetan.
- Bilaketa-emaitzetan.
- Ikasleen zerrendetan.
- Albisteetan.
- Artikuluetan.
- Datu-base bateko erregistroetan.
- Administrazio-paneletan.
Orri-zenbakitzailea ez da soilik elementu bisual bat. Estekek edukien orrialde desberdinetara benetan sartzeko aukera eman behar dute. Orri-zenbakitzaileak nabigazioa adierazten du; beraz, <nav> erabil dezakegu, aurretik ikusi dugun bezala, edo zerrenda bat.
HTML
<nav aria-label="Paginación">
<a href="?page=1">Anterior</a>
<a href="?page=1">1</a>
<a href="?page=2" class="active">2</a>
<a href="?page=3">3</a>
<a href="?page=4">4</a>
<a href="?page=2">Siguiente</a>
</nav>
CSS
.pagination a {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 1.5rem;
min-height: 1.5rem;
padding: 0.5rem;
border: 1px solid #d1d5db;
border-radius: 0.5rem;
color: #374151;
text-decoration: none;
font-weight: bold;
}
Adibidean estekei dagokien CSSa soilik gehitu da; beste hainbat orrialdetan gertatzen den bezala, zenbaki bakoitzaren inguruan ertz txiki bat sortzen du.
56.1 Ohiko diseinua
Orri-zenbakitzailea nabigazio-sistema denez, begiratu batean hainbat alderdi argi erakutsi behar dizkigu. Besteak beste, honako hauek nabarmendu ditzakegu:
- Gauden orria.
- :hover efektua esteken gainean.
- “Aurrekoa” edo “Hurrengoa” desaktibatzea, lehenengo edo azken orrian bagaude, hurrenez hurren.
- Orrialde asko daudenean, ez du zentzurik zenbaki guztiak erakusteak.
Sortu ohiko erabilerako orri-zenbakitzailea sistema bat, zehaztutako diseinu-ezaugarriak dituena.
57 Akordeoiak
Akordeoia eduki-blokeak erakutsi eta ezkutatzeko aukera ematen duen interfazearen osagaia da. Bloke bakoitza erabiltzaileak sakatu dezakeen izenburu edo goiburu batez osatu ohi da, lotutako informazioa zabaltzeko.
Bereziki erabilgarriak dira informazio asko dugunean eta ez dugunean dena aldi berean osorik erakutsi nahi. Ohiko adibide batzuk hauek dira:
- Ohiko galderak.
- Laguntza-atalak.
- Konfigurazio-aukerak.
- Deskribapen gehigarriak.
- Kategorien arabera taldekatutako informazioa.
Akordeoi batek hasieran eduki guztiak itxita izan ditzake.
57.1 Oinarrizko egitura
Beste elementu batzuekin gertatzen den bezala, hasiera batean sistema hau modu “artisauan” eraikitzen zen, HTML, CSS eta JavaScript erabiliz. Baina 2020tik bi etiketa berri daude, <details> eta <sumamry>, eta horiek sortzea errazten dute, JavaScript erabiltzea beharrezkoa ez delako.
Eskuz egindako metodoa
<div class="accordion">
<div class="accordion-item">
<button class="accordion-header">
Cabecera
</button>
<div class="accordion-content">
<p>Contenido.</p>
</div>
</div>
<!-- Más secciones -->
</div>
Metodo berria
<details>
<summary>Cabecera</summary>
<p>
Contenido.
</p>
</details>
Hurrengo urratsa CSS kodea izatea da, estilo pertsonalizagarriak gehitzeko eta atala lehenespenez ezkutatzeko, eta JavaScript kodea izatea atala ezkutatu/erakusteko, metodo zaharrean.
CSS
.accordion {
border: 1px solid #d1d5db;
border-radius: 0.5rem;
overflow: hidden;
width: 40%;
}
.accordion summary,
.accordion .accordion-header {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
border: none;
background-color: #f3f4f6;
padding: 1rem 0rem 1rem 1rem;
cursor: pointer;
font-weight: 600;
list-style: none;
font: inherit;
}
JavaScript
const headers =
document.querySelectorAll(".accordion-header");
headers.forEach(header => {
header.addEventListener("click", () => {
const item = header.parentElement;
item.classList.toggle("is-open");
});
});
57.2 Diseinua eta laguntzak
Akordeoien erabilgarritasuna errazteko, ohikoa da honako diseinu eta/edo laguntza hauek erabiltzea:
- Goiburua edukitik bereiztea: normalean, goiburuak kolore bat izaten du eta edukiak beste bat.
- Atala irekita edo itxita dagoen adierazteko gezi edo ikono bat gehitzea. Egoera aldatzean, ikonoak ere aldatu egin behar du.
- Hainbat akordeoi-atal batera badaude, atal desberdinak bereizi behar dira.
- Zenbait kasutan, edukiontzi bat irekitzean gainerakoak itxi nahi izaten ditugu. Hori egiten ari garen informazioaren eta/edo aplikazioaren araberakoa izango da.
Sortu akordeoi-sistema bat metodo berriarekin eta metodo “eskuzko”/“zaharrarekin”. Eman gehien gustatzen zaizun CSS diseinua eta, beharrezkoa bada, JavaScript kodea.
CSSko frameworkak: Bootstrap
58 # CSSko frameworkak
CSSko framework bat aurrez prestatutako CSS fitxategi, osagai eta utilitateen multzoa da, web-interfazeak modu azkarrago eta egituratuagoan garatzeko aukera ematen duena. Orrialde baterako beharrezkoak diren estilo guztiak hutsetik idatzi behar izan beharrean, frameworkak zuzenean gure HTMLn erabil ditzakegun klaseak eta osagaiak eskaintzen ditu.
Adibidez, CSS hutsez botoi bat sortu nahi badugu, normalean guk geuk definitu beharko genituzke botoiaren kolorea, atzeko planoa, ertza, tamaina, barruko tartea eta botoiaren egoera desberdinak bezalako propietateak. Framework batean, berriz, mota horretako estiloak dagoeneko eskaintzen dituzten klaseak aurki ditzakegu. Gure botoi baten eta Bootstrap erabiliz sortutako baten adibidea.
Egindako CSS botoiarako
.boton {
padding: 0.5rem 1rem;
border: none;
border-radius: 0.5rem;
background-color: #0d6efd;
color: white;
cursor: pointer;
}
HTML botoia Bootstrap-ekin
<button class="btn btn-primary">
Aceptar
</button>
Ikus daitekeenez, garatzaileak ez ditu hutsetik inplementatu behar botoiaren oinarrizko itxura lortzeko beharrezkoak diren CSS arau guztiak; nahikoa da HTMLari klase pare bat gehitzea emaitza bera lortzeko.
Framework eta estilo-sistema ugari daude:
Framework batzuek ikus-osagai osoak eskaintzen dituzte; beste batzuk, berriz, diseinua arau txikiak konbinatuz eraikitzeko aukera ematen duten utilitate-klaseetan oinarritzen dira.
58.1 Zer eskaintzen du CSSko framework batek?
Framework bakoitzak bere ezaugarriak baditu ere, normalean hainbat tresna-mota eskaintzen ditu. Besteak beste, hauek aurki ditzakegu:
- Layout-sistema elementuak antolatzeko.
- Grid errenkaden eta zutabeen bidez banaketak sortzeko.
- Utilitate-klaseak ohiko propietateetarako.
- Ikus-osagaiak, hala nola botoiak, txartelak, menuak edo alertak.
- Inprimakietarako estiloak.
- Diseinu responsive-a.
- Tipografia.
- Koloreak.
- Tarteak.
- Ertzak eta itzalak.
- Egoera interaktiboak.
Beraz, CSSko framework bat ez da kolore eta botoien bilduma hutsa. Arau komunei jarraituz interfazeak eraikitzeko aukera ematen duten tresna batzuk eskaintzen ditu.
58.2 CSSko frameworkak eta klaseak
Framework hauen ohiko ezaugarrietako bat CSS klaseen erabilera intentsiboa da. Adibidez, tartea kontrolatzeko edo layouta kontrolatzeko erabiltzen diren klaseak aurki ditzakegu:
Margen superior e inferior
<div class="mt-2 mb-2">
Contenido
</div>
Botón HTML con Bootstrap
<div class="container">
Contenido
</div>
Erabilitako klasea framework zehatzaren araberakoa izango da. Oinarrizko ideia da HTMLak frameworkak eskaintzen dituen klaseak erabiltzen dituela behar ditugun estiloak aplikatzeko.
58.3 CSSko frameworkak eta diseinu responsive-a
CSSko frameworkak bereziki ezagun egin ziren arrazoietako bat interfaze responsive-ak sortzea errazten dutela da. Gogora dezagun interfaze responsive batek pantaila-tamaina desberdinetara egokitu behar duela.
Framework batek normalean pantaila-tamaina desberdinak kontuan hartzen dituzten klaseak eta arauak eskaintzen ditu. Adibidez, Bootstrap-ek breakpoint desberdinak erabiltzen ditu bere layout-sistema egokitzeko; horri esker, layout responsive-ak eraiki daitezke, beharrezkoak diren media query guztiak eskuz definitu beharrik gabe.
58.4 CSSko framework bat erabiltzearen abantailak eta eragozpenak
CSSko frameworkek abantaila ugari eskaintzen dituzte, baina ez dira beti aukerarik onena. Horien erabilera proiektuaren ezaugarrien araberakoa izan behar da.
| Abantailak | Eragozpenak |
|---|---|
| Garapen azkarragoa | Frameworkarekiko mendekotasuna |
| Diseinu responsive-a | HTMLa klase askorekin |
| Batzuek osagai berrerabilgarriak dituzte | Pertsonalizazioa: ez da beti erraza |
| Ikus-identitatearen koherentzia | Ikaskuntza-kurba |
| Bateragarritasuna | |
| Dokumentazioa eta komunitatea |
58.5 CSSko frameworka tresna gisa, ez CSSren ordezko gisa
CSSko framework bat ez da CSSren ordezkotzat hartu behar. Frameworka CSS erabiliz eraikita dago eta haren gaineko abstrakzio-geruza bat eskaintzen du. Framework bat ikasteak ez luke CSS ikasteari uztea ekarri behar.
CSS ezagutzen duen garatzaile batek framework bat modu kontzientean erabil dezake, beharrezkoa denean aldatu eta portaera lehenetsia nahikoa ez denean arazoak konpon ditzake.
59 Bootstrap
Bootstrap web-interfazeak garatzera bideratutako CSS framework bat da. Web-orriak azkarrago eraikitzeko eta haien elementuen artean itxura koherentea mantentzeko aukera ematen duten estilo, osagai eta utilitateen multzoa eskaintzen du.
Bootstrap Twitterreko garatzaileek sortu zuten hasiera batean, eta kode irekiko proiektu gisa argitaratu zen 2011n. Denborarekin, web-interfazeak garatzeko CSS framework ezagun eta erabilienetako bat bihurtu zen.
Bere helburu nagusia interfaze bat eraikitzeko oinarri bat eskaintzea da, ohiko estilo guztiak hutsetik inplementatu behar izan gabe.
59.1 Bootstrap instalatzea eta txertatzea
Bootstrap web-orri batean erabiltzeko, haren fitxategiak proiektuan txertatu behar ditugu. Hori egiteko hainbat modu daude, baina ohikoenak CDN (content delivery network, edukia banatzeko sarea) erabiltzea edo Bootstrap deskargatu eta haren fitxategiak proiektuaren barruan txertatzea dira.
Aukeratutako aukera proiektuaren beharren araberakoa izango da. Bootstrap-ekin lanean hasteko, CDN bat erabiltzea bereziki erraza da, ez baitugu fitxategirik deskargatu edo konfiguratu behar. Mendekotasunen gaineko kontrol handiagoa izan nahi dugun proiektuetan, Bootstrap proiektuaren barruan instala dezakegu.
HTML Bootstrap-ekin
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB"
crossorigin="anonymous">
</head>
<body>
<h1>Hello, world!</h1>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"
integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI"
crossorigin="anonymous"></script>
</body>
</html>
Aurreko adibideak Bootstrap CDN bidez erabiltzen duen HTML orri minimoa erakusten du. Honako etiketa hauek gehitu dira:
- meta name="viewport": lehenago ikusi dugun bezala, diseinu responsive-a izateko beharrezkoa den etiketa da.
- link bootstrap.min.css fitxategiarentzat: Bootstrapen estilo-orria da, Bootstrap erabili ahal izateko beharrezkoak diren arau guztiekin. Bertsio «minimizatua» da (lerro-jauzirik gabe).
- integrity atributua: deskargatutako fitxategia espero den edukiarekin bat datorrela egiaztatzeko aukera ematen dio nabigatzaileari. Eduki hori hash kriptografiko bat da.
- crossorigin atributua: beste jatorri batean dagoen baliabide baten eskaera nola egin behar den adierazten du.
- <script> bootstrap.bundle.min.js fitxategiarentzat: Bootstrapek JavaScript fitxategi bat eskaintzen du, osagai batzuk interaktiboak baitira eta JavaScript behar baitute. Bundle bat da, Popper ere barne hartzen duelako; osagai interaktibo batzuek erabiltzen duten mendekotasuna da. Garrantzitsua da fitxategi hau HTML dokumentu osoa kargatu ondoren kargatzea. Beraz:
- Dokumentuaren amaieran egon behar du, </body> ixteko etiketaren aurretik. Horrela, nabigatzaileak HTML edukia prozesatu dezake lehenik, eta ondoren zenbait script kargatu eta exekutatu.
- Etiketa <head> barruan ere gehi daiteke, defer erabiliz, deskarga amaitzean exekutatzeko.
Deskargatutako fitxategiak edukitzeko aukera hautatzen badugu, HTML kodearekin batera gorde behar ditugu (normalean css eta js direktorioak erabiltzen dira), eta ondoren HTMLan gehitu, dagokion bidea erabiliz.
Bi sistemen arteko aldea honako taula honetan laburbil daiteke:
| CDN | Fitxategi lokalak |
|---|---|
| Ez dugu Bootstrap eskuz deskargatu behar | Fitxategiak proiektuaren parte dira |
| Konfigurazio oso erraza | Kontrol handiagoa dugu |
| Nabigatzaileak Internetetik lortzen du baliabidea | Ez dugu Bootstrap CDN batetik lortu behar |
| Oso erosoa adibideetarako eta prototipoetarako | Egokia mendekotasunak kontrolatu nahi ditugunean |
| CDNaren erabilgarritasunaren mende gaude | Fitxategiak mantendu behar ditugu |
Bestela, instalazioa npm bezalako sistemen bidez ere egin daiteke.
Behar bezala kargatu dela egiaztatzeko, botoi bat gehi dezakegu, dagokion klasearekin, behar bezala errendatzen den ikusteko:
HTML botoia Bootstrap-ekin
<button class="btn btn-primary">
Aceptar
</button>
59.2 Modulu jakin batzuk soilik instalatzea
Aurreko atalean Bootstrap osorik instalatu/konfiguratu dugu, baina modulu jakin batzuk soilik instalatzeko aukera ere badago, Bootstrapen atalek bereizketa hau baitute:
- Layout: dokumentuaren egitura-sistema. breakpointak, Grid sistema, zutabeak, …
- Content: oinarrizko koloreetarako aldagaiak eta koherentzia izateko reboot sistema ditu.
- Components: botoiak, taulak, alertak, akordeoiak… sortzen dituzten osagai guztiak dituen atala da.
- Utilities: ertzak, formak, zabalerak, altuerak… sortzeko utilitateak ditu.
Zenbait proiektutan interesgarria izan daiteke osagai jakin batzuk soilik kargatzea framework osoa kargatu beharrean. Horregatik, interesgarria da dokumentazioa ikustea, gehien interesatzen zaiguna erabakitzeko.
59.3 CSS propioa Bootstraparekin batera
Gure proiektua sortzerakoan ez dugu Bootstrap bakarrik erabiltzea aukeratu behar, gure CSS fitxategia ere sor baitezakegu, gure arauak edukitzeko eta, horrela, proiektua pertsonalizatzeko.
Egin behar duguna da gure CSS fitxategia Bootstrapen fitxategiaren ondoren kargatzea. Horrela, egiten ditugun arauek, kaskadaren/espezifikotasunaren/jatorriaren ondorioz, Bootstrapen arauek baino lehentasun handiagoa izango dute estiloak gainidazten saiatzen garenean, behar bezala egiten badugu.
Sortu:
- HTML bat Bootstrap CDN bidez erabiliz.
- Gehitu botoiak eta Bootstrap erabiltzen duen osagairen bat.
- Sortu estilo-orri propio bat, klaseak gehitzen dituzten arauekin, eta erabili Bootstraparekin batera.
- Sortu Bootstrap lokalean erabiltzen duen beste HTML bat, beharrezko fitxategiak deskargatu ondoren.
59.4 Bootstrapen edukiontziak
Bootstrap-ek edukiontzien sistema bat eskaintzen du. Sistema horrek orri bateko edukiaren zabalera kontrolatzeko eta viewportaren barruan zentratuta mantentzeko aukera ematen du.
Edukiontzi bat bereziki erabilgarria da pantaila handietan. Oso pantaila zabal batean eduki guztia pantailaren % 100 okupatuz kokatuko bagenu, testu-lerroak luzeegiak izan litezke eta interfazeak egitura gal lezake.
Viewportaren tamainara egokitzen diren edukiontzi desberdinak daude:
| Extra small <576px | Small ≥576px | Medium ≥768px | Large ≥992px | X-Large ≥1200px | XX-Large ≥1400px | |
|---|---|---|---|---|---|---|
| .container | 100% | 540px | 720px | 960px | 1140px | 1320px |
| .container-sm | 100% | 540px | 720px | 960px | 1140px | 1320px |
| .container-md | 100% | 100% | 720px | 960px | 1140px | 1320px |
| .container-lg | 100% | 100% | 100% | 960px | 1140px | 1320px |
| .container-xl | 100% | 100% | 100% | 100% | 1140px | 1320px |
| .container-xxl | 100% | 100% | 100% | 100% | 100% | 1320px |
| .container-fluid | 100% | 100% | 100% | 100% | 100% | 100% |
Kontuan hartuta gure aplikazioa nolakoa izatea nahi dugun, komeni zaigun container klasea aukeratu beharko dugu. Leihoaren tamaina aldatzen dugunean, edukiontziak bere tamaina aldatuko du, aurreko taula kontuan hartuta.
Sortu honako hauek dituen HTML bat:
- Edukiontzi-mota desberdinak.
- Egiaztatu zer gertatzen den leihoaren tamaina aldatzean.
- Bilatu nola gehitu padding-a eta goiko eta beheko marjina, Bootstrapen berezko klaseak erabiliz.
- Aztertu nabigatzailearen garatzaile-tresnekin edukiontzi bakoitzaren CSSa, Bootstrap-ek aplikatzen dituen CSS arauak eta dituzten breakpointak.
59.5 Zutabe-sistema
Bootstrapen ezaugarri ezagunenetako bat zutabeen sistema da. Sistema horrek orri batean erabilgarri dagoen espazioa hainbat zutabetan banatzeko eta layout responsive-ak modu errazean sortzeko aukera ematen du. Sistema hiru klasetan oinarritzen da batez ere:
- .container: batez ere edukiaren zabalera kontrolatzen du.
- .row: zutabeak antolatzeko errenkada bat sortzen du.
- .col: zutabeen artean erabilgarri dagoen espazioa banatzeko aukera ematen du.
Bootstrap-ek tradizionalki 12 zutabetan oinarritutako sistema erabiltzen du. Horrek ez du esan nahi beti 12 HTML elementu sortu behar ditugunik; errenkada baten zabalera erabilgarri guztia kontzeptualki 12 zatitan bana daitekeela esan nahi du. Banaketa hauek izan daitezke: 2+10, 4+8, 6+6…
Garrantzitsua da Bootstrapen zutabe-sistema eta CSS Grid bereiztea. Bootstrap-ek Flexbox-en oinarritutako sistema erabiltzen du errenkada eta zutabeen sistema tradizionalerako; CSS Grid, berriz, CSSren berezko layout sistema da.
Garrantzitsua da Bootstrapen zutabe-sistema (Flexbox-en oinarritua) eta CSS Grid bereiztea. Biek antzeko arazoak konpon ditzakete, baina ez dira gauza bera.
59.5.1 col-* klaseak
12 zutabeetatik zenbat erabili nahi ditugun adierazteko, honako klase hauek erabil ditzakegu:
- col: zutabe bat sortuko dela zehazteko. Zabalera Bootstrap-ek automatikoki erabakiko du, zenbat zutabe dauden kontuan hartuta.
- col-1: zutabe bakar baten zabalera erabiltzen du.
- col-2: bi zutaberen zabalera erabiltzen du.
- col-12: 12 zutabeen zabalera osoa erabiltzen du.
Horrela, errenkada berean interesatzen zaigun zutabe-kopurua soilik erabiltzen duten edukiontziak sor ditzakegu. Errenkada berean dauden edukiontzien baturak ezin ditu 12 zutabeak gainditu; hala eginez gero, hurrengo errenkadara igaroko da.
Bi zutabeen adibidea
<div class="row">
<div class="col">
Columna izquierda
</div>
<div class="col-6">
Columna derecha
</div>
</div>
3 zutabeko adibidea
<div class="row">
<div class="col-2">
Columna pequeña
</div>
<div class="col-5">
Columna ancha
</div>
<div class="col-5">
Columna ancha
</div>
</div>
Zer gertatzen da zutabeen baturak 12 zenbakia gainditzen badu?
59.5.2 Zutabe hutsak
Errenkada batean guztira 12 unitate baino gutxiago erabil ditzakegu. Horren ondorioz, amaieran erabili gabeko espazioa geratuko da.
3 zutabeko adibidea
<div class="row">
<div class="col-2">
Columna pequeña
</div>
<div class="col-5">
Columna ancha
</div>
<div class="col-5">
Columna ancha
</div>
</div>
Hasieran edo erdian zutabe hutsak jarri nahi baditugu, offset eta offset-* klaseak ditugu.
Zutabe hutsune daukan adibidea
<div class="row">
<div class="offset-3 col-2">
Columna pequeña
</div>
<div class="col-5">
Columna ancha
</div>
</div>
Nola uste duzu egituratzen dela aurreko adibidea?
59.5.3 Zutabeen arteko tartea
Bootstrap-ek gutter sistema ere badu, hau da, zutabeen artean dagoen espazioa. Zutabeek ez dute zertan bisualki elkarren ondoan egon. Bootstrap-ek haien arteko espazioa padding eta margin-arekin lotutako propietateen bidez kudeatzen du.
Espazio horiek Bootstrapen klase espezifikoak erabiliz alda ditzakegu: g-0, g-1 eta g-5-eraino.
Espazio horizontala kontrolatu nahi badugu, gx-* klaseak ditugu, eta espazio bertikalerako gy-* klaseak.
59.5.4 Zutabe responsive-ak
Zutabe-sistemaren abantaila nagusietako bat da tamaina desberdinak zehaztu ditzakegula breakpoint-aren arabera.
Responsive zutabeko adibidea
<div class="row">
<div class="col-6 col-xl-3">
Contenido
</div>
<div class="col-6 col-xl-9">
Contenido
</div>
</div>
Adibide honetan, tamaina handiko pantailetan zutabeek 3+9 tamaina izango dute, eta breakpoint-a gainditu eta «XL» baino tamaina txikiagora igarotzen garenean (Bootstrapen <1200px), 6+6 tamainako bi zutabe izatera igaroko dira.
Zutabeen breakpoint-en tamaina adierazteko hainbat atzizki ditugu, aurretik ikusitakoekin bat datozenak: sm, md, lg, xl eta xxl.
Sistema hau oso ondo pentsatuta dago Mobile First ikuspegiarekin lan egiteko.
59.5.5 Zutabeen lerrokatzea
Errenkadek Flexbox erabiltzen dutenez, lerrokatzearekin lotutako Bootstrapen klaseak erabil ditzakegu. Lerrokatze bertikala eta lerrokatze horizontala bereiz ditzakegu.
Zutabeak dituen edukiontzia edukia baino altuagoa bada, honako lerrokatze bertikal hauek egin ditzakegu:
- Errenkada osoa bertikalki zentratzeko, honako klase hauek ditugu, row elementuari gehitu behar zaizkionak:
- align-items-start
- align-items-center
- align-items-end
- Zutabea modu independentean lerrokatu nahi badugu, honako klase hauetako bat aplikatu behar diogu dagokion col elementuari:
- align-self-start
- align-self-center
- align-self-end
Bestalde, zutabeak edukiontziaren barruan ardatz horizontalean modu responsive-an zentratu nahi baditugu, honako klase hauek ditugu dagokion row elementuan aplikatzeko:
- justify-content-start
- justify-content-center
- justify-content-end
- justify-content-around
- justify-content-between
- justify-content-evenly
59.5.6 Zutabeen ordena
Bootstrap-ek zutabeen ikusizko ordena aldatzeko klaseak ere eskaintzen ditu. Horretarako, order-* klaseak daude, eta 1etik 5era bitarteko zenbaki bat gehi dezakegu. order-first eta order-last klaseak ere badaude.
Sortu zutabe-sistema desberdinak dituen HTML bat:
- Zutabe eta zabalera desberdinak egongo dira.
- Egiaztatu zer gertatzen den 12 zutabeak gainditzen dituzunean edo zutabe guztiak betetzen ez dituzunean.
- Gehitu zutabe hutsak offset erabiliz.
- Gehitu klaseak zutabe responsive-ak izateko, eta aldatu haien zabalera leihoaren tamaina aldatzean.
- Egiaztatu lerrokatze-sistemak, bai horizontala bai bertikala.
- Egin proba bat zutabeen ordena aldatzeko.
59.6 Ikonoak
Ikonoak ekintza, informazio edo funtzionalitate bat modu bisualean irudikatzeko aukera ematen duten elementu grafikoak dira. Oso ohikoak dira interfaze modernoetan, eta botoietan, menuetan, inprimakietan, nabigazio-barretan edo mezuetan ager daitezke.
Bootstrap-ek ez ditu ikonoak zuzenean CSS framework nagusiaren barruan sartzen. Haiekin lan egiteko, Bootstrap Icons izeneko liburutegi independentea dago, proiektu berak garatua.
Bootstrap Icons Bootstraparekin batera erabiltzeko diseinatutako ikono-bilduma da, baina modu independentean ere erabil daiteke. Liburutegiak ehunka ikono eskaintzen ditu SVG formatuan.
Bootstrap Icons-ez gain, antzeko helburua duten beste liburutegi batzuk ere badaude, ikonoak eskaintzeko:
Ikonoen liburutegi bat erabiltzeak proiektuan ikus-identitate koherentea mantentzea ahalbidetzen du. Erabiltzeko errazak dira, normalean ikono-kopuru handia izaten dute eta, ikonoak bektorialak direnez, tamaina alda dezakegu kalitatea galdu gabe.
59.6.1 Bootstrap Icons proiektuan txertatzea
Proiektu independentea denez, ikonoetarako estilo-orri berri bat txertatu behar da, haren klaseak erabili ahal izateko.
Bootstrap-ekin gertatzen zen bezala, estilo-orria deskarga dezakegu gure proiektuan edukitzeko edo CDN bat erabil dezakegu. Bi kasuetan, estilo-orria gehitzea da egin behar duguna; aukeratutako metodoaren arabera helbidea aldatzen da.
HTML Bootstrap Icons-ekin
<head>
<!-- resto de cosas -->
<link rel="stylesheet" href="css/bootstrap-icons.min.css">
</head>
59.6.2 Bootstrap Icons erabiltzea
Liburutegia txertatu ondoren, ikonoak erabil ditzakegu haien klaseen bidez. Proiektuaren web-orrian dauden ikono desberdinak ikusi eta bilatu ditzakegu. Ikono bat aukeratzean, haren adibide desberdinak erakusten dizkigu, baita nola erabili ere, eta ikonoa SVG formatuan deskargatzeko aukera ematen digu.
Ikono desberdinak
<h1><i class="bi bi-bootstrap"></i> Icons</h1>
<i class="bi bi-person fs-1 rojo"></i>
<button class="btn btn-primary bi bi-save-fill">
Guardar
</button>
<div class="alert alert-success bi bi-check-circle-fill" role="alert">
A simple success alert.
</div>
Aurreko adibidean hainbat ikono gehitu dira, eta botoi batean eta alerta-abisu batean ere txertatu dira. Horrela, erabiltzaileek bi elementuen helburua identifika dezakete.
Gure klase propioak gehi ditzakegu ikonoetan koloreak ezartzeko edo haien tamaina aldatzeko. Azken horretarako, fs-1 eta fs-6 arteko klase propioak ere badaude, letra-tipoaren tamaina aldatzeko.
Erabili Bootstrap Icons:
- Botoietan, abisuetan, paragrafoetan…
- Gehitu zure arauak koloreak ezartzeko.
- Kopiatu 09b ariketa eta gehitu ikonoak menuetan.
Anexos
60 Etiquetas HTML ordenadas alfabéticamente
Guía de referencia para todas las etiquetas en orden alfabético. Obtenidas de W3C:
| Tag | Descripción |
|---|---|
| <a> | Defines a hyperlink |
| <abbr> | Defines an abbreviation or an acronym |
| <address> | Defines contact information for the author/owner of a document |
| <area> | Defines an area inside an image map |
| <article> | Defines an article |
| <aside> | Defines content aside from the page content |
| <audio> | Defines embedded sound content |
| <b> | Defines bold text |
| <base> | Specifies the base URL/target for all relative URLs in a document |
| <bdi> | Isolates a part of text that might be formatted in a different direction from other text outside it |
| <bdo> | Overrides the current text direction |
| <blockquote> | Defines a section that is quoted from another source |
| <body> | Defines the document’s body |
| <br> | Defines a single line break |
| <button> | Defines a clickable button |
| <canvas> | Used to draw graphics, on the fly, via scripting (usually JavaScript) |
| <caption> | Defines a table caption |
| <cite> | Defines the title of a work |
| <code> | Defines a piece of computer code |
| <col> | Specifies column properties for each column within a <colgroup> element |
| <colgroup> | Specifies a group of one or more columns in a table for formatting |
| <data> | Adds a machine-readable translation of a given content |
| <datalist> | Specifies a list of pre-defined options for input controls |
| <dd> | Defines a description/value of a term in a description list |
| <del> | Defines text that has been deleted from a document |
| <details> | Defines additional details that the user can view or hide |
| <dfn> | Specifies a term that is going to be defined within the content |
| <dialog> | Defines a dialog box or window |
| <div> | Defines a section in a document |
| <dl> | Defines a description list |
| <dt> | Defines a term/name in a description list |
| <em> | Defines emphasized text |
| <embed> | Defines a container for an external application |
| <fieldset> | Groups related elements in a form |
| <figcaption> | Defines a caption for a <figure> element |
| <figure> | Specifies self-contained content |
| <footer> | Defines a footer for a document or section |
| <form> | Defines an HTML form for user input |
| <h1> to <h6> | Defines HTML headings |
| <head> | Contains metadata/information for the document |
| <header> | Defines a header for a document or section |
| <hgroup> | Defines a header and related content |
| <hr> | Defines a thematic change in the content |
| <html> | Defines the root of an HTML document |
| <i> | Defines a part of text in an alternate voice or mood |
| <iframe> | Defines an inline frame |
| <img> | Defines an image |
| <input> | Defines an input control |
| <ins> | Defines a text that has been inserted into a document |
| <kbd> | Defines keyboard input |
| <label> | Defines a label for an <input> element |
| <legend> | Defines a caption for a <fieldset> element |
| <li> | Defines a list item |
| <link> | Defines the relationship between a document and an external resource (most used to link to style sheets) |
| <main> | Specifies the main content of a document |
| <map> | Defines an image map |
| <mark> | Defines marked/highlighted text |
| <menu> | Defines an unordered list |
| <meta> | Defines metadata about an HTML document |
| <meter> | Defines a scalar measurement within a known range (a gauge) |
| <nav> | Defines navigation links |
| <noscript> | Defines an alternate content for users that do not support client-side scripts |
| <object> | Defines a container for an external application |
| <ol> | Defines an ordered list |
| <optgroup> | Defines a group of related options in a drop-down list |
| <option> | Defines an option in a drop-down list |
| <output> | Defines the result of a calculation |
| <p> | Defines a paragraph |
| <param> | Defines a parameter for an object |
| <picture> | Defines a container for multiple image resources |
| <pre> | Defines preformatted text |
| <progress> | Represents the progress of a task |
| <q> | Defines a short quotation |
| <rp> | Defines what to show in browsers that do not support ruby annotations |
| <rt> | Defines an explanation/pronunciation of characters (for East Asian typography) |
| <ruby> | Defines a ruby annotation (for East Asian typography) |
| <s> | Defines text that is no longer correct |
| <samp> | Defines sample output from a computer program |
| <script> | Defines a client-side script |
| <search> | Defines a search section |
| <section> | Defines a section in a document |
| <select> | Defines a drop-down list |
| <small> | Defines smaller text |
| <source> | Defines multiple media resources for media elements (<video> and <audio>) |
| <span> | Defines a section in a document |
| <strong> | Defines important text |
| <style> | Defines style information for a document |
| <sub> | Defines subscripted text |
| <summary> | Defines a visible heading for a <details> element |
| <sup> | Defines superscripted text |
| <svg> | Defines a container for SVG graphics |
| <table> | Defines a table |
| <tbody> | Groups the body content in a table |
| <td> | Defines a cell in a table |
| <template> | Defines a container for content that should be hidden when the page loads |
| <textarea> | Defines a multiline input control (text area) |
| <tfoot> | Groups the footer content in a table |
| <th> | Defines a header cell in a table |
| <thead> | Groups the header content in a table |
| <time> | Defines a specific time (or datetime) |
| <title> | Defines a title for the document |
| <tr> | Defines a row in a table |
| <track> | Defines text tracks for media elements (<video> and <audio>) |
| <u> | Defines some text that is unarticulated and styled differently from normal text |
| <ul> | Defines an unordered list |
| <var> | Defines a variable |
| <video> | Defines embedded video content |
| <wbr> | Defines a possible line-break |
NO soportadas en HTML5:
| Tag | Descripción |
|---|---|
| <acronym> | Not supported in HTML5. Use <abbr> instead. Defines an acronym |
| <applet> | Not supported in HTML5. Use <embed> or <object> instead. Defines an embedded applet |
| <basefont> | Not supported in HTML5. Use CSS instead. Specifies a default color, size, and font for all text in a document |
| <big> | Not supported in HTML5. Use CSS instead. Defines big text |
| <center> | Not supported in HTML5. Use CSS instead. Defines centered text |
| <dir> | Not supported in HTML5. Use <ul> instead. Defines a directory list |
| <font> | Not supported in HTML5. Use CSS instead. Defines font, color, and size for text |
| <frame> | Not supported in HTML5. Defines a window (a frame) in a frameset |
| <frameset> | Not supported in HTML5. Defines a set of frames |
| <noframes> | Not supported in HTML5. Defines an alternate content for users that do not support frames |
| <strike> | Not supported in HTML5. Use <del> or <s> instead. Defines strikethrough text |
| <tt> | Not supported in HTML5. Use CSS instead. Defines teletype text |


