2010-10-17 7 views
2

merci de votre visite.Quel est le meilleur moyen d'inclure une feuille de style pour une page spécifique?

Mon site Web contient le même en-tête et pied de page pour chaque page utilisant PHP. Je voulais une feuille de style qui s'appliquait spécifiquement pour une certaine page, donc mettez le style en utilisant la balise appropriée.

...<body><style type="text/css"> /* what ever */ </style></body>... 

La feuille de style est traité correctement dans tous les navigateurs que j'ai testé, mais il n'est pas validée correctement par le W3C car il est situé à l'intérieur de la balise body au lieu de la tête.

Ma question est:
Si je ne peux pas mettre la feuille de style dans la balise body, quelle est la meilleure façon de l'inclure? Je peux référencer la feuille de style dans l'en-tête PHP, mais je préfère ne pas avoir une autre requête HTTP pour un si petit fichier. Comment le feriez-vous? Quelle est la façon la moins bâclée de le faire? Bien que la balise de style ne doit pas être dans < le corps >, il est toujours traité correctement par les navigateurs.

+1

Je pense que je peux être confus, mais ... pourquoi référeriez-vous une feuille de style i n un en-tête PHP? – Tablet

+0

Si vous mettez tous vos css dans un fichier externe et que vous les mettez en cache, les utilisateurs n'ont besoin de les télécharger qu'une seule fois, quel que soit le nombre de pages qu'ils téléchargent et le nombre de fois qu'ils le font. – some

+0

@some qui n'arrêtera pas une autre requête HTTP. Il le demande toujours et est renvoyé en tant que 304, non modifié – Petah

Répondre

1

La meilleure façon serait d'utiliser un framework MVC qui tamponne votre fichier de vue et permettre étiquette d'être dynamiquement ajouté à la tête avant la sortie.

est ici une façon ultra simple, de le faire:

index.php:

<?php 
class Page { 
    private static $head = array(); 
    private static $content = ''; 
    static function add_head($tag) { 
     self::$head[] = $tag; 
    } 
    static function render_head() { 
     foreach (self::$head as $tag) echo $tag; 
    } 
    static function render_content() { 
     echo self::$content; 
    } 
    static function read_content($file) { 
     ob_start(); 
     require $file; 
     self::$content = ob_get_clean(); 
    } 
    static function render_layout($file) { 
     require $file; 
    } 
} 

Page::read_content('view.php'); 
Page::render_layout('layout.php'); 
?> 

layout.php:

<html> 
    <head><?php Page::render_head(); ?></head> 
    <body> 
     <div id="header"></div> 

     <div id="content"><?php Page::render_content(); ?></div> 

     <div id="footer"></div> 
    </body> 
</html> 

view.php:

<?php Page::add_head('<title>Hello World!</title>'); ?> 
<h1>Hello</h1> 
<p>World</p> 
+0

Merci, je n'ai pas entendu parler de cela auparavant. On dirait que je vais devoir lire. Cela devrait fonctionner puisque mon site est encore au début du développement. – Nathan

8

Qu'en est-il de donner un ID au corps, puis d'inclure simplement les fichiers spécifiques à la page dans le CSS général, mais avec les styles préfixés par le sélecteur d'identifiant? Quelque chose comme ceci:

À la page

<body id="pageSpecificId">......</body> 

Dans le fichier CSS:

#pageSpecificId p { 
    ... paragraph specific styles ... 
} 

#pageSpecificId li { 
    ... list item specific styles ... 
} 
+0

Cela suppose que la balise 'body' n'est pas incluse dans son en-tête/pied de page – Petah

+0

Eh bien, la balise body était dans l'exemple de code, mais vous avez raison, j'ai fait cette supposition. – MikeTheReader

+0

@Petah Vous avez raison, l'étiquette de corps est dans mon en-tête. Merci pour toutes les réponses, tout le monde!C'est ma première question à Stack Overflow. – Nathan