Bonjour à tous,

Je suis débutant en css et je suis en train de créer un planning mais j'ai des problèmes d'affichage :
Les bordures de mon tableau s'affiche ou ne s'affiche plus selon "son humeur !!!". En fait en rafrechissant ma page, des fois ça s'affiche et de fois non.

Et ce problème n'est pas sur Internet explorer, peut-être trop gentil avec les debutants comme moi !!!! Smiley biggol

J'ai fait quelque test, et il s'avererait que c'est mes rowspan qui pose problème (ligne 177, 178 et 183), mais es vraiment ça le problème? si oui pourquoi et comment résoudre le problème?

Merci par avance.


<html>
    <head>
        <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
        <STYLE type="text/css">
            .table
            {
                font-family: Arial, Times, serif;
                font-size: 11px;
                border-collapse:collapse;
                border: 2px solid #99A9B6;
            }
            .td
            {
                border-right: 2px solid  #99A9B6;
                border-left: 2px solid  #99A9B6;
                border-collapse:collapse;
            }
            .td_entier 
            {
                border-top: 2px solid #99A9B6;
                border-right: 2px solid  #99A9B6;
                border-left: 2px solid  #99A9B6;
                border-collapse:collapse;
             }
             .td_moitie 
            {
                border-top: 1px dashed #99A9B6;
                border-right: 2px solid  #99A9B6;
                border-left: 2px solid  #99A9B6;
                border-collapse:collapse;
             }
             .titre
            {
                border: 2px solid #99A9B6;
                padding: 2px;
                font-size: 13px;
                background-color: #EEEEEE; 
            }
             .heure_entier
            {
                border-top: 2px solid #99A9B6;
                border-right: 2px solid  #99A9B6;
                border-left: 2px solid  #99A9B6;
                padding: 2px;
                font-size: 11px;
                background-color: #EEEEEE; 
                height: auto;
            }
             .heure_moitie
            {
                border-top: 1px dashed #99A9B6;
                border-right: 2px solid  #99A9B6;
                border-left: 2px solid  #99A9B6;
                padding: 2px;
                font-size: 11px;
                background-color: #EEEEEE;
            }
        </STYLE>
    </head>
<body>

<?php

include("fonction.php");

$date_filtre="2006-07-14";

####################################################### fonctions et variables #############################################################

$creneau_horaire="7-20";
$tabo=explode("-",$creneau_horaire);

$premiere_heure="$tabo[0]";
if($premiere_heure<10) $premiere_heure="0$premiere_heure";
$premiere_heure="$premiere_heure:00";

$nb_heur_range=$tabo[1]-$tabo[0];
if($nb_heur_range<10) $nb_heur_range="0$nb_heur_range";
$nb_heur_range="$nb_heur_range:00";
$nb_5min_jour=nb_5min($nb_heur_range);

$nb_jour="15";
if($nb_jour>365) $nb_jour=365;

$nb_semaine=ceil($nb_jour/7);

$nom_jour[1]="Lun";
$nom_jour[2]="Mar";
$nom_jour[3]="Mer"; 
$nom_jour[4]="Jeu";
$nom_jour[5]="Ven";
$nom_jour[6]="Sam";
$nom_jour[7]="Dim";

$tab=explode("-",$creneau_horaire);
$date_affich_deb=$tab[0];
$date_affich_fin=$tab[1];
$nb_case=($date_affich_fin-$date_affich_deb)*12;

$j = substr($date_filtre,0 , 2);
$m = substr($date_filtre,2 , 2);
$a = substr($date_filtre,4 , 4);

$date_filtre = "$a-$m-$j";
$unix_time = strtotime($date_filtre);
$num_jour=strftime("%w",mktime(0,0,0,$m,$j,$a));

