NB 141221 : utile avec la manipulation et conversion des types JavaScript
cf. mémo opérateurs JavaScript.
Pour l'efficacité du code, l'on peut vouloir éviter une condition par le recours à une clé ou un index appelant telle fonction :
Gaëtan L. : notes souvent techniques, en front-end principalement — et dataviz, web3, Photoshop…
<https://langhade.net/gaetan>
NB 141221 : utile avec la manipulation et conversion des types JavaScript
cf. mémo opérateurs JavaScript.
Pour l'efficacité du code, l'on peut vouloir éviter une condition par le recours à une clé ou un index appelant telle fonction :
L'ajax récursif, utile pour accéder au code source d'une page, à ses données HTTP etc. doit tenir compte de la dernière version de la page sans s'en tenir au cache du navigateur. L'on pourrait lancer une requête avec la méthode classique pour forcer le rafraîchissement : le passage de query string. Le problème sur un CMS tel que Drupal, est le ralentissement considérable causé par ces paramètres supplémentaires d'url.
Une solution réside dans l'insertion d'un identifiant. Liant authentification, droits d'utilisateur et accès au contenu, la variation de cet identifiant devrait théoriquement, et je l'ai en pratique constaté, lancer la requête sans être arrêté par le cache.
Sur Internet Explorer cependant, et sans trop de surprise, il faut s'en tenir aux paramètres traditionnels.
var url = document.location.href;
ajax.open("GET",msie > 0 ?
url + ((/\?/).test(url) ? "&" : "?" ) + new Date().getTime() :
url.replace(/\/{2}/,"//" + new Date().getTime() + "@"),
true);
La balise '<meta' ou à défaut, la propriété 'document.characterSet', permettent d'accéder à l'encodage d'une page web. Cependant, l'encodage réel du fichier source peut s'avèrer différent - d'où de possibles problèmes d'affichage - ou des soucis en cas d'Ajax "récursif".
Dans le cadre de mon activité d'intégrateur HTML, j'ai eu à concevoir une réponse à cette question : comment accéder en JavaScript au code source d'origine d'une page web, avant son analyse par l'agent utilisateur ?
.ec:before {
content: "\8";
display: block;
height: 0;
text-indent: -4444px;
}
.ec:after {
clear: both;
content: " ";
display: block;
}
Objectifs :
…
var detectionCSS = false;
function detecterCSS(){
var b = document.getElementsByTagName("body")[0];
var x1 = b.offsetWidth;
b.style.width = x1 - 1 + "px";
var x2 = b.offsetWidth;
b.style.width = "";
detectionCSS = x1 == x2 ? false : true;
}
</script>
</head>
<body>
<script>
detecterCSS();
</script>
Récemment écrit pour un site de Sanofi - mais en XHTML 1 :
=> présent dans l'en-tête via l'appel d'un fichier 'techno-abilities.js', qui contient aussi Modernizr et l'ajout d'une classe 'js' - afin, réciproquement, de détecter l'activation du JavaScript pour les CSS.
La variable 'detectionCSS' est ensuite sollicitée dans les scripts qui sont appelés à la fin de 'body'.
Exemple : définir une fonction vide pour un carousel avec styles désactivés.
Cf. article de Matthieu Bué : Font-size, Responsive et Accessibilité : le Bon, la Brute et le Truand » Webdesign Friday (#wdfr)
Elément body réglé à cinq huitièmes (62,5%) de 16px (réglage agent par défaut) càd élément body réglé à 10px obtenu au 'reset' par :
body {font-size: 62.5%}
L'unité 'em' est préférable à l'unité 'px' quand on tient compte d'utilisateurs accoutumés au maniement de vieux IE ;
et formellement aussi, de référentiels d'accessibilité
(et du gadget A+)
avec l'inconvénient de calculs pour compenser les héritages.
CSS3 résout la question de l'emboîtement avec l'unité 'rem' ('r' pour "root")
NB : non encore personnellement testé
En tentant a priori 'rem' CSS3 avec compatibilité IE7-8 :
h2{font-size: 2.2em; font-size: 2.2rem;}
comment traiter théoriquement les niveaux intermédiaires ?
- si l'on y évite 'font-size', quelle utilité alors pour 'rem' ?
- sinon multiplication des calculs :
.divpourh2 {font-size: 1.1em;}
h2 {font-size: 2em; font-size: 2.2rem;}
rendant de nouveau 'rem' superflu.
"Commentaires" le 4 mars 2014
1) Ce n'est pas une bonne idée de régler une font-size de base.
Eviter 62.5% car on ne sait pas de quoi in fine,
certains rares navigateurs n'adoptant pas 16 px par défaut
- le 13 juin 2014 : la détection de '.css("font-size")'
par jQuery renvoie une valeur en pixels,
qui est celle de ce réglage si l'élément s'affiche en '1em'.
Et surtout liberté de l'utilisateur d'adapter
ses possibilités de lecture via le paramétrage du navigateur.
2) Pour savoir de quoi sont 62,5%, il faudrait contrarier
d'éventuelles préférences utilisateur, avec
html {
font-size: 16px;
}
NB : mais en ce cas autant imposer directement
html {
font-size: 10px;
}
sans prendre la peine du 62.5
Faut-il contrôler le rendu à ce point ?
Sans doute vaut-il mieux :
- s'abstenir de définir 'font-size' pour html et pour body,
et prendre la peine de calculer en em en prenant
comme base probable 16px - avec, dans certaines zones au pixel près
(mentions légales ?), une zone intermédiaire à 10px,
pour avoir en-dessous de l'em décimalement précis
- dans des projets à trop forte contrainte graphique :
html {
font-size: 10px;
}
"et basta"