Zum Inhalt springen

Verbesserungen von Typo3 4.02 bezüglich der Barrierefreiheit

Erstellt am 6. Oktober 2006 · 7 Antworten · letzte Antwort am 27. Oktober 2006

Tags: Frage

Ivko ·

Einige Fragen:

a. Was sind denn eigentlich die wesentlichen Verbesserungen gegenüber der 3.8er Version bezüglich der Barrierefreiheit?

b. Ich möchte eine barrierefreie Seite umsetzten und möchte wissen, welche Extensions (XHTML konformes template vorausgesetzt) ich dafür noch brauche.

c. Die meisten ändern die Schriftgröße über die Browserfunktion, ich habe aber gesehen, dass z.B. für die Änderung der Schriftgröße oft das Javascript efa_fontsize verwendet wird (könnte man direkt in das HTML template inbinden), was haltet ihr davon? Oder gibt es eine geeignetere Extension?

ONeill ·

a. css_styled_content ist jetzt voll in TYPO3 Version 4.x integriert, so dass die Seiten nicht auf einem Tabellenlayout sondern mit korrektem Markup dargestellt werden. Dies ist ein großer Schritt in Richtung Barrierefreiheit und damit kannst du deine Seite auch erstellen.

b. Die wichtigste Erweiterung ist css_styled_content und die ist in V4 schon drin. Die meisten anderen Extensions unterstützen weitestgehend Templates als Vorlage, welche du selber anpassen kannst und diese somit auch Barrierefreier werden.

c. Da der Font-Resizer javaScript benutzt ist dieser auch nicht ganz optimal. Am Besten wäre eine Lösung über PHP. Nichtsdesto trotz sollten Benutzer, welche auf eine Vergrößerung angewiesen sind, auch wissen wie sie den Browser benutzen. Ich habe allerdings auch einen Font Resizer auf meiner Seite, allerdings mit PHP. Da gibt es aber soweit ich weiß noch keine eigene Extension zu. Das habe ich selber über ein PHP Skript gemacht.

larsmessmer ·

Hallo

Ich löse den Frontsize Umschalter per Javascript:

Im Seiten Header die zwei Dateien:

<script type="text/javascript" src="fileadmin/cookies.js"></script>
<script type="text/javascript" src="fileadmin/changestyle.js"></script>

einbinden und die CSS Scripte für die Schriftgrössen:

<link rel="stylesheet" type="text/css" href="fileadmin/big.css" title="big" media="screen" />
<link rel="stylesheet" type="text/css" href="fileadmin/medium.css" title="medium" media="screen" />
<link rel="stylesheet" type="text/css" href="fileadmin/small.css" title="small" media="screen" />

Datei cookies.js:

function Cookiemanager(name,defaultExpiration,expirationUnits,defaultDomain,defaultPath) {
	this.name = name;
	this.defaultExpiration = this.getExpiration(defaultExpiration,expirationUnits);
	this.defaultDomain = (defaultDomain)?defaultDomain:(document.domain.search(/[a-zA-Z]/) == -1)?document.domain:document.domain.substring(document.domain.indexOf('.') + 1,document.domain.length);
	this.defaultPath = (defaultPath)?defaultPath:'/';
	this.cookies = new Object();
	this.expiration = new Object();
	this.domain = new Object();
	this.path = new Object();
	window.onunload = new Function (this.name+'.setDocumentCookies();');
	this.getDocumentCookies();
	}
Cookiemanager.prototype.getExpiration = function(expiration,units) {
	expiration = (expiration)?expiration:7;
	units = (units)?units:'days';
	var date = new Date();
	switch(units) {
		case 'years':
			date.setFullYear(date.getFullYear() + expiration);
			break;
		case 'months':
			date.setMonth(date.getMonth() + expiration);
			break;
		case 'days':
			date.setTime(date.getTime()+(expiration*24*60*60*1000));
			break;
		case 'hours':
			date.setTime(date.getTime()+(expiration*60*60*1000));
			break;
		case 'minutes':
			date.setTime(date.getTime()+(expiration*60*1000));
			break;
		case 'seconds':
			date.setTime(date.getTime()+(expiration*1000));
			break;
		default:
			date.setTime(date.getTime()+expiration);
			break;
		}
	return date.toGMTString();
	}
Cookiemanager.prototype.getDocumentCookies = function() {
	var cookie,pair;
	var cookies = document.cookie.split(';');
	var len = cookies.length;
	for(var i=0;i < len;i++) {
		cookie = cookies[i];
		while (cookie.charAt(0)==' ') cookie = cookie.substring(1,cookie.length);
		pair = cookie.split('=');
		this.cookies[pair[0]] = pair[1];
		}
	}
Cookiemanager.prototype.setDocumentCookies = function() {
	var expires = '';
	var cookies = '';
	var domain = '';
	var path = '';
	for(var name in this.cookies) {
		expires = (this.expiration[name])?this.expiration[name]:this.defaultExpiration;
		path = (this.path[name])?this.path[name]:this.defaultPath;
		domain = (this.domain[name])?this.domain[name]:this.defaultDomain;
		cookies = name + '=' + this.cookies[name] + '; expires=' + expires + '; path=' + path + '; domain=' + domain;
		document.cookie = cookies;
		}
	return true;
	}
Cookiemanager.prototype.getCookie = function(cookieName) {
	var cookie = this.cookies[cookieName]
	return (cookie)?cookie:false;
	}
Cookiemanager.prototype.setCookie = function(cookieName,cookieValue,expiration,expirationUnits,domain,path) {
	this.cookies[cookieName] = cookieValue;
	if (expiration) this.expiration[cookieName] = this.getExpiration(expiration,expirationUnits);
	if (domain) this.domain[cookieName] = domain;
	if (path) this.path[cookieName] = path;
	return true;
	}
var cookieManager = new Cookiemanager('cookieManager',1,'years');

Datei changestyle.js:

function clearDefault(el) {
  if (el.defaultValue==el.value) el.value = ""
}

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel") && a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) {
	a.disabled = false;
	cookieManager.setCookie("style", title, 365);
      }
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

var cookie = cookieManager.getCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

Das funktioniert einwandfei und braucht kein nachladen, einziger Nachteil: es wird ein cookie verwendet.

Gruss Lars

miwolfram ·

Legt eure Schriftgrößen mit em anstatt mit px fest und ihr braucht gar keinen Font-Resizer da das dann mit "Schriftgrad"-Einstellung im IE für 5 Stufen und im Firefox sogar stufenlos eingestellt werden kann.

ONeill ·

Ja das stimmt. Das sollte sowieso generell gemacht werden.

Ein Font-Resizer ist eine schöne optionale Möglichkeit Benutzern, welche sich nicht gut genug mit ihrem Browser auskennen, eine einfache Möglichkeit zu geben, die Schriftgröße an ihre Bedürfnisse anzupassen.

Keine Pflicht, aber wenn es sich schön in die Seite intergrieren lässt eine feine Sache.