PROJET AUTOBLOG


Sam et Max

source: Sam et Max

⇐ retour index

Évolution de la courbe d’apprentissage d’un dev front end

lundi 7 janvier 2013 à 17:42

Le merdier du “stacking context” en CSS (aka “pourquoi mon z-index marche pas bordel de merde” ?)

lundi 7 janvier 2013 à 04:17

C’est une règle en CSS que beaucoup de designers connaissent, mais la première fois qu’on s’y frotte on se sent très con: on ne peut pas appliquer z-index à un élément dont le parent possède déjà un “stacking context”.

Ce n’est pas un bug, c’est comme ça que c’est supposé fonctionner.

Qu’est-ce qu’un “stacking context” ?

On appelle “stacking context” l’état d’un élément que le navigateur garde en mémoire pour effectuer le rendu de cet élément dans la page. Le “stacking context” dit si l’élément doit être devant ou derrière chaque autre élément se superposant à l’écran avec lui.

Chaque fois que vous utilisez une propriété comme z-index, opacity ou transform sur un élément dans un fichier CSS, le navigateur recalcule le “stacking context” pour savoir si il met maintenant cet élément devant ou derrière les autres à la même position que lui.

Et du coup, j’ai pas compris le début, c’est quoi déjà le problème ?

Si vous faites un truc qui change le “stacking context” d’un élément, vous ne pouvez appliquer z-index sur aucun de ses enfants.

Ainsi si vous avez un HTML comme ça:

<p class="parent">
    <span class="child">Truc</span>
</p>

Et que vous faites ça dans votre CSS:

.parent {
    z-index: 1;
    opacity: 0.5;
    transform: rotate(5deg);
}
 
.child {
    z-index: -1;
}

La dernière règle n’aura aucun effet.

Donc si vous vous acharnez sur F5 parce qu’un z-index semble ne pas marcher quelque part, vous savez maintenant qu’il faut juste remonter la chaîne de tous les parents de cet élément pour voir si vous avez pas à un moment changé le “stacking context” de l’un d’entre eux.

Bonne année 2013 avec GoGole !

samedi 5 janvier 2013 à 17:21

Ce matin en cherchant un numéro de téléphone sur Google je tombe sur leur fameuse suggestion à droite, le joli encoart proposant une photo de l’adresse + un bout de Google Map. Comme d’habitude je clique dessus pour avoir un peu plus de renseignements.

Et là ho surprise étant loggué avec un compte spécial “pseudo batard parceque je veux pas que mon nom traine partout” je me fait tirer les oreilles par Google car en cliquant sur plus d’infos je suis arrivé sur la page Google+.

Votre profil est suspendu le temps de l’examen

Nous examinons actuellement votre profil pour déterminer s’il respecte le Règlement relatif aux noms et les Règlements relatifs au contenu et au comportement de l’utilisateur de Google+. En règle générale, cette procédure ne prend que quelques jours.

Pendant ce temps, vous ne pourrez pas utiliser certains services Google qui nécessitent un profil actif, notamment Google+, Reader et Picasa. Vous pourrez en revanche continuer d’utiliser les autres produits Google, par exemple Gmail.

Si votre profil est accepté, il sera accessible dans les conditions normales. S’il ne l’est pas, vous serez informé par e-mail de notre refus et la suspension de votre profil sera maintenue. Dans ce cas, vous aurez la possibilité de modifier de nouveau le profil ou le nom avant de demander un nouvel examen.

Nous vous prions de nous excuser des désagréments occasionnés.

Ca m’a fait penser à ce pays en Asie qui veut mettre un nom sur chaque pseudo…Vous savez la Corée , je n’ai plus la news, si quelqu’un la retrouve…

Je sais que depuis quelques temps Google+ essayait de faire utiliser son vrai nom mais de là à désactiver même partiellement un compte…

Bref comme pas mal de personnes je vais commencer doucement à aller voir ce qui se passe ailleurs pour le reste de leurs services.

Et Je vais surement suivre les conseils d’oncle Sam :)

Bon sur ce je vous souhaite à tous une bonne année 2013, gardez vous du malin.

Firefox n’affiche plus les styles CSS ni les images

vendredi 4 janvier 2013 à 13:15

Après avoir vidé le cache, il peut arriver que notre panda roux n’affiche plus les styles CSS ou les images: il n’y a plus aucune mise en page, juste du texte noir sur une page blanche. Damned !

La solution est de forcer le refresh de la page et du cache avec Ctrl + Shift + R.

Include / require / import en javascript

jeudi 3 janvier 2013 à 16:04

On ne peut pas inclure un script dans un script en JS dans un navigateur Web. Il n’y a pas de mot clé import, include ou require.

On peut néanmoins trouver un moyen d’inclure du code en le téléchargeant et en l’incluant dans la page.

Solution 1, la bourrine

On peut faire une requête GET et un eval sur. C’est dangereux. C’est bancal. Ca marche que pour le domaine en cours. C’est pas une bonne idée. Je ne vous le montre donc pas.

Solution 2, la maline

On va créer une balise <script></script> et la faire pointer sur le fichier à télécharger. Ainsi on utilise le mécanisme naturel pour le navigateur d’include du code.

var include = function(url, callback){
 
    /* on crée une balise<script type="text/javascript"></script> */
    var script = document.createElement('script');
    script.type = 'text/javascript';
 
    /* On fait pointer la balise sur le script qu'on veut charger
       avec en prime un timestamp pour éviter les problèmes de cache
    */
 
    script.src = url + '?' + (new Date().getTime());
 
    /* On dit d'exécuter cette fonction une fois que le script est chargé */
    if (callback) {
        script.onreadystatechange = callback;
        script.onload = script.onreadystatechange;
    }
 
    /* On rajoute la balise script dans le head, ce qui démarre le téléchargement */
    document.getElementsByTagName('head')[0].appendChild(script);
}

Ca s’utilise comme ça:

include('http://adressedemonscript.com/fichier.js', function() {
    code à exécuter une fois que le script est chargé
})

La partie callback est très importante. En effet, si vous essayez d’exécuter du code après include() qui dépend du code chargé par include(), ça va foirer : le code n’est pas encore téléchargé. En effet, les navigateurs téléchargent les balises scripts en arrière plan et en parallèle :

include('http://adressedemonscript.com/fichier.js');
code à exécyter une fois que le script est chargé

Il faut donc mettre ce code dans un callback, pour garantir qu’il soit lancé quand le script a terminé de chargé.

Solution 3, la coquine

jQuery, encore et toujours, possède un raccourcis pour faire tout ça pour vous:

$('http://adressedemonscript.com/fichier.js', function() {
    code à exécuter une fois que le script est chargé
})