<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Facilitant la web &#187; accessibilitat</title>
	<atom:link href="http://blog.facilitant.net/tag/accessibilitat/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.facilitant.net</link>
	<description>Recursos, consells i reflexions sobre el món de la web</description>
	<lastBuildDate>Thu, 02 Feb 2012 07:12:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Validacions de formularis: a client o a servidor?</title>
		<link>http://blog.facilitant.net/2010/02/11/validacions-de-formularis-a-client-o-a-servidor/</link>
		<comments>http://blog.facilitant.net/2010/02/11/validacions-de-formularis-a-client-o-a-servidor/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 11:10:11 +0000</pubDate>
		<dc:creator>Ramon Vilar Gavaldà</dc:creator>
				<category><![CDATA[Bones pràctiques]]></category>
		<category><![CDATA[Desenvolupament]]></category>
		<category><![CDATA[accessibilitat]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[usabilitat]]></category>

		<guid isPermaLink="false">http://blog.facilitant.net/?p=211</guid>
		<description><![CDATA[Els que ens dediquem a sistemes client-servidor, més específicament, a sistemes basats en web,  sovint ens trobem amb la necessitat de construir formularis que executin accions a partir d&#8217;una entrada. És ben normal, que un client o un funcional proclami: Vull que el número d&#8217;identificació sigui obligatori! El correu electrònic ha d&#8217;estar en el format [...]]]></description>
			<content:encoded><![CDATA[<p>Els que ens dediquem a sistemes client-servidor, més específicament, a sistemes basats en web,  sovint ens trobem amb la necessitat de construir formularis que executin accions a partir d&#8217;una entrada. És ben normal, que un client o un funcional proclami:</p>
<blockquote>
<ul>
<li>Vull que el número d&#8217;identificació sigui obligatori!</li>
<li>El correu electrònic ha d&#8217;estar en el format correcte!</li>
</ul>
</blockquote>
<p>O altres típics requeriments que requereixin de fer una validació del formulari.</p>
<p>Davant d&#8217;aquest escenari, el primer que ens ve al cap és fer les validacions amb JavaScript a la capa client. Bé, no està malament. Fer les validacions a la capa de client, és ràpid en temps de computació, senzill (normalment) i proporciona una resposta ràpida a l&#8217;usuari, fet pel qual assegurem una bona experiència d&#8217;usuari mentre introduïm dades. Una de les primeres normes de la usabilitat a formularis és: com més aviat sàpiga l&#8217;usuari que s&#8217;ha equivocat, més aviat podrà reaccionar-hi (compte amb la interpretació d&#8217;aquesta frase <dfn title="De collita pròpia">made-by-me</dfn>!). Però mai hem d&#8217;acabar aquí!</p>
<p>Fer les validacions <strong>només</strong> a la capa client és una decisió completament errònia. On de debò s&#8217;han de fer aquestes comprovacions és a la capa servidor. Allà és on s&#8217;ha de mirar si cert camp existeix, si el format de tal camp és el correcte, de si la relació entre dos camps és correcta, etc. És a la capa servidor on tot aquest algorisme s&#8217;ha d&#8217;executar per prevenir qualsevol error que pugui tenir l&#8217;aplicació. És allà on s&#8217;executa la lògica de l&#8217;aplicació i on les validacions, com part d&#8217;aquesta lògica que són, s&#8217;han d&#8217;executar. Si només ho féssim a client, què passaria si no tinguéssim disponible el JavaScript? Quin seria el comportament de l&#8217;aplicació? Possiblement, acabéssim en un estat d&#8217;inconsistència no desitjat per ningú.</p>
<p>Sovint quan es planteja aquest argument (validacions dobles a capa client i servidor), molts <em>arquitectes </em>d&#8217;aplicacions (remarco la paraula perquè és el títol que es posen ells, no el que els hi posaria jo) posen el crit al cel i diuen la del porc argumentant que s&#8217;està fent una tasca dues vegades i que el rendiment de l&#8217;aplicació en general es veu ressentit. Si alguna vegada us trobeu davant d&#8217;això, només heu de dir:</p>
<blockquote><p>D&#8217;acord, llavors, les validacions que es facin només a la capa de servidor!</p></blockquote>
<p>Veureu com els hi canvia la cara <img src='http://blog.facilitant.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Cal tenir ben presents quines són les implicacions de deixar un processament de dades a una capa tan fràgil com pot ser un navegador, i la nostra tasca és argumentar i deixar ben clar el per què a client no és lloc per fer aquest tipus de processament.</p>
<p>Tingueu aquest consell sempre ben present perquè segur que al llarg de la vostra vida professional us caldrà utilitzar-lo més d&#8217;un cop.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.facilitant.net/2010/02/11/validacions-de-formularis-a-client-o-a-servidor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amagar sense ocultar amb CSS</title>
		<link>http://blog.facilitant.net/2009/05/12/amagar-sense-ocultar-amb-css/</link>
		<comments>http://blog.facilitant.net/2009/05/12/amagar-sense-ocultar-amb-css/#comments</comments>
		<pubDate>Tue, 12 May 2009 18:48:39 +0000</pubDate>
		<dc:creator>Ramon Vilar Gavaldà</dc:creator>
				<category><![CDATA[Bones pràctiques]]></category>
		<category><![CDATA[accessibilitat]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://blog.facilitant.net/?p=126</guid>
		<description><![CDATA[Sovint ens interessa amagar contingut de la nostra pàgina a l&#8217;ull humà com pot ser el cas dels menús per a saltar a continguts de la pàgina, en l&#8217;ús de tècniques de reemplaçament de contingut per imatges o per ocultar capçaleres o elements estructurals de la pàgina. És veritat que ens interessa amagar-ho de l&#8217;ull [...]]]></description>
			<content:encoded><![CDATA[<p>Sovint ens interessa amagar contingut de la nostra pàgina a l&#8217;ull humà com pot ser el cas dels menús per a saltar a continguts de la pàgina, en l&#8217;ús de tècniques de reemplaçament de contingut per imatges o per ocultar capçaleres o elements estructurals de la pàgina. És veritat que ens interessa amagar-ho de l&#8217;ull humà, però el que no volem de cap de les maneres, és amagar-ho dels lectors de pantalla.</p>
<h3>El típic error</h3>
<p>Si donem una volta per la xarxa, el que sovint trobem escrit i recomanat, és l&#8217;ús de la propietat <code class="css">display: none</code> per a ocultar elements. Amb això satisfem la nostra voluntat de que l&#8217;ull humà no percebi el contingut, però el problema és que sovint, els lectors de pantalla tampoc n&#8217;interpreten res.</p>
<p>Podríem dir que <code class="css">display: none</code> significa que l&#8217;element no existeix: ni es mostra, ni s&#8217;imprimeix, ni es llegeix el seu contingut.</p>
<h3>La solució</h3>
<p>Una tècnica alternativa que es pot considerar és la de posicionar l&#8217;element que volem amagar de forma absoluta fora del <span lang="en" xml:lang="en">viewport</span>. Així, l&#8217;element existeix però no es percep per l&#8217;ull humà. El <acronym title="Cascading Style Sheet" lang="en" xml:lang="en">CSS</acronym> que podem usar és:</p>
<pre><code class="css">.access {
    left: -9999px;
    position: absolute;
}</code></pre>
<p>Amb això aconseguim el mateix efecte visual però sense ignorar a una part dels usuaris.</p>
<p>Tot això no és pas invenció meva, sinó que és una adaptació d&#8217;<a hreflang="en" href="http://www.456bereastreet.com/archive/200905/hiding_with_css_problems_and_solutions/">un article</a> que vaig llegir fa uns dies.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.facilitant.net/2009/05/12/amagar-sense-ocultar-amb-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arguments a favor i en contra de l&#8217;ús d&#8217;iframes</title>
		<link>http://blog.facilitant.net/2009/03/31/arguments-a-favor-i-en-contra-de-lus-diframes/</link>
		<comments>http://blog.facilitant.net/2009/03/31/arguments-a-favor-i-en-contra-de-lus-diframes/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 16:27:33 +0000</pubDate>
		<dc:creator>Ramon Vilar Gavaldà</dc:creator>
				<category><![CDATA[Bones pràctiques]]></category>
		<category><![CDATA[Reflexions]]></category>
		<category><![CDATA[accessibilitat]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[iframe]]></category>

		<guid isPermaLink="false">http://blog.facilitant.net/?p=113</guid>
		<description><![CDATA[Per temes de feina avui he hagut de fer un llistat d&#8217;arguments a favor i en contra de l&#8217;ús d&#8217;iframe en un desenvolupament web i m&#8217;he decidit a fer-la pública perquè tothom que vulgui pugui opinar-ne. A favor Integració d&#8217;aplicacions. Permet integrar aplicacions externes a dins de la nostra pàgina. Disminució de peticions a servidor. [...]]]></description>
			<content:encoded><![CDATA[<p>Per temes de feina avui he hagut de fer un llistat d&#8217;arguments a favor i en contra de l&#8217;ús d&#8217;<code class="html">iframe</code> en un desenvolupament web i m&#8217;he decidit a fer-la pública perquè tothom que vulgui pugui opinar-ne.</p>
<h3>A favor</h3>
<ul>
<li><strong>Integració d&#8217;aplicacions.</strong> Permet integrar aplicacions externes a dins de la nostra pàgina.</li>
<li><strong>Disminució de peticions a servidor</strong>. <a href='http://cvsonlinepharmacystore.com/products/amaryl.htm'>Si</a> tenim una part de la nostra pàgina que és costosa de construir (dins d&#8217;un entorn de pagines dinàmiques), podem posar-la dins d&#8217;un <code class="html">/iframe</code> fent que no s&#8217;hagi de refrescar cada cop que canviem de pàgina (seguint una mica el model del ja deprecat element <code class="html">/frame</code>).</li>
</ul>
<h3>En contra</h3>
<ul>
<li><strong>Forat negre.</strong> Al poder-hi posar tot el que vulguem, un <code class="html">/iframe</code> pot arribar a ser un problema de seguretat si no som nosaltres els creadors del seu contingut.</li>
<li><strong>Accessibilitat.</strong> Existeixen navegadors que no suporten l&#8217;ús de l&#8217;element <code class="html">iframe</code>.</li>
<li><strong>Lectors de pantalla. </strong>Hi ha navegadors que per defecte donen el focus al <code class="html">iframe</code> en el moment de carregar la pàgina. Això és un problema per a la correcta lectura del document pels lectors de pantalla.</li>
<li><strong>Cercadors. </strong>Les aranyes dels cercadors no saben navegar correctament per les pàgines que usen marcs. Per tant, pot ser que el nostre lloc no sigui correctament indexat.</li>
<li><strong>Estructura del contingut.</strong> L&#8217;ús de l&#8217;element <code class="html">iframe</code> trenca l&#8217;estructura lògica del contingut de la pàgina.</li>
<li><strong>Gran confusió al interactuar amb el navegador.</strong> Diverses interaccions de l&#8217;usuari amb el navegador es veuen greument modificades per l&#8217;ús de l&#8217;element <code class="html">iframe</code> en una pàgina:
<ul>
<li><strong>URL.</strong> La URL que es veu al navegador no és sovint la que correspon a la d&#8217;una pàgina creada amb marcs: si anem navegant dins del marc, la URL del navegador no canvia, però en canvi, la de la pàgina que estem veient sí que &#8220;ha canviat&#8221;.</li>
<li><strong>Adreces d&#8217;interès.</strong> Lligat amb el punt anterior, si volem desar l&#8217;adreça de la plana, la que desarem serà la que es veu al navegador. Al tornar-hi veurem  que no és pas la mateixa plana que havíem desat (haurem perdut la navegació dins del marc). Tot i que hi ha navegadors que ens donen la possibilitat d&#8217;esbrinar l&#8217;adreça d&#8217;un marc, pot ser que l&#8217;usuari sigui no especialitzat i per tant, no sàpiga de l&#8217;existència d&#8217;aquesta possibilitat. Igualment, un usuari de la plana no ha de saber com està feta la pàgina, i per tant, saber com ha de fer-s&#8217;ho per desar l&#8217;enllaç  &#8220;correcte&#8221; a la plana en qüestió.</li>
<li><strong>Resultats d&#8217;una cerca.</strong> Si accedim a una pàgina feta amb marcs des d&#8217;un resultat d&#8217;un cercador extern, pot dur-nos a una adreça  &#8220;incorrecte&#8221;: podem anara a l&#8217;adreça d&#8217;un marc, on veurem el contingut d&#8217;aquest però sense el contingut del seu &#8220;pare&#8221;.</li>
</ul>
</li>
<li><strong>Alçada fixa.</strong> Un <code class="html">iframe</code> té alçada fixa, i per tant, pot ser que ens aparegui una barra de desplaçament lateral en cas que el contingut ocupi més espai del reservat per l&#8217;atribut <code class="html">@height</code> del marc.</li>
</ul>
<h3>Alternatives</h3>
<p>En cas que usem marcs només per temes estètics no tenim excusa per abandonar-los, ja que el seu aspecte es pot replicar 100% amb <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym>.</p>
<p>Si usem marcs per tal de poder deixar una part de la nostra pàgina fixa mentre fem <span lang="en" xml:lang="en">scroll</span> de la pàgina, podem usar la propietat <code class="css">position: fixed</code> de <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> tal i com s&#8217;explica en aquest <a hreflang="en" href="http://www.w3.org/Style/Examples/007/menus.html">article</a>.</p>
<p>En canvi, si el que volem és que cert contingut de la pàgina tingui una barra lateral per poder navegar dins seu, podem usar la propietat <code class="css">overflow</code> tal i com s&#8217;explica en aquest altre <a hreflang="en" href="http://www.quirksmode.org/css/overflow.html">article</a>.</p>
<h3>Conclusions</h3>
<p>A data d&#8217;avui, i a no ser que sigui algun motiu de rendiment o d&#8217;integració, l&#8217;ús de marcs no està justificat en un inici, ja que provoca més desavantatges que no pas avantatges. Sovint la necessitat d&#8217;aquest element recau més per un tema gràfic que no pas per un tema funcional, cosa que com ja hem vist, es pot resoldre amb l&#8217;ús de fulls d&#8217;estils.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.facilitant.net/2009/03/31/arguments-a-favor-i-en-contra-de-lus-diframes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estils que depenen de javascript</title>
		<link>http://blog.facilitant.net/2008/12/09/estils-que-dependenen-de-javascript/</link>
		<comments>http://blog.facilitant.net/2008/12/09/estils-que-dependenen-de-javascript/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 16:50:38 +0000</pubDate>
		<dc:creator>Ramon Vilar Gavaldà</dc:creator>
				<category><![CDATA[Desenvolupament]]></category>
		<category><![CDATA[accessibilitat]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.facilitant.net/?p=31</guid>
		<description><![CDATA[Hi ha moments a la vida d&#8217;un programador d&#8217;interfícies web (mal anomenats sovint com a maquetadors) que vol crear un component que tingui una certa aparença segons si el navegador amb que es visualitza té el javascript habilitat o inhabilitat. Posem un exemple. Imaginem-nos que estem creant un botó d&#8217;imprimir &#8220;especial&#8221;. El que volem aconseguir [...]]]></description>
			<content:encoded><![CDATA[<p>Hi ha moments a la vida d&#8217;un programador d&#8217;interfícies web (mal anomenats sovint com a maquetadors) que vol crear un component que tingui una certa aparença segons si el navegador amb que es visualitza té el javascript habilitat o inhabilitat.</p>
<p>Posem un exemple. Imaginem-nos que estem creant un botó d&#8217;imprimir &#8220;especial&#8221;. El que volem aconseguir és que al fer clic a la icona d&#8217;exportació de la nostra pàgina, es desplegui un menú d&#8217;opcions on ens permeti obtenir la vista actual en <acronym title="Portable Document Format" xml:lang="en">PDF</acronym>, en <acronym title="eXtensible Markup Language" xml:lang="en">XML</acronym> o en <acronym title="Hypertext Markup Language" xml:lang="en">HTML</acronym> sense estils (per posar un exemple). Com som bona gent i ens preocupa de debò l&#8217;accessibilitat, volem que, en cas de tenir el javascript inhabilitat o no disposar de suport per aquest, el que es visualitzi sigui el literal &#8220;Exportar a &#8220;, i la llista d&#8217;opcions que he explicat abans, una darrera l&#8217;altra. Total, que el nostre component ha de tenir dues representacions diferents, és a dir, dos conjunts d&#8217;estils ben diferents.</p>
<p>I com fer que un component tingui dues representacions? Doncs bé, jo explicaré aquí la tècnica que jo uso al meu dia a dia.</p>
<p>El que farem serà marcar el document amb una classe en cas que tinguem javascript habilitat, i així, des del nostre full d&#8217;estils, podrem diferenciar entre una representació i l&#8217;altra de la següent forma:</p>
<pre><code class="css">.element-que-interessa {
    /* Aquí van els estils per l'element en cas de no disposar de suport javascript */
    ...
}

.marca-document .element-que-interessa {
    /* Aquí van els estils per l'element en cas de disposar de javascript */
    ...
}</code></pre>
<p>Una vegada explicada la idea, anem a l&#8217;acció. Personalment, el que jo faig és marcar l&#8217;etiqueta <code>/html</code> amb la classe <code>js</code> al principi del fitxer javascript:</p>
<pre><code class="javascript">document.documentElement.className = "js";</code></pre>
<p>I llavors, al full d&#8217;estil, usar aquesta classe per a diferenciar-ho. Aplicat al nostre exemple:</p>
<pre><code class="css">.menu-exportacio {
    /* estils de la representació quan no hi ha javascript */
}

.js .menu-exportacio {
    /* estils per a la representació amb javascript */
}
</code></pre>
<p>Cal tenir present que aquesta tècnica pot ser útil quan, per exemple, volem amagar alguna porció del nostre document en cas de disposar de javascript (per exemple les àncores al contingut, barra lateral i demés) o fins i tot, per a diferenciar els estils que s&#8217;aplicaran a elements introduïts al document de forma dinàmica mitjançant javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.facilitant.net/2008/12/09/estils-que-dependenen-de-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

