protofunc()

Meinung zu HTML5: Semantik noch Flop, progressive enhancement Top

Tags: HTML 5, deutsch, javascript

Ich bin ein großer Freund von HTML5. Allerdings kann ich nicht nachvollziehen, in welcher Form einige – bereits heute – HTML5 nutzen wollen bzw. zu nutzen empfehlen. Die tollen HTML5-Elemente (nav, aside, header, footer..), die wir mit dreckigen Tricks nutzen könnten, bringen nichts. Kein Browser, kein Screenreader und auch keine ernstzunehmende Suchmaschine unterstützen die Semantik der neuen Tags, gleichzeitig bereiten Sie in allen Versionen des Internet Explorer sowie im Firefox 2 erhebliche Probleme und machen einiges kaputt.

Auf der anderen Seite gibt es die schönen WAI-Aria-Landmarks. Sie sind für eine zusätzliche Semantik definitiv der bessere Weg, weil sie im Gegensatz zu den oben genannten HTML 5 Element einfach funktionieren, helfen und nichts kaputt machen.

Andere Elemente wie figure und legend können teilweise durch aria-labelledby/aria-describedby substituiert werden.

Dies ist kein Widerspruch zu HTML 5. Im Gegenteil der HTML 5 Validator validiert inzwischen nicht nur Teile von Wai-Aria, sondern eben auch die Aria-Landmarks.

Neben den problemlos verwendbaren Aria-Attributen, gibt es in HTML5 viele schöne neue Sachen zu entdecken.

  • Man kann sich endlich den doctype merken.
  • Das canvas-Element wird von allen modernen Browsern unterstützt und kann mit excanvas auch im Internet Explorer zum Laufen gebracht werden (allerdings mit deutlich geringerer Performance).
  • Attribute wie autocomplete sind endlich Bestandteil von HTML 5. Ohne dieses Attribut sind mit Javascript erstellte Auto-Suggest-Listen für Eingabefelder unmöglich.
  • Es gibt neue, befreiende Verschachtelungsregeln.
  • Best practices wie beispielsweise document.documentElement.className += ‘js-on’; erzeugen endlich validen Code.

Vor allem jedoch bietet HTML 5 – insbesondere bei Formularelementen – semantische Extras, die Javascript-Entwickler, gleichgültig von der derzeitigen Unterstützung im Browser, dringend benötigen, um eleganten, unobtrusiven Code schreiben zu können.

Wie zusätzliche semantische HTML5-Attribute beim Aufbau von Javascript helfen

Man stelle sich vor, man möchte einen Slider mit numerischen Werten realisieren. Dieser Slider soll jeweils einen vom Backend vorgegeben Startwert, Mindestwert und Höchstwert kennen. Als Javascript-Fallback soll ein einfaches Texteingabefeld dienen.

Während HTML 4 sowie XHTML 1.0 lediglich ein Attribut für den Startwert bieten, hilft uns HTML 5 ebenso beim Mindest- und Höchstwert unseres unobtrusiv zu erstellenden Sliders.

<input type=“number“ value=“3“ min=“1“ max=“10“ />
<!-- oder in Schritten -->
<input type=“number“ value=“3“ min=“1“ max=“10“ step="1" />
<!-- oder gleich als 'slider' -->
<input type=“range“ value=“3“ min=“1“ max=“10“ />

HTML 5 und progressive enhacement

HTML 5 bietet einige interessante Features, welche bereits heute mit Hilfe von Javascript implementiert werden können.

Das oben beschriebene canvas-Element ist ein Beispiel hierfür, ein weiteres sind die zahlreichen Erweiterungen für Formularelemente, welche in Teilen bereits von Browsern implementiert wurden.

Die HTML 5 – Attribute liefern hierbei die semantische Grundlage für die Aktivierung und Konfiguierung des Javascripts.

Vor der Implementierung mit Javascript sollte man grundsätzlich testen, ob das Feature nicht bereits Teil des Browsers ist. Da die neuen HTML-Attribute in der Regel mit einem DOM-Interface korrelieren, ist dieser Test kinderleicht. Hier einige Beispiele mit jQuery:

