使用Less扩展自定义主题中的父样式

要在主题中扩展父主题的样式:

1.在该路径下创建一个_extend.less文件:

│ ├── web/
│ │ ├── css/
│ │ │ ├── source/
│ │ │ ├──_extend.less

2.在此文件中添加您的LESS代码

当您对父主题具的内容感到满意仅仅想要添加样式时,使用_extend.less扩展主题是最简单的方式

 

使用Less覆盖自定义主题中的父样式

要覆盖父样式(即覆盖默认的Magento UI库):

1.在主题目录中,创建web/css/source子目录

2.在该路径下创建一个_theme.less文件:

<theme_dir>/
│ ├── web/
│ │ ├── css/
│ │ │ ├── source/
│ │ │ ├──_theme.less

3.重要的是要记住你的_theme.less覆盖了父_theme.less

4.从父_theme.less复制所需的所有变量,包括那些不会更改的变量。如果您的主题继承自Blank,则应从中复制的_theme.less位于<Magento_Blank_theme_dir>/web/css/source/_theme.less

5.进行必要的更改

6.父主题可能没有_theme.less文件,这仅供参考。如果在<Magento_Blank_theme_dir>/Magento_Theme web/css/source中有一个名为_module.less的文件,则需要在类似位置<theme_dir>/Magento_Theme/web/css/source中复制主题中的相同文件,然后对此文件进行必要的更改

这种方法的缺点是,只要更新父级的_theme.less,您就需要监视并手动更新文件。

注意: 要查看您在less文件中所做的更改,您需要执行setup:upgrade and setup:static-content:deploy

 

少用Grunt编译

先决条件

确保将Magento设置为开发者模式或默认模式

安装和配置Grunt

Magento已经配置了内置的Grunt任务,但是仍然需要几个先决条件才能使用它:

1.将node.js安装到计算机上的任何位置,参考:https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions

2.运行以下命令,安装Grunt CLI工具:

npm install -g grunt-cli

3.现在重命名以下文件: Gruntfile.js.sample 改为 Gruntfile.js

                                        package.json.sample 改为 package.json

4.为Magento实例安装(或刷新)node.js项目依托项,包括Grunt。为此,请在命令行中运行以下命令:

cd <your_Magento_root_directory>
npm install
npm update

5.将您的主题添加到Grunt配置:在dev / tools / grunt / configs / themes.js文件中,将您的主题添加到module.exports,如下所示:

module.exports = {
     ...
    <theme>: {
    area: 'frontend',
    name: '<Vendor>/<theme>',
    locale: '<language>',
    files: [
    '<path_to_file1>', //path to root source file
    '<path_to_file2>'
    ],
    dsl: 'less'
    ...
},

使用以下标签的地方:

<theme>:您的主题代码,通常应该对应于主题目录名称。

<language>:以'code_subtag'格式指定,例如en_US。此处只能指定一个区域设置,要使用其他语言环境调试主题,请创建并声明另一个主题,为语言指定另一个值

<path_to_file>:相对于app / design / frontend / <Vendor> / <theme /> web目录的根源文件的路径,您需要指定主题的根文件,如果您的主题继承自某个主题,并且不包含其自己的根文件,请指定父主题的根文件。

6.(可选)如果您想使用Grunt自动“监听”变更,而不是每次都在浏览器中重新加载页面,请在浏览器中安装LiveReload扩展。

Grunt命令

命令 用法
grunt clean:<theme>

 

例如:

grunt clean:blank

删除pub / static和var目录中与主题相关的静态文件。
grunt exec:<theme> 将符号链接重新发布到源文件的pub / static / frontend / <Vendor> / <theme> / <locale>目录。
grunt less:<theme> 使用pub / static / frontend / <Vendor> / <theme> / <locale>目录中发布的符号链接编译.css文件
grunt watch 跟踪源文件中的更改,重新编译.css文件,并在浏览器页面中重新加载页面(您需要为浏览器安装LiveReload)

基本上,使用grunt less:<theme>使编译得简便