【问题标题】:How to use relative paths for included files such as .css如何为包含的文件(例如 .css)使用相对路径
【发布时间】:2023-03-20 10:12:01
【问题描述】:

我有一个header.php 文件,其中包含一个.css 文件链接。

当我将header.php“包含”到不同文件夹中的另一个 php 文件中时,该 header.php.css href 对于新的 php 文件不正确。

我应该如何在我的.css 文件中声明href 以包含header.php,这对于php 文件所在的任何文件夹都是正确的?

【问题讨论】:

  • 为什么不使用与您的域相关的路径,例如/styles/your.css
  • 在 header.php 文件中使用 CSS 的完整链接

标签: php css path header


【解决方案1】:

这是许多大型应用程序在安装时尝试设置“根 URI”常量/变量的原因。

如果您的应用程序位于域/子域的根目录中,/css/style.css 将起作用,如果不是,它将失败 (/appName/css/style.css)

将绝对 URI 与其他配置常量/变量一起存储到“根”脚本文件夹,构建绝对链接变得轻而易举。

define( 'SCRIPT_ROOT', 'http://localhost/yourApplication' );
// ...
echo '<link rel="stylesheet" type="text/css" href="'.SCRIPT_ROOT.'/css/style.css">';

【讨论】:

  • 如果我将绝对 URI 存储到 config.php,那么我需要将 config.php 包含到 header.php。正如我所说的 header.php 和新的 php 不在同一个文件夹中,新的 php 文件现在找不到 config.php 而不是 .css 文件。这并没有让事情变得更容易。
  • 如果您的代码不知道任何给定目录结构中的“它在哪里”,我不确定是否可以帮助您。你不能硬编码配置文件的相对位置吗?
【解决方案2】:

我可以看到希望为 href 链接生成动态和相对路径的一个原因,那就是如果您在具有不同路径的多个域或站点上运行您的项目。 (例如,您的项目在http://myproject.example.org/http://example.org/myprojecttest/ 上可用)。如果不是这种情况,我建议直接指定您的 css 包含相对于根文件夹:

<link href="/css/style.css" />

如果这确实适用于你,试试这个:

在每个需要 header.php 的顶级文档中,添加一个 $ROOT 变量来指示顶级文档相对于根的位置。例如:

$ROOT = './';

$ROOT = '../';

$ROOT = '../../';

现在,在你的 header.php 文件中,你可以使用:

<link href="<?php echo $ROOT; ?>css/style.css" />

这允许您创建一个 header.php 文件,该文件适用于任何相对路径的任何页面。

完整示例

包含的文件(/path/header.php)

<html><body>
<head>
    <link href="<?php echo $ROOT; ?>css/style.css" />
[...]

文件 1 (/path/index.php):

<?php
$ROOT = './';
include 'header.php';
?>    

文件 1 (/path/admin/index.php):

<?php
$ROOT = '../';
include '../header.php';
?>    

文件3(/path/admin/test/magic.php):

<?php
$ROOT = '../../';
include '../../header.php';
?>    

【讨论】:

  • 这是一个很棒的解决方案!非常感谢!
【解决方案3】:

你有几个选择,我试图在这里收集

基础href

<head>
<base href="http://www.mysite.com/" />
</head>

它的作用是将所有href设置为指向特定路径。 有了这个设置,即使你的页面在http://www.mysite.com/pages/2012/public/secret_folder/myownphpfile.php的深处,你也可以使用&lt;link rel='stylesheet' href='css/mycss.css' /&gt;并成功加载mycss.css文件

绝对路径

您始终可以使用绝对路径,但稍后更改文件的文件夹可能会很痛苦。

<link rel='stylesheet' href='http://www.mysite.com/css/mycss.css' />

定义的拍子

正如@Discomatt 所说,使用 PHP 定义的路径是保持工作正常的一种简单方法。不利的一面;你必须使用 PHP。如果你用它,没问题^^

define('CSSDIR', 'http://www.mysite.com/css/);
<link rel='stylesheet' href='<?= CSSDIR ?>mycss.css' />

【讨论】:

    【解决方案4】:

    查看这个答案以加载相对于当前 js 文件的 css:
    https://stackoverflow.com/a/56580810/4865307

    有了这个技巧,你只需调用 c1CssImport() 来包含基于相对 url 的 css 文件:

    c1CssImport('./ui.css');
    

    【讨论】:

      【解决方案5】:

      写css文件的绝对路径如:

      &lt;link href="http://site.com/css/style.css" /&gt;

      【讨论】:

        【解决方案6】:

        像这样:

        <link rel="stylesheet" href="/css/style.css" />
        

        第一个/ 表示“转到根目录并从那里查看”。这是一个相对路径。

        【讨论】:

          【解决方案7】:

          基于Tom's answer,我将base url 和PHP define 组合在一起(为了减少打字)。

          PHP 中的某处:

          define("HOST_BASE", "http://example.com/");
          

          然后在头文件中:

          <base href="<?php echo HOST_BASE ?>">
          

          基本标签对我来说是新的,我担心兼容性,但它似乎运作良好。有more info about it at MDN

          【讨论】:

            【解决方案8】:

            只需定义您的基本 URL 并将其连接到 CSS 或 JavaScript 参考中。

            如下定义。

            define ('host_address','http://localhost:85/grc/');
            define('css', host_address.'styles/');
            

            我已经通过 host_addressCSS 定义了基本 URL,并使用了它们,如下所示。

            <link rel="stylesheet" href='.css.'custom.css>
            

            【讨论】:

              猜你喜欢
              • 2019-04-21
              • 2023-04-06
              • 2018-06-08
              • 1970-01-01
              • 1970-01-01
              • 2011-12-08
              • 1970-01-01
              • 1970-01-01
              • 2013-04-09
              相关资源
              最近更新 更多