在 Yii 中,有许多不同的方法可以让 CSS 进入你的页面。
问题是,一旦你开始使用扩展、小部件、主题等,它们都有自己的样式表(很公平),并且 CSS 被处理和插入 HTML 的顺序会根据它们是否设置在控制器、视图或布局,或者正在使用 Yii 资产管理器或 Yii 包管理器。
最近,我们的 Yii 项目被修改为使用注册在config/main.php
中的包,方式如下:
'clientScript'=>array(
'packages'=> array(
'theme'=>array(
'basePath'=>'yii.themes.default',
'css'=>array('css/reset.css','css/main.css','css/form.css'),
'js'=>array('js/lib.js'),
'depends'=>array('jquery'),
),
...
这导致 CSS 文件中断,因为它旨在覆盖网格视图样式,并且现在包含在 CGridView 样式表之前。
解决方案是在底部添加这些行layouts/main.php
:
$path = Yii::getPathOfAlias('yii.themes.default').'/css/style.css';
$cssFile = Yii::app()->getAssetManager()->publish($path);
Yii::app()->getClientScript()->registerCssFile($cssFile);
对我来说,这感觉不是一个完美的解决方案,我希望将来我们可能会在忘记我们所做的事情时遇到问题,或者我们必须做一个不同主题的类似事情,或者完全不同的项目。
当 CSS 可以从这么多不同的来源提供时,是否有更好的方法来有效地管理 CSS?
编辑:
我正在考虑扩展 CClientScript 以提供“覆盖”类型的选项,您可以在其中指定一个 CSS 文件数组,您正在注册的文件应该包含在这些文件之后。不过感觉可能有点飘了。。。