if ($num_jour > "1")
{
    $num_premier_jour_semaine = $num_jour - 1;
    $date_range_deb = date("Y-m-d", strtotime("-$num_premier_jour_semaine day",  $unix_time));
    $jour_range_deb = date("d", strtotime("-$num_premier_jour_semaine day",  $unix_time));
    $mois_range_deb = date("m", strtotime("-$num_premier_jour_semaine day",  $unix_time));
}
elseif ($num_jour == "1")
{
    $date_range_deb="$a-$m-$j";
    $jour_range_deb=$j;
    $mois_range_deb=$m;
}
elseif ($num_jour == "0")
{
    $date_range_deb = date("Y-m-d", strtotime("-6 day",  $unix_time));
    $jour_range_deb = date("d", strtotime("-6 day",  $unix_time));
    $mois_range_deb = date("m", strtotime("-6 day",  $unix_time));
}

$unix_time_date_deb = strtotime($date_range_deb);

for($i=0;$i<=$nb_jour;$i++)
{
    if($i==0) $jour_num[0]=$jour_range_deb;
    else
    {
        $jour_add=$i-1;
        $jour_num[$i]= date("d", strtotime("+$jour_add day", $unix_time_date_deb));
        $nom_jour_num[$i]= date("N", strtotime("+$jour_add day", $unix_time_date_deb));
        $mois_num[$i]= date("m", strtotime("+$jour_add day", $unix_time_date_deb));
        $date_num[$i] = date("Y-m-d", strtotime("+$jour_add day", $unix_time_date_deb));
    }
}

$date_range_fin=date("Y-m-d", strtotime("+$nb_jour day", $unix_time_date_deb));

############################################################ Planning #############################################################

echo "<div align=center>";
echo "<table class=table>";
    
