2 votes

problème css avec les listes non ordonnées (comme d'habitude avec IE)

J'utilise des listes non ordonnées qui imbriquent des divs pour afficher le résultat souhaité à l'écran. J'utilise du css pour les styliser et elles semblent parfaites sur chrome et firefox. Mais dans IE(8), il semble y avoir un problème que je n'ai pas réussi à localiser.

J'utilise le CSS suivant

    <style type="text/css">
        .ur_container {width:980px; padding: 0; margin: 0;}
        .ur_container ul.bx_grp {list-style-type: none; padding: 0px; margin: 0px; }
        .ur_container ul.bx_lnx {list-style-type: none; padding: 5px; margin: 0px; }

        .bx_grp {border:1px solid #c5c5c5; background-color: yellow; margin:0; padding:0;}
        .bx_grp_header {background-color: #d6d6d6; border-bottom:1px solid #acacac;}
        .bx_grp_title {float: left; font: bold 11px Arial; padding:5px;}
        .bx_grp_options {float: right; font: 10px Arial; padding: 5px;}
        .bx_grp_options a{color: #125B93; text-decoration: none; }          

        .bx_lnx {padding:0px; background-color: red;}
        .bx_lnx_header {font:11px Arial; color:#333;}
        .bx_lnx_title {float: left;}
        .bx_lnx_refno {background-color:#333; color: fff; padding: 1px; margin-right: 5px; }
        .bx_lnx_options {float: right;}
        .bx_lnx_options a {color: #258CF4; text-decoration: none;}
        .bx_lnx_url {font: 9px Arial; color: #999; margin-top: 4px; }
        .bx_lnx_notes {}
        .bx_lnx_notes span {background-color: #FDFFCC; color: #666; font: 9px Arial; padding:2px;}
        .bx_lnx_tags {}
        .bx_lnx_tags span {background-color: #efefef; border-bottom: 1px solid #ccc; color: #666; font: 9px Arial; padding: 1px 2px 1px 2px; margin-right: 5px;}
    </style>

Contre le HTML suivant

<div class="ur_container">
    <ul class="bx_grp" id="grp_1">
        <li>
            <div class="bx_grp_header">
                <span class="bx_grp_title">Personal File</span>
                <span class="bx_grp_options"><a href="#">rename</a> &bull; <a href="#">make private</a> &bull; <a href="#">hide</a href="#"> &bull; <a href="#">delete</a></span>   
                <div style="clear: both;"></div>
            </div>      
        </li>
        <li>
            <ul class="bx_lnx" id="lnx_1">
                <li>
                    <div class="bx_lnx_header">
                        <span class="bx_linx_title"><span class="bx_lnx_refno">#3103</span>How to file personal files</span>
                        <span class="bx_lnx_options"><a href="#">edit</a> &bull; <a href="#">move</a> &bull; <a href="#">delete</a></span>
                    </div>
                </li>
                <li class="bx_lnx_url">http://www.google.com</li>
                <li class="bx_lnx_notes"><span>search google for this</span></li>
                <li class="bx_lnx_tags"><span>personal</span><span>file</span><span>google</span></li>
            </ul>       
        </li>
    </ul>
</div>

Ce qui donne ce résultat dans Chrome et Fireworks texte alternatif http://haberhavadis.com/chff.jpg

et ce qui suit dans IE texte alternatif http://haberhavadis.com/IE.jpg

Les couleurs jaune et rouge ont été utilisées afin de montrer que tout va mal. La partie jaune est la partie non désirée.

Quelqu'un peut-il m'indiquer la bonne direction à suivre ?

Salutations

3voto

David Kolar Points 2727

Cela ressemble à un rendu d'IE8 en mode document d'IE7, qui peut être déclenché de plusieurs façons.

(Mis à jour après que le PO a fait remarquer qu'aucun DOCTYPE n'est utilisé).

L'omission d'un DOCTYPE entraînera le rendu de votre page en format Bizarreries mode. Voir Que se passe-t-il en mode Quirks ? Vous êtes certainement libre de le faire, mais cette réponse se basera sur l'ajout d'un DOCTYPE pour que la page soit rendue en format Normes mode. C'est à vous de décider si vous souhaitez procéder de cette manière (cf. Choisir le bon doctype pour vos documents HTML .)

Je suggérerais soit HTML 4.01 Strict...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

...ou même HTML 5...

<!DOCTYPE html>

...et l'utilisation d'un validateur pour attraper toute erreur de balisage.

Maintenant que nous effectuons le rendu en mode standard, nous pouvons utiliser la commande Modèle de boîte W3C dans laquelle le width d'un élément est inclusif de la border y padding mais pas le margin .

Le passage en mode standard suffit à supprimer l'écart que vous constatez dans IE8, mais vous le verrez toujours dans IE7 (même en mode standard - c'est un bug du navigateur). Puisque vous utilisez une largeur fixe (et en supposant que vous effectuez le rendu en mode standard si vous optez pour le mode standard), une solution facile est...

#lnx_1 {width: 968px;}

La largeur de 968px vient de 980px (largeur de .ur_container ) - 2px (1px de bordure de chaque côté de .bx_grp ) - 10px (5px de rembourrage de chaque côté de .ur_container ul.bx_lnx ) = 968px .

Ver cette page pour plus d'informations sur la correction de ce bogue particulier concernant les éléments de la liste IE.

Un autre changement est nécessaire pour passer en mode Standards :

.bx_lnx_refno {background-color:#333; color: fff; padding: 1px; margin-right: 5px; }

Le site color: fff est invalide sans le signe dièse ; changez-le en color: #fff

Quant à <span class="bx_lnx_options"> étant une ligne plus bas que ce que vous souhaitez, le fait de passer en mode Standards le maintiendra sur la première ligne dans IE8, mais pas dans IE7. Changer l'ordre des sources permettrait de résoudre ce problème...

<span class="bx_lnx_options"><a href="#">edit</a> &bull; <a href="#">move</a> &bull; <a href="#">delete</a></span>
<span class="bx_linx_title"><span class="bx_lnx_refno">#3103</span>How to file personal files</span>

Ver cette réponse pour comprendre pourquoi cela se produit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X