Partage
  • Partager sur Facebook
  • Partager sur Twitter

Balise <pre>

specifier largeur, hack css

Sujet résolu
    11 avril 2006 à 13:11:12

    Bonjour à tous,

    Voilà mon problème:
    je récupère d'une de mes table de ma base mysql le contenu d'un champ texte préformaté.
    je stock ma requete sql dans une variable:
    $var = $requete['champ']

    je veux afficher sur ma page le contenu de $var:

    ...
    <pre class="classe">
    <?echo $var;?>
    </pre>
    ...

    Dans ma feuille de style machin.css je veux spécifier la largeur de la "boite" <pre></pre>:

    .classe{
      width: 80;
    }

    Cependant celà ne change strictement rien et certaines phrases contenues dans cette variable s'étalent, une barre de défilement horizontale apparait.

    Le navigateur du client est Internet Explorer 6

    Existe il un contournement/hack css qui permet de fixer la largeur de la balise <pre> sous IE 6?

    J'ai essayé "de loin" certains truc du style:


    .classe{
      margin : 0 auto;
      margin-bottom : 1em;
      padding : 0.5em;
      text-align:left;
      white-space:normal;
    }

    Cela masque la partie des phrases trop longue ainsi que la barre de défilement mais ne résoud en rien le problème.


    Merci,
    6echo
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2006 à 13:22:10

      Salut,

      Citation : 6echo

      Dans ma feuille de style machin.css je veux spécifier la largeur de la "boite" <pre></pre>:


      .classe{
        width: 80;
      }


      Manquerait pas les unités par hasard ?
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2006 à 13:25:34

        Non il ne manque pas les unités car d'après ce que j'ai lu, c'est le nombre de caractères par ligne qu'il faut indiquer: ici 80 (par défault).
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 13:39:03

          Oui :)

          Et t'as lu ça où ?

          Je suis curieux de voir cette source :o
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2006 à 13:46:26

            je n'ai pas de solution, mais je peux te conseiller de mettre une barre de défilemment :

            overflow: auto;
            overflow-y: hidden; /* Seulement un barre sur l'axe Y pour IE */
            • Partager sur Facebook
            • Partager sur Twitter

            Ma vraie biographie - Ex-Manager de la Validation sur le Site du Zéro - sdlm.be - Horus.aero

              11 avril 2006 à 14:11:18

              attribut non reconnu par les navigateurs .
              Fixe une largeur avec des unités parceque la ca marche pas
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 14:31:13

                Avec des unités genre:

                .classe{
                  width:800px;
                }

                Cela ne change rien sous IE6.

                Je fais remarquer que le code suivant fonctionne sous firefox:


                ...
                <pre width=80>
                ...
                </pre>
                ...

                par contre celà ne marche pas sous Firefox:


                ...
                <pre class="classe">
                ...
                </pre>
                ...


                .classe{
                  width:80;
                }
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2006 à 14:58:18

                  Non cela ne change rien pour IE6.
                  Le navigateur client ne peut etre changer (politique de l'entreprise...bla bla bla).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2006 à 14:58:26

                    tu mets le width dans ta class et a la limite pas besoin de class la balise se suffit a elle meme avec css
                    pre {width: 800px; }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2006 à 15:12:48

                      IE n'est pas capable de faire ceci:

                      <pre width="800px">
                      ...
                      </pre>

                      ni ceci:

                      <pre width=80>
                      ...
                      </pre>

                      etc...
                      Il semblerait que l'on soit obligé d'avoir des barres de defilement sous IE6.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 avril 2006 à 15:19:16

                        Citation : 6echo

                        IE n'est pas capable de faire ceci:


                        <pre width="800px">
                        ...
                        </pre>




                        Si, il saut le faire. mais le fait de mettre du code qui "dépasse en largeur" fait que l propriété est annulé. il n'y a pas de solution. Saut de virer la balise PRE, d'en faire un div, et des régler le formatage du code avec des &nbsp;, comme sur le SDZ.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Ma vraie biographie - Ex-Manager de la Validation sur le Site du Zéro - sdlm.be - Horus.aero

                          11 avril 2006 à 15:29:22

                          Bon merci pour vos réponses et tout. Je crois que je vais me pondre une fonction en php qui insere des retours chariot tout les n caracteres sur chaque ligne contenu dans ma variable.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2006 à 16:30:27

                            Citation : 6echo

                            Bon merci pour vos réponses et tout. Je crois que je vais me pondre une fonction en php qui insere des retours chariot tout les n caracteres sur chaque ligne contenu dans ma variable.



                            Oula, très fous ? c'est si important que ca o_O
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Ma vraie biographie - Ex-Manager de la Validation sur le Site du Zéro - sdlm.be - Horus.aero

                              12 avril 2006 à 10:08:06

                              Re-bonjour à tous,

                              Pour résoudre mon problème, j'ai donc décidé de mettre le contenu texte préformaté de ma variable issue de ma requete mysql dans un fichier txt temporaire.
                              Je peux donc ensuite prendre les lignes du fichier txt une à une pour les insérer dans la cellule d'un tableau dont je peux fixer les dimensions. Ainsi j'obtient l'affichage du texte préformaté de ma variable sans débordement - avec retour chariot - lorsque la ligne est trop longue.

                              Cette methode un peu sioux a le mérite de marcher dans le cas présent. Peut-etre est il possible de faire cela directement lors de la requete mysql.

                              En tout cas voici le code de ma petite fonction si quelqun rencontre les meme besoin:


                              function cell_pre_like_print($var){ /* En entré la variable qui contient le texte préformaté stocké dans une base mysql*/
                               $file = fopen("files/tmp.txt", "a+");/* Ouverture du fichier + création du fichier en écriture */
                               fseek($file, 0); /* Place le curseur en début de fichier */
                               fputs($file, $var)/* Ecrit le contenu de $var dans le fichier tmp.txt */
                               fclose($file);
                               $file = fopen("files/tmp.txt", "r");
                               fseek($file, 0);
                               echo "<table><tr><td width=20></td><td width=800 style=\"text-align:justify; font-family: verdana;font-size: 14px;\">";
                               while (!feof($file)) { /* Tant que l'on est pas en fin de fichier */
                                 $ligne = fgets($file); /* Extraction de la ligne courante */
                                 echo $ligne."<br/>"; /* Affichage de la ligne */
                               }
                               echo "</td></tr></table>";
                               fclose($file);
                               unlink("files/tmp.txt"); /* Supprime physiquement le fichier du serveur */
                              }


                              6echo.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Balise <pre>

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown