Php 为特定页面包含样式表的最佳方式是什么?
谢谢收看 我的网站使用PHP为每个页面提供相同的页眉和页脚 我想要一个只适用于特定页面的样式表,所以使用适当的标记将样式放入其中Php 为特定页面包含样式表的最佳方式是什么?,php,html,css,stylesheet,Php,Html,Css,Stylesheet,谢谢收看 我的网站使用PHP为每个页面提供相同的页眉和页脚 我想要一个只适用于特定页面的样式表,所以使用适当的标记将样式放入其中 ...<body><style type="text/css"> /* what ever */ </style></body>... ../*什么事。。。 我测试的所有浏览器都正确处理了样式表,但是W3C没有正确验证它,因为它位于body标记而不是head中 我的问题是: 如果我不能将样式表放在body标记中,那么
...<body><style type="text/css"> /* what ever */ </style></body>...
../*什么事。。。
我测试的所有浏览器都正确处理了样式表,但是W3C没有正确验证它,因为它位于body标记而不是head中
我的问题是:如果我不能将样式表放在body标记中,那么最好的方法是什么?我可以在PHP头中引用样式表,但我不希望对这样一个小文件有另一个HTTP请求。你会怎么做?最不草率的方法是什么?虽然样式标记不应该在中,但浏览器仍然可以正确处理它。给主体一个id,然后只在常规CSS中包含特定于页面的文件,但样式的前缀是id选择器,怎么样?大概是这样的: 第页
<body id="pageSpecificId">......</body>
最好的方法是使用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>
你好
世界
我想我可能会感到困惑,但是。。。为什么要在PHP标题中引用样式表?如果将所有css放在一个外部文件中并使其可缓存,则用户只需下载一次,而不管他们下载了多少页以及下载了多少次。@但有些不会阻止另一个HTTP请求的发生。它仍然请求它,并作为304返回,而不是修改。您的PHP脚本的结构是什么,它们如何相互包含/引用?在提出最实用的解决方案时,这将产生很大的不同。@Petah:你试过设置正确的缓存头吗?例如,看看护目镜的第一页。使用firebug,您可以看到它发出6个HTTP请求(强制重新加载或清空缓存)。然后单击地址字段并按enter键,它只生成两个。例如,ps_logo2.png已经在浏览器缓存中,因此没有第二次被检索到。这是假设body
标记没有包含在他的页眉/页脚中。好的,body标记在代码示例中,但是你是对的,我做了这个假设。@Petah你是对的,body标记在我的页眉中。谢谢大家的回答!这是我关于堆栈溢出的第一个问题。@Nathan将body标记放在头文件中是一个不明智的选择。。请重新考虑您使用include文件的方式:@Dante617提到的方法更灵活、更安全scalable@Lucius在每页的开头包含两个单独的标题会更好吗?一个是在HTML之前执行的PHP代码的头,另一个是包含页面布局的头?谢谢,我以前没听说过这个。看来我得读点书了。这应该是可行的,因为我的网站仍处于早期开发阶段。
<?php Page::add_head('<title>Hello World!</title>'); ?>
<h1>Hello</h1>
<p>World</p>