Niet elke HTML5- of CSS3-functie heeft uiteraard een brede browserondersteuning. Om dit te compenseren, hebben ondernemende ontwikkelaars een aantal hulpmiddelen ontwikkeld om u deze technologieën vandaag te laten gebruiken, zonder gebruikers achter te laten die nog in de steentijd leven.
Het goede nieuws is dat u, behalve voor Internet Explorer, meer semantische markeringen kunt maken door de nieuwe HTML5-elementen te gebruiken, zelfs in browsers die ze niet officieel ondersteunen. Vergeet niet om de correcte weergavemodus in te stellen: blok
. Het volgende fragment moet verwijzen naar alle noodzakelijke elementen:
artikel, opzij, details, figcaption, figuur, footer, header, hgroup, menu, nav, sectie display: block;
Het implementeren van veel van de oplossingen in deze tutorial omvat het opnemen van JavaScript voor specifieke versies van Internet Explorer. Hier is een kort overzicht: de testuitdrukking staat tussen vierkante haken. We kunnen controleren op specifieke versies of versies boven of onder een vermelde versie. lt
en gt
gemiddelde lager dan en groter dan, respectievelijk, terwijl lte
en gte
gemiddelde lager dan of gelijk aan en groter dan of gelijk aan.
Hier zijn enkele snelle voorbeelden:
[if IE 6]
Controleert of de browser Internet Explorer 6 is.
[if gt IE 6]
Controleert op een versie van Internet Explorer groter dan 6.
In IE, met uitzondering van de meest recente versie (IE9), kunt u geen stijlen toepassen op elementen die de browser niet herkent. Uw spiffy, nieuwe HTML5-elementen, in al hun glorie, zijn ongevoelig voor CSS-regels in die omgeving. Dit is waar Remy Sharp's html5shiv (soms html5 shim genoemd) te hulp komt. Voeg het gewoon toe aan uw pagina's sectie en je zult in staat zijn om de nieuwe HTML5-elementen perfect in te richten.
Merk op hoe de voorwaardelijke opmerkingen alleen de HTML-code html5shiv laden op voorwaarde dat de versie van Internet Explorer lager is dan 9. Andere browsers, zoals Firefox en Chrome, zullen deze tag ook negeren en zullen het script niet uitvoeren, waardoor bandbreedte wordt bespaard.
html5 shiv is gebaseerd op een eenvoudige oplossing: het dirigeert IE om de elementen met JavaScript te maken (ze hoeven niet eens in de DOM te worden ingevoegd).
document.createElement ( 'header');
Op dit punt kunnen ze normaal worden gestyled. Bovendien integreren de meer recente versies IE Print Protector, die een fout repareert waarbij de HTML5-elementen verdwijnen bij het afdrukken van de pagina ...
Met Modernizr kunt u een "back-up" -stijl bieden in browsers die bepaalde HTML5- en CSS3-functies niet ondersteunen.
Modernizr is misschien wel de bekendste van deze tools, maar het is ook behoorlijk verkeerd begrepen (de naam helpt niet). Haal diep adem: in tegenstelling tot populaire misverstand doet Modernizr dat wel niet schakel HTML5- en CSS3-functionaliteiten in browsers in die ze niet ondersteunen (hoewel het wel doet include html5shiv om HTML5-elementen in IE te kunnen gebruiken < 9).
Afgezien van de html5shiv-functionaliteit doet Modernizr slechts één ding: hij voert een reeks kenmerkdetectietests uit wanneer hij wordt geladen en voegt vervolgens de resultaten in de
klasse
attribuut van delabel.
Het voornaamste doel van Modernizr is om u een "back-up" -stijl aan te bieden in browsers die bepaalde HTML5- en CSS3-functies niet ondersteunen. Dit is enigszins anders dan traditionele sierlijke degradatie, waarbij we in alle browsers dezelfde CSS-stijl gebruiken en deze vervolgens zodanig modelleren dat, wanneer specifieke functies ontbreken, het resultaat nog steeds acceptabel is.
Nu voor een voorbeeld van hoe Modernizr werkt: als een browser het ondersteunt border-radius
en de column-count
property, worden de volgende klassen toegepast:
Aan de andere kant, als dezelfde eigenschappen niet worden ondersteund, bijvoorbeeld in IE7, vindt u:
Op dit punt kunt u deze klassen vervolgens gebruiken om een unieke stijl toe te passen in browsers met verschillende mogelijkheden. Als u bijvoorbeeld een andere stijl op een alinea wilt toepassen, afhankelijk van of CSS-kolommen worden ondersteund, kunt u het volgende doen:
.csskolommen p / * Stijl wanneer kolommen beschikbaar zijn * / .no-csscolumns p / * Stijl wanneer kolommen niet beschikbaar zijn * /
Als een browser geen kolommen ondersteunt, de .csscolumns
klasse zal niet aanwezig zijn in het lichaam en de browser zal nooit de kans krijgen om de regel toe te passen die deze gebruikt.
Sommigen kunnen bezwaar maken dat dit ons terugbrengt naar de oude tijden van het bouwen van een andere site voor elke browser. Het is waar dat niets u ervan weerhoudt om zoveel stijlverklaringen te schrijven die geavanceerde CSS3-functies gebruiken dat uw stylesheet vrijwel leeg wordt wanneer deze regels niet kunnen worden toegepast.
Als je Modernizr op een logische manier wilt gebruiken, moet je op je ontwerptalent vertrouwen om alternatieve stijlen te bedenken die het ontwerp niet breken en de rest van het stylesheet niet weggooien. U kunt bijvoorbeeld de slagschaduwen op letters vervangen als ze niet beschikbaar zijn, met een vet lettertype of transparantie met een andere kleur.
Om Modernizr te gebruiken, neemt u het verkleinde bestand op en past u een klasse toe van no-js
naar de element. Met deze laatste voorzorgsmaatregel kunt u stijlen opgeven voor wanneer JavaScript volledig is gedeactiveerd; natuurlijk, in die gevallen kan Modernizr je helemaal niet helpen. Als JavaScript is ingeschakeld, zal Modernizr instappen en de
no-js
met de resultaten van zijn functies voor het detecteren van functies.
...
Als u bereid bent te accepteren dat alle websites niet identiek in alle browsers hoeven te worden weergegeven, zult u merken dat Modernizr een essentieel hulpmiddel is in uw web-ontwikkelingsgordel!
Op dezelfde toon heeft ontwerper Andy Clarke een elegante oplossing bedacht voor het oplossen van IE6's gebrek aan standaard compliance. Genaamd "Universal IE6", deze stylesheet richt zich uitsluitend op typografie. De sleutel is om voorwaardelijke opmerkingen te gebruiken om alle andere stylesheets uit IE 6 te verbergen.
/ * Stylesheets voor andere browsers dan Internet Explorer 6 * /
Belangrijke notitie: Vergeet niet om de nieuwste versie op te nemen, omdat instructies voor oudere nog steeds rondzweven op het internet. De uiteindelijke resultaten zien er als volgt uit:
U hoeft niets te doen om IE 6 op een nieuwe site te ondersteunen.
Deze benadering heeft een vrij duidelijk voordeel ten opzichte van klassieke alternatieve stylesheets: u hoeft niets te doen om IE 6 op een nieuwe site te ondersteunen. Het nadeel is natuurlijk dat de site heel weinig van je ontwerp laat zien. Verder moet uw HTML-onderbouwing ook heel solide zijn, zodat de pagina bruikbaar is, zelfs als de meeste styling is uitgeschakeld.
Merk op dat Universal IE6 CSS geen styling bevat voor alleen HTML5-elementen zoals of
. Het is geen probleem tenzij u uitsluitend op die elementen vertrouwt om op sommige delen van de pagina een blokniveau-weergave te verkrijgen. Over het algemeen zou je je tekst altijd minstens in een paragraaf- of lijstelement inpakken.
Deze oplossing is duidelijk niet voor iedereen en u kunt klanten tegenkomen die het niet eens zijn met hun site gebrokenwanneer bekeken in IE6.
Je zou ook kunnen beweren dat je op dit moment net zo goed de IE6-ondersteuning volledig kunt laten vallen. Andy Clarke heeft hier zijn antwoorden op deze bezwaren samengevat.
Deze aanpak werkt het beste voor op inhoud gerichte sites en catastrofaal voor webtoepassingen; maar nogmaals, het bouwen van een moderne webapplicatie om goed te werken op IE 6 is een uitdaging op zich.
Onze volgende kampioen is een JavaScript-hulpprogramma dat is gericht op het introduceren van nieuwe mogelijkheden in oudere browsers (nou ja, eigenlijk alleen IE 6-8): Selectivizr werkt samen met andere JavaScript-bibliotheken zoals jQuery, Dojo of MooTools om ondersteuning toe te voegen voor een reeks van meer geavanceerde CSS selectors.
Ik heb er een paar opgesomd, maar houd er rekening mee dat de volledige lijst met functies afhankelijk is van uw voorkeur JavaScript-bibliotheek.
: hover
:focus
:eerstgeborene
:laatste kind
:Eerste lijn
:eerste brief
Om Selectivizr te gebruiken, downloadt u het vanaf hun startpagina en neemt u het op in uw sectie, samen met een van de ondersteuningsbibliotheken. Hier is een voorbeeld met jQuery:
Selectivizr werkt samen met andere JavaScript-bibliotheken om CSS3-ondersteuning te bieden voor IE 6-8.
Dit punt is erg belangrijk: Selectivizr kan niet alleen werken; het vereist dat uw voorkeurbibliotheek aanwezig is. Gelukkig is het compatibel met de overgrote meerderheid van populaire JavaScript-bibliotheken. De kans is groot dat als u JavaScript op uw site gebruikt, u waarschijnlijk al over een geschikte bibliotheek beschikt.
Aan de andere kant, als u ook geen bibliotheek gebruikt, is een alternatieve oplossing om het DOMAssistant met een laag gewicht te gebruiken, hoewel u misschien nog steeds uw gebruikelijke JavaScript-bibliotheek verkiest voor meer gemak bij het beheer van bestanden..
Wees echter voorzichtig, want de precieze selectors die Selectivizr beschikbaar stelt, zijn afhankelijk van de ondersteunde bibliotheek. Volgens de startpagina is nu het grootste bereik aan selectors beschikbaar bij MooTools, terwijl helaas jQuery het minste aantal selectors beschikbaar maakt. Het moet ook gezegd worden dat sommige van de selectors die niet beschikbaar zijn met jQuery vrij exotisch zijn en zelden worden gebruikt in het echte wereldgebruik. Raadpleeg ons artikel "30 CSS-kiezers die u moet onthouden" voor een volledige lijst met selectors.
Overigens zijn er, met de meeste JavaScript-oplossingen voor problemen met CSS, enkele beperkingen van toepassing.
element om uw stylesheets op te nemen (in tegenstelling tot
).CSS3Pie verbetert ook de [6-8] -mogelijkheden van Internet Explorer, maar op een veel meer native manier, omdat het effectief het gebruik van een aantal spiffy CSS3-eigenschappen mogelijk maakt, zoals grensradius, lineair verloop, vakschaduw, grensafbeelding
evenals voegt ondersteuning voor meerdere achtergronden toe. Gebruik CSS3Pie en zeg gedag tegen handmatig gesneden en gepositioneerde afgeronde hoeken.
CSS3Pie: zeg vaarwel tegen handmatig gesneden en gepositioneerde afgeronde hoeken.
De manier waarop het werkt, is gebruik te maken van weinig bekende eigen Microsoft-uitbreidingen: de CSS gedrag
eigenschappen en HTML-componentbestanden (officiële documentatie). Met deze extensie kunt u JavaScript koppelen aan bepaalde HTML-elementen met behulp van CSS. Het JavaScript wordt meegeleverd met enkele eigen tags van Microsoft in .htc
bestanden waarnaar wordt verwezen binnen de stijlregels.
Om deze reden alleen al kunnen veel ontwikkelaars betogen dat je CSS3Pie niet zou moeten gebruiken. De eigen tags van Internet Explorer zijn prestaties zwaar en produceren minder aantrekkelijke resultaten.
Waarom gebruikt CSS3Pie geen gewoon JavaScript? Wel is er een JS-specifieke versie, hoewel het team het gebruik ervan afraadt, omdat JavaScript de parseer van de pagina blokkeert.
Met de stroom .htc
oplossing, de implementatie is vrij eenvoudig: u hoeft slechts één bestand te uploaden vanuit de CSS3Pie-distributie, PIE.htc
, naar uw server. Daarna voegt u, elke keer dat u een van de ondersteunde CSS3-eigenschappen gebruikt, de onderstaande code toe:
gedrag: url (pad / naar / PIE.htc);
Bovenstaande, path / to / PIE.htc
is het pad ten opzichte van het HTML-bestand dat wordt weergegeven; niet het stylesheet.
Uiteraard kan CSS3Pie zijn magie alleen in Internet Explorer doen. Het heeft ook wat zorg nodig en voeding aan de serverkant:
PIE.htc
bestand wordt geserveerd met een text / x-component
inhoudstype. De distributie bevat een PHP-script dat hier voor kan zorgen als u uw serverconfiguratie niet mag wijzigen, bijvoorbeeld op een gedeelde host. PIE.htc
kan ook ActiveX-waarschuwingen activeren, meestal als u het op uw lokale host test. Dit laatste probleem vereist dat de oplossing van Mark of the Web wordt opgelost.CSS3Pie bevindt zich nog steeds, op het moment van schrijven, in de bètamodus - er zijn nog steeds enkele knelpunten die moeten worden gladgestreken.
HTML5 Boilerplate gaat veel verder dan uw standaardstartsjablonen.
HTML5 Boilerplate kan worden omschreven als een reeks sjablonen waarmee u snel aan de slag kunt met het bouwen van moderne HTML5-websites. Maar HTML5 Boilerplate gaat veel verder dan uw standaardstartsjablonen.
Het bundelt bijvoorbeeld de nieuwste versie van Modernizr (dezelfde maker) en de HTML-koppeling bevat zelfs de nieuwste door Google gehoste jQuery-, Yahoo profiler- en Google Analytics-scripts voor u. De CSS bevat de gebruikelijke resetregels, maar ook een schat aan @media-query's om u op weg te helpen met responsieve webontwerpgerichte mobiele apparaten.
De meest unieke functie is dat u naast de clientconfiguratie ook de serverkant krijgt: configuratiebestanden voor Apache en Nginx. Hiermee kunt u de downloadsnelheid maximaliseren en de HTML5-videobesturing optimaliseren. In het bijzonder, de .htaccess bestanden voor Apache kunnen erg handig zijn om in te loggen in een shared hosting account, zoals vaak dingen zoals gzip
compressie en vervalt
zijn standaard niet actief.
Sommige mensen zouden kunnen beweren dat HTML5 Boilerplate een beetje te veel beslissingen voor hen neemt (de Apache-configuratie verwijdert zelfs automatisch www. Voor de domeinnaam!) Of dat het enigszins Google-gericht is, maar het is altijd interessant om de bestanden te bestuderen en te achterhalen welke problemen de auteurs hebben verwacht.
Verder wordt u zeker aangemoedigd om het op te splitsen voor uw persoonlijke behoeften. Dit is gewoon een standaardplaatje om u op weg te helpen.
Als je een gedetailleerd overzicht wilt van alles wat HTML5 Boilerplate bevat, heeft Paul Irish een exclusieve screencast voor Nettuts opgenomen+.
Een volledig becommentarieerde versie is beschikbaar op html5boilerplate.com.
Vaak ontmoedigt de angst om functies te implementeren die geen volledige browserondersteuning genieten, ontwerpers van de toepassing van de nieuwste technologieën. Hoewel de demografie van uw publiek zorgvuldig moet worden overwogen, evenals de wensen van uw klant, is het mogelijk om HTML5 en CSS3 volledig te gebruiken als u accepteert dat sites niet in alle browsers hetzelfde hoeven te zijn..
Zie het op deze manier: als u wacht tot CSS3 "voltooid is", zult u voor altijd wachten. CSS2 wordt nog niet eens volledig ondersteund in alle browsers! Het leidende principe hierbij is dat elke gebruiker het meeste geld krijgt voor zijn geld: als hij een geavanceerde browser gebruikt, waarom niet profiteren van alle functies die de browser biedt??
Laat ons weten wat u vindt van deze kwesties in de opmerkingen. Heel erg bedankt voor het lezen!