Каков наилучший способ включить таблицу стилей для конкретной страницы? - PullRequest
2 голосов
/ 18 октября 2010

спасибо за просмотр.

Мой веб-сайт содержит одинаковые верхний и нижний колонтитулы для каждой страницы с использованием PHP.

Мне нужна таблица стилей, которая применяется только для определенной страницы, поэтому вставьте стиль, используя соответствующий тег.

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

Таблица стилей корректно обрабатывается во всех протестированных мною браузерах, однако W3C не проверяет ее корректно, поскольку она расположена внутри тега body вместо заголовка.

Мой вопрос:
Если я не могу поместить таблицу стилей в тег body, как лучше всего ее включить? Я могу сослаться на таблицу стилей в заголовке PHP, но я бы предпочел не иметь другого HTTP-запроса для такого маленького файла. Как бы вы это сделали? Какой наименее небрежный способ сделать это? Хотя тег style не должен быть в , он все равно корректно обрабатывается браузерами.

Ответы [ 2 ]

8 голосов
/ 18 октября 2010

Как насчет присвоения телу идентификатора, а затем просто включения файлов, специфичных для страницы, в общий CSS, но со стилями, начинающимися с префикса селектора идентификаторов? Примерно так:

На странице

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

В файле CSS:

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

#pageSpecificId li {
   ... list item specific styles ...
}
1 голос
/ 18 октября 2010

Лучший способ - использовать 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>
...