for($heu=-1;$heu<=$nb_case-1;$heu++) // Lignes
{
    echo "<tr>";
    
    for($jou=0;$jou<=$nb_jour;$jou++) // Colonnes
    {
        $rowspan="";
        $class="";
	##############      entete heures     ###############
        if($heu==-1)
        {
            if($jou==0)echo "<td></td>";
            else
            {
                $nj=$nom_jour_num[$jou];
                echo "<td class=titre align=center>$nom_jour[$nj] $jour_num[$jou]/$mois_num[$jou]</td>";
            }
        }
	##############       données       #############
        else
        {
            if($jou==0)
            {
                if($heu%12 == 0)
                {
                    $min="00";
                    $num_heure=$date_affich_deb+($heu/12);
                    if($num_heure<10) echo "<td align=center class=heure_entier valign=top rowspan=6>0$num_heure:00</td>";
                    else echo "<td align=center class=heure_entier valign=top rowspan=6>$num_heure:00</td>";
                }
                elseif($heu%6 == 0)
                { 
                    $min="30";
                    echo "<td class=heure_moitie rowspan=6>&nbsp;</td>";
                }
                else
                {
                    $min=$min+5;
                    //~ echo "<td align=center class=td valign=top>&nbsp;</td>";
                }
            }
            else
            {
                if($heu%12 == 0)
                {
                    $min="00";
                    
                    if($num_heure<10)$num_heure_sql="0$num_heure:$min";
                    else$num_heure_sql="$num_heure:$min";
                }
                elseif($heu%6 == 0)
                {
                    $min="30";
                    
                    if($num_heure<10)$num_heure_sql="0$num_heure:$min";
                    else$num_heure_sql="$num_heure:$min";
                }
                else
                {
                    if($min==5) $min="05";
                    
                    if($num_heure<10)$num_heure_sql="0$num_heure:$min";
                    else$num_heure_sql="$num_heure:$min";
                }
                
                if($min=="00") $class="class=td_entier";
                elseif($min=="30") $class="class=td_moitie";
                else $class="class=td";
                
                echo "<td $class></td>";
            }
        }
    }
    echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Administrateur
Bonjour et bienvenue mouatte,

est-ce que tu pourrais plutôt nous montrer le résultat (code HTML) idéalement en ligne sur un serveur que le code PHP qu'il est nettement plus long de décrypter ou de faire tourner?
Je note toutefois qu'il n'y a pas de Doctype (pas le lien le plus simple mais plein de serveurs répondent pas ce soi Smiley ohwell ) avant la balise <html> indiquant au navigateur ce qu'il est censé afficher.

Felipe
Modifié par Felipe (13 Jul 2006 - 22:47)
Felipe a écrit :
est-ce que tu pourrais plutôt nous montrer le résultat (code HTML) idéalement en ligne sur un serveur que le code PHP qu'il est nettement plus long de décrypter ou de faire tourner?

+1

Le PHP ne sert à rien pour régler des problèmes de rendu. Il faut se baser sur ce qui est envoyé au navigateur (HTML, CSS, si besoin javascript), pas sur le code que le serveur aura à traiter…
Pour commencer, as-tu pensé à valider ton code, pour voir ce que ça donne ? Au vu de ton code source, je pense que l'utilisation d'une syntaxe conforme ne serait pas forcément du luxe. Smiley cligne

Sinon, je confirme le phénomène dans Firefox, tandis qu'Opera ou Konqueror se débrouillent très bien. Il s'agit peut-être d'un bug de Gecko, le moteur de rendu de Firefox. Si quelqu'un en a connaissance, je veux bien une info là-dessus.
Bonjour,

Comme suggéré par Felipe et mpop (mais on va juste expliquer pourquoi) : ne pas travailler sans doctype. Les navigateurs sont alors en effet en mode de rendu propriétaire (Quirks) différent de l'un de l'un à l'autre, et sans intérêt pour le développement sauf si l'on aime perdre du temps avec des bugs de rendu de ce type.

(@mpop: je n'ai aucune idée du détail de ce bug poussiéreux, mais je n'ai aucune envie d'en avoir tant que je n'y suis pas absolument contraint par une situation de développement où le rendu quirks sera justifié. Par exemple, par l'impossibilité économique de modifier en masse des documents d'archives dénués de doctype. C'est dans ces rares cas que le doctype switching est justifié Smiley cligne )

Donc inutile d'aller plus loin avant d'avoir mis tout cela dans une page (X)HTML avec le doctype approprié.

Sinon, pourquoi ne pas alléger tout ce balisage et fair des choses accessibles, en passant ? En effet, le balisage approprié pour les en-têtes de colonnes et de lignes (vital pour l'accessibilité) facilitera la mise en place des styles (éléments <th id="..."> et <td headers="...">), et la suppression de toutes ces classes répétées :
- un simple sélecteur CSS th {...} pour les en-têtes
- un simple sélecteur td {...} pour les cellules
- une classe sur les lignes concernées <tr class="moitier"> (et pas sur les cellules) permettant d'écrire un sélecteur tr.moitier td {...} beaucoup plus économique.
Smiley cligne
Modifié par Laurent Denis (16 Jul 2006 - 07:52)
Merci de vos réponses

Oui j'ai validé le code, mais aucune erreur (malheureusement), mais mpop à quel portion pense tu quand tu dis "une syntaxe conforme ne serait pas forcément du luxe" ?

Sinon j'ai mis un doctype mais sans succès !!! mais maintenant je l'utiliserai tout le temps Smiley cligne .

Pour alléger le CSS j'y ai pensé mais cette page est incluse dans une autre où il y a déjà un tableau avec une autre trame alors c'est pour ça que j'ai fait comme ça, mais c'est surement pas la meilleur façon.

Par contre comme je vous disez au debut:
a écrit :
J'ai fait quelque test, et il s'avererait que c'est mes rowspan qui pose problème (ligne 177, 178 et 183)

j'ai chercher sur google, mais j'ai pas trouver de réponse à mon problème Smiley decu
mouatte a écrit :
Oui j'ai validé le code, mais aucune erreur (malheureusement), mais mpop à quel portion pense tu quand tu dis "une syntaxe conforme ne serait pas forcément du luxe" ?

Je pensais avant tout au fait de ne pas utiliser de Doctype (ce qui n'est pas vraiment une erreur de syntaxe, certes), et j'ai cru voir également une balise div non fermée, par exemple. Mais c'est peut-être une erreur de ma part.
Si je n'utilise pas de rowspan le fénomène ne se produit plus. Est-il possible avec du CSS de fusionner des lignes pour eviter de faire un rowspan?
mouatte a écrit :
Est-il possible avec du CSS de fusionner des lignes pour eviter de faire un rowspan?

Non. Fusionner deux cellules, c'est agir sur le contenu du document, et les CSS n'agissent que sur la mise en forme.
Pour recoller les bouts, mpop m'a sugéré :

a écrit :

À chaque fois que tu fais un echo "bla bla html";, rajoutes un \n à la fin pour générer un retour à la ligne. Ce qui te donne, par exemple :

echo "<td class=heure_moitie rowspan=6>&nbsp;</td>\n";

Tu obtiens un fichier dont le code est identé, et qui évite d'avoir une unique ligne de code de près de 50 Ko, ce que Firefox n'apprécie semble-t-il pas (et pas mal de logiciels non plus, si j'en crois mes divers éditeurs de texte qui tentaient tant bien que mal d'appliquer une coloration syntaxique, au risque de planter furieusement).

On pourrait faire des tests avec le fichier de débat, en le découpant en deux, quatre ou huit lignes, pour voir s'il existe un « seuil » à partir duquel Firefox se met à râler. Pas sûr qu'il n'y ait pas d'autres conditions qui rentrent en jeu.


Donc j'ai bien mis les \n ce qui pends peut de temps car que des boucles Smiley ravi . la visibilité du code source généré est amilioré mais c'est tout, pas de résolution de rendu!

Par contre le fait de chercher quand Firefox "décroche" et benefique car il permet de mettre en évidence que c'est bien à partir d'un certain nombre de cellules

bon : http://mouatte.free.fr/planning_good.php
Mauvais : http://mouatte.free.fr/planning_bad.php

Je previens que j'ai changer les css pour voir toutes les cellules (une toutes les 5min)
Administrateur
Bonjour,

le <!DOCTYPE etc doit précéder la balise <html> et donc aussi <head> (puisqu'il indique comment devra être rendu le <html>...</html> qui va suivre le Doctype Smiley cligne ). Dans la situation actuelle, tu n'as toujours rien avant la balise <html> donc le navigateur reste en mode Quirks Smiley ohwell
EDIT: c'est pas tellement qu'il doive être avant telle ou telle balise, c'est qu'il doit se trouver au tout début de la page Smiley confused

Tu peux regarder le code source des tutoriels par exemple.
Modifié par Felipe (05 Aug 2006 - 14:05)
Rhââ effectivement, ça ne corrige pas le problème.

J'avais deux fichiers, un planning-1.php (le tien), et un planning-2.php avec génération d'indentation. Lorsque je lançais le deuxième, j'obtenais toujours un rendu normal… je viens de re-vérifier, et en rechargeant la page plusieurs fois j'ai un rendu bugué. Donc pas d'amélioration, si ce n'est que l'on évite des plantages avec certains éditeurs de code et avec l'affichage du code dans Firefox (comme dit précédemment, la coloration syntaxique sur une très longue ligne unique de code semble être en cause).

Un doctype valide (qui n'est jamais du luxe) ne résoud pas le problème non plus.

Donc voilà, on a un code indenté, on rajoute un doctype valide. On a déjà amélioré les choses à la périphérie, mais pas résolu le cœur du problème…
Là j'avoue que je ne sais pas trop quoi faire.


Dans l'état je ne vois que deux solutions :
– soit se passer de rowspan, et se contenter de jouer sur des couleurs de fond et des bordures (ou plutôt l'absence de bordure) pour donner l'impression d'une cellule unique ;
– soit repenser ce système à six lignes par demi-heure… sans contenu il est difficile de dire exactement à quoi ça peut bien servir, et je suppose qu'il y a des raisons, mais il y a peut-être moyen de faire autrement (et moins lourd) ?
En faite j'ai laisser le "planning.php" pour ne pas casser le lien sur le forum.
Je l'ai donc copié et reduit en nombre de ligne (c'est pour ça que ton éditeurs ne plante plus, du moins je pense) pour afficher ou non le "bug" et nommé "planning_good.php" et "planning_bad.php".

Au "final" le planning doit resembler à ça (capture à partir d'IE) http://www.dominno.info/img/planning.JPG

Actuellement, je fais un tableau dont une cellule correspond à 5 minutes.
Je pense peut-être faire une seule cellule pour 30 minutes et si jamais j'ai 8h10 par exemple il faudrait que je colorie que 66% de la cellule, mais je sais plus comment faire !!! Smiley confus