为特定页面包含样式表的最佳方法是什么?

时间:2010-10-17 21:53:19

标签: php html css stylesheet

感谢您的观看。

我的网站使用PHP为每个页面包含相同的页眉和页脚。

我想要一张仅专门用于某个页面的样式表,所以请使用相应的标签来设置样式。

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

样式表在我测试的所有浏览器中都得到了正确处理,但W3C没有正确验证它,因为它位于body标签内而不是头部。

我的问题是:
如果我不能将样式表放在body标签中,那么包含它的最佳方法是什么?我可以在PHP标头中引用样式表,但我不想为这么小的文件提供另一个HTTP请求。你会怎么做?什么是最不马虎的方式呢?虽然样式标记不应位于&lt; body&gt;中,但浏览器仍会正确处理它。

2 个答案:

答案 0 :(得分:8)

给身体一个id,然后只包含一般CSS中的页面特定文件,但样式前缀为id选择器?像这样:

在页面上

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

在CSS文件中:

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

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

答案 1 :(得分:1)

最好的方法是使用缓冲视图文件的MVC框架,并允许在输出之前将标记动态添加到头部。

这是一种超简单的方法:

的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>