Answers:
Magento建议的2种方法来覆盖或扩展父主题的样式:
延伸:
在主题目录中,创建一个web/css/source
子目录。(您已经完成了这一部分)在_extend.less
此处创建一个文件。
根据文档:
“当您对父主题具有的所有功能都满意但想要添加更多样式时,使用_extend.less扩展主题是最简单的选择。”
覆写:
您无需创建_extend.less
文件,而是创建_theme.less
文件。在这种情况下,您需要从父级复制所有需要的变量_theme.less
,包括那些不会更改的变量。然后进行更改。
根据文档,缺点是:
“每当父母的_theme.less更新时,您就需要监视并手动更新文件。”
延伸:
此方法使您可以更好地组织代码。您的更改将井井有条。您无需使用单个 _extend.less
文件来包含所有更改,而是可以从您要更改的Magento UI库中为每个组件创建扩展文件。
假设您要扩展按钮和导航组件的样式。在主题目录中,创建2个文件:_buttons_extend.less
和_navigation_extend.less
,然后在相应文件中添加对每个组件的更改。
然后创建_extend.less
添加以下代码的文件:
@import '_buttons_extend.less';
@import '_navigation_extend.less';
覆写:
在你的主题,创建对应于要改变(UI组件的文件的副本_buttons.less
,_navigation.less
等),该文件将覆盖_buttons.less
父主题。
重要的是要注意覆盖和扩展之间的区别。
您可以在《前端开发人员指南》中阅读更多有关覆盖和扩展的文档,也可以阅读Magento 2中有关CSS 的更多信息。
web/css/source/_extend.less
并在其中放置样式即可。
我在使用Foundation时遇到了类似的问题。这样做的官方方法是覆盖特定模块的less文件,并在那里修改css。然后,Magento将在编译期间将其拾取
http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/debug-theme.html#debug-theme-style
http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/css-topics/css-preprocess.html
最终,我最终删除了Magento创建的所有默认CSS文件。我发现编写自定义CSS(尤其是使用Bootstrap这样的框架)比尝试覆盖所有各个模块要容易得多。您可以在以下位置执行此操作:
app/design/frontend/{vendor}/{theme}/Magento_Theme/layout/default_head_blocks.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<remove src="css/styles-m.css" />
<remove src="css/styles-l.css" />
<remove src="css/print.css" />
<remove src="css/styles.css" />
</head>
</xml>
假设您要覆盖styles-m.css,然后将其放入web/css
主题中,并将其命名为custom-styles-m.css。
然后在主题default_head_blocks.xml中使用以下代码:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<remove src="css/styles-m.css" />
<css src="css/custom-styles-m.css" />
...