(function($){

	var form = $('<form><fieldset><textarea /></fieldset></form>');

	$.extend($.support, {
		//wird die Constrain Validation unterstützt?
		checkValidity: !!(form[0].checkValidity),
		// wird das maxlength-Attribut am textarea-Element unterstützt?
		textareaMaxlength: !!( $('textarea', form)[0].maxLength !== undefined || $('textarea', form)[0].maxlength !== undefined)
	});

})(jQuery);

Eine Beispielimplementierung für das placeholder-Attribut

Das placeholder-Attribut bietet ein Formularfeature, welches Frontend-Entwickler tagtäglich bereits heute mit Javascript in Webseiten nutzen; nämlich das Entfernen von vorbelegten Werten in Eingabefeldern. Hierbei ist das Standardverhalten wie folgt definiert: Der Placeholder stellt einen kurzen Hinweistext dar, welcher dem User als vorläufiger Wert im Eingabefeld angezeigt wird, solange das Feld keinen Wert hat und nicht fokusiert ist. Das placeholder-Attribut ist kein Ersatz für ein assoziertes label-Element!

<label for="birthday">Ihr Geburtstag</label>
<input type="text" placeholder="TT.MM.JJJJ" name="birthday" id="birthday" />

In HTML4/XHTML 1 ist die Unterscheidung ob das Eingabefeld einen Wert, welcher sich wie ein Placeholder verhalten soll oder nicht, nicht gelöst. Die derzeit eleganteste Javascript-Technik verwendet hierzu einen Vergleich zwischen der value- und der defaultValue-Eigenschaft. Diese Form der Implementierung kommt jedoch an Ihre Grenzen, wenn der User beispielsweise ein Suchformular absendet und der Suchbegriff aus Usability-Gründen wiederholt wird, um es dem User zu gestatten, ohne Neueingabe den Suchbegriff zu erweitern, verkürzen oder sonst wie zu modifizieren. Da in diesem Beispiel ausnahmsweise der defaultValue nicht die Aufgabe eines Placeholders besitzt, fehlt dem Javascript die entscheidende Information sich korrekt zu verhalten. Dieses Problem kann letztlich nur durch Hinzufügen dieser Extrainformation gelöst werden. Und die Standardisierung dieser Extrainformation stellt gerade eben das placeholder-Attribut dar.

Wie könnte nun eine placeholder-Implementierung aussehen?

Als erstes erweitern wir unseren oben genannten HTML5-Implementierungstest:

var form = $('<form><fieldset><input type=“text“ /><textarea /></fieldset></form>');

$.extend($.support, {
	checkValidity: !!(form[0].checkValidity),
	textareaMaxlength: !!( $('textarea', form)[0].maxLength !== undefined || $('textarea', form)[0].maxlength !== undefined),
	placeHolder: !!($('input', form)[0].placeholder !== undefined || $('input', form)[0].placeHolder !== undefined)
});

Wird das placeholder-Attribut nicht unterstützt, kann mit der Implementierung durch Javascript fortgefahren werden, was wie folgt aussehen könnte.

if(!$.support.placeHolder){

	function resetInput(){
		if(this.value == this.getAttribute('placeholder')){
			this.value = '';
		}
	}

	function fillInput(){
		if(!this.value){
			this.value = this.getAttribute('placeholder');
		}
	}
	$(function(){
		$('input[placeholder]')
			.each(function(){
				var placeHolder = this.getAttribute('placeholder').replace(/\n|\r|\f|\t/g, '');
				this.setAttribute('placeholder', placeHolder);
				if(!this.value){
					this.value = placeHolder;
				}

			})
			.bind('blur', fillInput)
			.bind('focus', resetInput)
		;
	});
}

Das schöne, das Script kann bereits heute für ein besseres placeholder/input-rest-Script eingesetzt werden. (Ich kenne keines mit einem besseren Verhalten). Bei Browsern (zum Beispiel Safari 4), welche dieses Attribut bereits unterstützen, funktioniert das ganze dann auch ohne Javascript. Die Benutzung ist sehr einfach. Konfiguration und Start des Scripts geschehen komplett automatisch.

