【问题标题】:Is there a way to append a CSS file with additional styles when needed?有没有办法在需要时附加带有其他样式的 CSS 文件?
【发布时间】:2014-07-27 06:48:05
【问题描述】:

我在一个包含许多 css 文件的网站上工作。其中一些是针对国际用户的特定语言覆盖(我们更改了一些样式,因此较长的翻译文本字符串不会破坏布局)。所以我们有类似 french.css、spanish.css 等的东西。当用户点击我们的语言切换器时,页面会重新加载,并在 body 标记上添加一个特殊的类。这就是页面选择其他样式的方式。

我们在不久的将来的目标之一是只为我们的国际用户提供一种适合他们的特定语言文件。现在,每个人都可以获得所有样式,即使它们不是必需的。同时,其中一位经理希望将我们的样式合并到一个文件中以减少 http 请求。我们如何才能拥有一个 css 文件而不包括每个用户的所有语言覆盖?有没有办法在需要时将样式附加到一个主 css 文件?我们使用 Compass SASS;有没有办法编译我们主文件的不同版本,一个包括西班牙风格,一个包括法国风格等?理想情况下,我们不希望在工作目录中有不同版本的主 css 文件,因为我们总共支持 25 种语言。此外,我们的开发人员使用 PHP 和 JavaScript,以防任何人有使用这些编程语言的解决方案。

编辑 - 我应该澄清一下。是否有一个脚本或函数可以从一个 css 文件中获取样式块并将它们直接添加到另一个,这将是为用户提供的一个主要 css 文件?这只会在用户更改他们在我们网站上的语言选择时执行。或者,因为我们使用的是 SASS,框架中有没有办法让编译器生成 25 个 css 版本的 main.scss,每个都包含特定的语言覆盖(在我们的 sass 目录的根目录中没有 25 个 .scss 版本) ?

【问题讨论】:

  • 多个HTTP请求有什么问题?
  • 你得问我们的经理 :) 他可能会告诉你问他的经理。
  • 您可以为所有用户提供 main.css 和 1 个默认语言文件 (EN)。然后用户选择不同的语言并使用 JS,您将该语言样式表附加到文档中吗?那是3个不同的请求。是不是太多了?如果您将所有内容包含在 1 个文件中,它将具有 24 种他们不需要的语言的样式,这比 3 个小请求更大的服务器负载。
  • 使用您的语言名称保留父类。在 CSS 内部,使用语言类来区分样式。例如,所有英语课程都以.english .someclass{styles} 开头。就像西班牙语以.spanish .someclass{styles}开头一样。现在我们在一个文件中有相同的名称.sameclass。但它会根据语言设置给出不同的输出。
  • 我正在使用 .NET,在这种情况下,我们可以使用 [lang]-style.css 之类的方法获取语言并附加所需的 css,然后您就不必使用 if。我建议您阅读类似的内容以获取缩小等 css 文件和请求减少的内容。 robertnyman.com/2010/01/19/…

标签: php css compass-sass


【解决方案1】:

你可以使用 php 来做到这一点。 您需要创建一个包含所有 css 的 php 文件并将其包含在索引文件中:

<link rel="stylesheet" type="text/css" href="css_file.php">

然后你必须创建 css_file.php 并使用以下代码:

<?php
header("Content-type: text/css; charset: UTF-8");

// get the language variable from url
$language = $_GET['langvar'];

if($language == "en"){
    // english language css code goes here
    echo "
    body { margin: 0; padding: 0; }
    ";
} else if($language == "fr"){
    // french language css code goes here
    echo "
    body { margin: 0; padding: 0; }
    ";
} else if($language == "other"){
    // other language css code goes here
    echo "
    body { margin: 0; padding: 0; }
    ";
}
?>

编辑:

如果您的代码中不存在语言变量,您可以从会话中获取语言:

<?php
    session_start();
    header("Content-type: text/css; charset: UTF-8");

    // get the language variable from active session
    $language = $_SESSION['langvar'];

    if($language == "en"){
        // english language css code goes here
        echo "
        body { margin: 0; padding: 0; }
        ";
    } else if($language == "fr"){
        // french language css code goes here
        echo "
        body { margin: 0; padding: 0; }
        ";
    } else if($language == "other"){
        // other language css code goes here
        echo "
        body { margin: 0; padding: 0; }
        ";
    }
    ?>

编辑:

如果要加载单独的 css 文件,需要将以下 php 代码添加到索引文件中:

<?php
    session_start();

    // get the language variable from active session
    $language = $_SESSION['langvar'];

    if($language == "en"){
        // english css file load
        echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"english.css\">";
    } else if($language == "fr"){
        // french css file load
        echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"french.css\">";
    } else if($language == "other"){
        // other css file load
        echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"other.css\">";
    }
    ?>

如果语言会话名称与 css 文件相同,您可以使用:

<?php
        session_start();

        // get the language variable from active session
        $language = $_SESSION['langvar'];

        echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$language.".css\">";
        ?>

【讨论】:

  • 我对PHP不熟悉,所以如果我有误解,请原谅我,但是我们的url没有语言变量。如果用户更改了他们的语言,“&from=locale-changed”会被短暂地添加到 url,然后页面会刷新翻译文本,并从 url 中删除上述内容。但是, lang 属性被添加到 html 元素(有时是 locale 属性),并且特定的类也被添加到 body 标记中。有没有办法利用这些而不是语言变量?
  • 您必须询问您的 php 开发人员您的系统如何处理语言更改。如果 url 中不存在,我已经编辑了代码以从会话中获取语言变量。希望这会对你有所帮助。
  • 这看起来很有希望!是否可以导入 css 文件而不是回显样式块?除了我们的主 css 文件外,我们还有单独的文件,每种语言都有特定的覆盖;我们可以改用@import url; 吗?拥有单独的文件使我们的 css 开发人员更容易维护。
  • 谢谢!我将由我们的 PHP 人员运行它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2015-11-17
  • 1970-01-01
  • 2015-01-03
相关资源
最近更新 更多