Accueil | Tutoriaux | CSS | Insérer une bordure uniquement entre des éléments avec CSS

Insérer une bordure uniquement entre des éléments avec CSS

Envoyer Imprimer PDF
border_inblock

Si l'on veut créer une bordure uniquement entre les éléments d'une liste par exemple (ni avant le premier, ni après le dernier) l'utilisation du sélecteur first-child permet de le faire facilement. On définit une bordure pour les éléments de la liste et à l'aide de first-child, on supprime la bordure du premier élément. Le problème est que first-child n'est pas reconnu par tous les navigateurs, notamment Internet explorer.

Pour réaliser la même chose, on peut alors donner une classe spécifique au premier élément de la liste pour en supprimer la bordure. Cette solution n'est pas toujours utilisable, lorsque l'on travaille avec un CMS ou une équipe de développeurs par exemple et que l'on n'a pas un contrôle complet sur le code généré. Plutôt que chercher à cibler le premier élément pour en supprimer la bordure ou l'image de fond, on peut essayer de "masquer" la bordure indésirable.

La propriété clip qui permet de définir la zone d'affichage peut être une solution, mais elle nécessite l'utilisation de position absolue ce qui n'est pas toujours pratique. Une autre piste est l'utilisation des marges négatives.

Pour une liste classique, on peut facilement obtenir le résultat suivant :

 

border_inblock

 

Ici, les balises li ont un border-top ainsi qu'une marge négative haute de 1px. La première bordure est masquée sous ie car sortante du bloc conteneur, pour firefox, on ajoute une suppression de bordure avec

 

CSS :

        first-child : li {
            margin: -1px 0 0 0;
            padding:0;
            text-align: center;
            height:22px;
            line-height:20px;
            border-top: 1px #cc0066 solid;
            list-style-type: none;
        }

        li: first-child {
            border:0;
        }


Si maintenant on applique la même technique pour une liste horizontale :

 

CSS :

        li {
            margin:0 0 0 -1px;
            padding:0 10px;
            text-align: center;
            height:22px;
            line-height:20px;
            border-left: 1px #cc0066 solid;
            float:left;
            list-style-type: none;
        }
        li: first-child {
            border:0;
        }

 

Sous ie, cela ne fonctionne pas ... sauf si l'on décide de mettre la balise ul en float:left, on aura alors :

border_inblock2

Internet explorer a en effet tendance à masquer les éléments situés dans des marges négatives dans certains cas, et si il ne le fait pas, il suffit que le conteneur soit positionné en float pour que la règle devienne une généralité.

Rétrolien(0)

Adresse URI pour un rétrolien sur cet article

Commentaires (0)

Flux RSS pour les commentaires

Ecrivez un commentaire

Réduire l'éditeur | Agrandir l'éditeur

busy
Mis à jour ( Lundi, 17 Mars 2008 14:47 )  

RSS

Publicités


Espace sécurisé



Les plus lus