<label for="birthday">Ihr Geburtstag</label>
<input type="text" id="birthday" placeholder="TT.MM.JJJJ" name="birthday" />

Hier das gesamte Script (Eine verbesserte Variante des Placeholder-Scripts):

(function($){

var form = $('<form><fieldset><input type=“text“ /><textarea /></fieldset></form>');

$.extend($.support, {
	checkValidity: !!(form[0].checkValidity),
	textareaMaxlength: !!( $('textarea', form)[0].maxLength !== undefined || $('textarea', form)[0].maxlength !== undefined),
	placeHolder: !!($('input', form)[0].placeholder !== undefined || $('input', form)[0].placeHolder !== undefined)
});

if(!$.support.placeHolder){
	$(function(){
		$('input[placeholder]')
			.each(function(){
				var placeHolder = this.getAttribute('placeholder').replace(/\n|\r|\f|\t/g, '');
				this.setAttribute('placeholder', placeHolder);
				if(!this.value){
					this.value = placeHolder;
				}

			})
			.bind('blur', function fillInput(){
				if(!this.value){
					this.value = this.getAttribute('placeholder');
				}
			})
			.bind('focus', function resetInput(){
				if(this.value == this.getAttribute('placeholder')){
					this.value = '';
				}
			})
		;
	});
}
})(jQuery);

Fazit

HTML 5 hat deutlich mehr zu bieten als nicht funktionierende HTML-Elemente. Diese sind oftmals nicht mehr als semantischer „Zuckerguß“. HTML 5 kann jetzt schon vielmehr: Es ermöglicht wirklich elegantes und unobtrusives Javascript.

Written August 16, 2009 by
alexander farkas

