html - 有没有办法在扩展名不是 .css 的样式表中进行链接?

标签 html css stylesheet

我需要在 CSS 中动态链接(如果您知道,还有 JS - 尚未测试)但是当我这样做时浏览器没有呈现样式?

这是我的代码:

<link rel="stylesheet" href="css/test"/>

如果我手动上传文件并将其另存为 test.css,它就可以工作了。

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

有没有办法告诉浏览器“这是一个 CSS 文件。请忽略它没有 css 扩展名”?

更多
原因是我正在设置一个允许用户动态创建自己的 CSS 的服务器。我将此信息存储在数据库中,并且不想在每次用户更新 css 或新用户创建他们的帐户时创建物理(数字)文件。因此,URL 可能是 href="http://somedomain.com/home.php?user=453&css=true"或类似的东西,如果放在浏览器的 URL 中,将返回原始 CSS。

最佳答案

浏览器首先查看它们接收到的内容的 MIME 类型,原则上这与文件的扩展名无关。 MIME 类型由 Web 服务器作为 HTTP header 的一部分发送(如果您愿意,则为文件的信封。)

CSS 样式表的正确 MIME 类型是 text/css。如果样式表文件具有 text/css MIME 类型(在 HTTP header 中定义),无论扩展名是什么,您的浏览器都将使用它们来应用样式。

如果 MIME 类型错误,则结果未定义:是否呈现样式取决于浏览器和 HTML 版本以及严格性。您可以使用浏览器的调试器检查 MIME 类型。

参见 this screenshot以 Chrome 中的示例为例。

this screenshot

每个段落在相应的文件中都有 color: red 规则,但没有应用。如您所见,text/plain 文件中的样式确实得到了呈现,尽管它的 MIME 类型不正确。浏览器确实会发出警告。 PHP生成的text/html文件中的样式未渲染(并给出警告。)

PHP 和其他脚本引擎允许操作 MIME 类型,正如我在 test.css.fixed.php 文件(下面的代码)中所做的那样。如您所见,浏览器不再提示并应用样式它的扩展。

在PHP中,MIME类型可以设置如下(这里是test.css.fixed.php):

<?php 
    header("Content-Type: text/css");
?>

    p.test_css_fixed_php {
        color: red;
    }

header 函数更改服务器发送的 HTTP header 。

如果您不使用脚本引擎,您可以配置您的网络服务器以正确设置 MIME 类型(参见例如 Apache mod_mime configuration)。

请注意,HTML 版本和严格性也会对此产生影响。在 Chrome 中,当 HTML 类型不严格时,text/html 文件中的样式似乎无论如何都会呈现。但是你不能指望它,所以它充其量只是一个快速而肮脏的修复。

关于html - 有没有办法在扩展名不是 .css 的样式表中进行链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066934/

相关文章:

jquery - CSS/Javascript 防止光标样式改变,ondrag 事件

javascript - 我如何解决问题: Uncaught SyntaxError: missing ) after argument list

coding-style - 如何为一组边分配相同的样式?

php - 在 .htaccess 中使用 AddType .css 时浏览器不解释 .css 文件

javascript - 文本溢出多个单元格 : Howto ignore text with Hover etc. 。?

css - 如何将样式导出到样式组件中的外部样式表?

javascript - iOS 键盘不关闭,由 iframe 中的输入触发

html - iOS Safari 缩小跨度中的文本以悬挂缩进段落

html - 有没有办法在有限的页面上嵌入文本?

html - 解释这个嵌入式 mp3 播放器是怎么回事