Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
Par Laurent Denis, le 28 février 2005.
Opera 8.0 bêta 2 permet de différencier les styles visuels (screen par exemple) et auditifs (speech). Cette implémentation des descripteurs de media semble cependant comporter un bug lorsqu'on applique cette distinction au contenu textuel généré CSS.
En effet, imaginons le scénario suivant : nous souhaitons insérer via CSS un contenu textuel donné à la suite d'un élément, donc par le biais du pseudo-élément :after. Il pourrait s'agir par exemple de la mention end of citation
à la fin d'une citation. Nous écrirons donc :
<blockquote>
<p>This is a citation.</p>
</blockquote>
@media speech {
blockquote:after {
content: " end of citation";
}
}
Nous obtenons (tester dans Opera 8.0 bêta 2) :
Test 1
This is a citation.
End of test 1
Comme prévu, Opera n'affiche pas le contenu généré, puisque celui-ci est défini dans une règle @media speech. Jusque-là, donc, tout va bien. Mais lorsque nous passons à la lecture, nous obtenons seulement This is a citation
, et non This is a citation. End of citation
.
Que se passe-t-il ? Il semble qu'Opera ne puisse pas générer de contenu textuel dans le media speech. Celui-ci doit être généré au préalable dans le media screen.
Pour nous en assurer, modifions notre code CSS en ce sens :
<blockquote>
<p>This is a citation.</p>
</blockquote>
@media screen {
blockquote:after {
content: " end of citation";
display: none;
}
}
@media speech {
blockquote:after {
display: block;
}
}
Le résultat est cette fois (tester dans Opera 8.0 bêta 2) :
Test 2
This is a citation.
End of test 2
Nous obtenons exactement le même affichage, la règle display: none; empêchant le contenu généré d'apparaître. Comme la règle display: block rétablit ce contenu généré uniquement dans le media speech, nous entendons bien cette fois, comme prévu This is a citation. End of citation
.
Autrement dit, un contenu généré CSS est accessible au media speech uniquement s'il a été déclaré en dehors de celui-ci dans le media screen (ou aussi bien selon les cas handheld, projection ou tv, voire all). En revanche, ce bug n'affecte pas les contenus générés propres au media speech tels que les signaux sonores créés avec cue-before et cue-after.
(Note 1 : les exemples présents dans cette page sont inopérants dans Internet Explorer, Mozilla, FireFox, Safari, et les versions d'Opera antérieures à la version 8.0 bêta 2.)
(Note 2 : le bug d'Opera 7+ sur le sélecteur d'attribut |= utilisé pour générer un contenu après un élément n'a toujours pas été corrigé dans Opera 8.0 bêta 2, et notre petit patch à base de content: normal !important; est donc toujours nécessaire.
Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.
Commentaires
Philippe Worontzoff, le 28 février 2005
Qu'en est-il de :
blockquote:after {
content: " end of citation";
}
@media screen {
blockquote:after {
display: none;
}
Est-ce que l'on entend " end of citation" ?
Laurent Denis, le 28 février 2005
le comportement est normal : le contenu n'est pas affiché, mais il est lu.
Krakos, le 04 mars 2005
Je viens de saisir le même code (bête copier / coller) et Opera me dit qu'il ne comprend pas.
Moi non plus d'ailleurs !
D'où pourrait venir le problème ?
J'ai bien la dernière version d'Opera
Dans la déclaration de <style>, quels doivent être les attributs media et style ?
Philippe Worontzoff, le 04 mars 2005
Peut-être du fait que tu as la dernière version d'Opera (7.54 si je me souviens bien) et non la beta de la 8.0.
Krakos, le 07 mars 2005
Non, non j'ai bien la v 8.0 build 7483 avec le voice plug-in 4.1.3
Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.