11 Comments »

  1. [...] welche die Nutzung von HTML5 in seiner reinen Form bereits heute propagieren. Die Probleme der Rückwärtskompatibilität mit HTML5-Elementen sind zu groß und können eben nicht mit dem document…. Ausnahmen bestätigen jedoch die Regel und eine hiervon sind mit Sicherheit die HTML5 [...]

    Pingback by protofunc() » HTML 5 Mediaelemente für alle – Warum und Wie video-/audio- Elemente schon heute genutzt werden sollten — April 19, 2010 @ 10:26 pm

  2. [...] progressive enhancement” und vor allen Dingen einigen Kommentaren habe ich mein eigenes HTML5 Placeholder-Script nochmals [...]

    Pingback by protofunc() » HTML5 placeholder Attribut und Zugänglichkeit — June 18, 2010 @ 8:48 am

  3. Hallo Alexander,

    super Artikel, Script klappt tadellos.

    Im Einsatz u.a. auf:

    http://www.gold-gold-gold.de/kontakt

    Link zu Deinem Artikel im Footer gesetzt.

    Gruß

    Werner

    Comment by Werner — August 15, 2010 @ 11:22 am

  4. double penetratrations free trailers
    hershey park amusement
    fotos de mujeres ensenando todo
    www damacai com
    pappadeaux bisque recipe
    serious sam hd walk thru
    free blank 64 team bracket
    alba galindo senadoras
    images of uncircumsized
    d cut jeans buy
    micro braids baltimore md
    lidos night club
    fotos escotes voyeur descuidos bragas upskirts tangas
    m6 scout for sale
    courtney thorne smith butt naked
    canal 62 los angeles
    bankofamericasignin banking bankofamericahome
    thompson center venture centerfire
    rheem imperial 80 plus furnace
    red nose tiger stripe pitbulls

    Comment by Neo — January 8, 2011 @ 7:37 am

  5. coco austin
    jasmine byrne ferrara video stream
    gun caliber comparisons
    ann margaret topless
    www alaskapermanent fund com
    536905802 manual
    winchester serial number lookup
    mediacom webmail login mchsi
    lil wayne unreleased underground music
    lisa raye and da brat biography
    49 chevy truck id plate picture
    hindi maa ki chudai story
    5 cc equals ml
    pic tractor flatbeds
    aj wright clothing department
    stella stevens nude
    biography zonnique pullins
    graco interchangeable system for babies
    palomar 250 amp
    letras para leer a una quincea era

    Comment by Neo — January 8, 2011 @ 8:10 am

  6. wachovia account login online services
    copy of 2010 w9
    ladies going braless
    tjoobs videos
    ballisticchart for 223
    menu and prices of tgif
    gangster disciple nation laws and lit
    free sexy legs upskirt kelly cass videos
    interarms firearms alexandria virginia
    classic americans ball gowns
    kendall meditrace 530
    feed troughs for deer
    convert mg kg to m3
    mechquest trainer download spook
    netzero message center
    market basket supermarket ma
    sepupu ku gersang
    parisian department store
    fram 3593 oil filter
    clog altery symptoms

    Comment by Halo — January 8, 2011 @ 8:42 am

  7. large lump on the shin bone
    simple 1900s apron patterns
    jr high schoolgirls porn
    mustang flame paint jobs
    westside blood piru damu rules knowledge
    summary of salvation by langston hughes
    sony imax nyc new york city
    16 oem steel wheel hhr
    sexsocon 5 mujeres
    tonsilith pictures
    philippines sex video clips
    water gram liter
    bb tbanking
    scary popouts
    wooden smokehouses for sale
    modified bob with graduated layers
    pinkerton epayroll
    nursing diagnosis astham nanda
    remington 25 06 ballistics
    used 4 wheelers for sale louisiana

    Comment by Aron — January 8, 2011 @ 8:44 am

  8. gun bluing chemicals
    k98 sling installation
    delishis booty
    police survalence cameras
    fie e15 pistol
    dr dean edell view of vitamins
    holley 9510 4653
    f2atv forums coolsat
    gangsta disciples handshake
    da 30 point buck song lyrics
    the american pageant fourteenth edition kennedy review
    18 sal dokhtar
    grandes cucas travestis
    parejas liberales en texas
    reverse arrow bob hairstyle
    david harold blackwell mathematician
    best buy ego support
    provident bank of redlands cd rates
    crystal bottom southern belle
    silver the hedgehog sprites

    Comment by Arnie — January 8, 2011 @ 8:52 am

  9. www securitas epay com information
    centigrade equals ferinheight
    gaby espino porn
    2 0l zetec timing marks
    www camouflagelayouts com
    los mejores culos grandes
    pictures of naked mythical gods
    hy hunter derringer
    simplify cos2 arccotx
    aleida n ez nude
    84s swangers
    discounted nautical clocks
    viscount organ repair indiana
    bright red blood between periods
    bank of america netbenefits
    45 lc 410 over under combo guns
    parking near 151 w randolph
    pictures of car accidents victims
    spotted dicke pudding
    1996oldsmobile achieva

    Comment by Hero — January 8, 2011 @ 9:05 am

  10. 1990 chevy astro van vaccum hose routing
    how many oz in lb
    avatar tylee naked
    listen to nephew tommys pranks mother
    battle royale ralph ellison
    chica mexicanas calienteswww com
    bon ton department store
    folk gd prayer
    powerpoint nonliving factors
    mccolly realty demotte indiana
    cogelonas de 40
    elegy examples poem
    rohm 25 auto pistol
    left eye open casket funeral pictures
    pearl ls island
    printable venn diagram circles
    fishtail braids designs in northern va
    bahan ka dhoodh
    toccara jones half naked
    melissa peterson reba weight loss

    Comment by Bill — January 9, 2011 @ 8:06 am

  11. I liked this so I bookmarked http://www.protofunc.com/2009/08/16/meinung-zu-html5 at reddit.com so my co-workers can view it as well. I simply used protofunc() » Meinung zu HTML5: Semantik noch Flop, progressive enhancement Top as the link title in my post, as I figured it would be a good way to spread the word about this great post. Please email me back at Musslewhite285@gmail.com if there is anything else I can do to help.

    Comment by Bethanie Sedanos — April 15, 2011 @ 2:43 am

RSS feed for comments on this post | TrackBack URL

Leave a comment