4. Getting started with LESS / 关于LESS

- pre-processor预处理器 -
- compiler 编译器 -
- parser解析器 -
--

4.1 What is LESS / 什么是LESS

Less是一个CSS的预处理器,它拓展了CSS语言,添加了新特性比如变量(variables),Less混合(mixins=mixing in),函数(functions)以及其它一些技术,使CSS更加可维护,更适用,更加可扩展。

在Shopware 5中包括了一个LESS的php解释器。通过它,设计师可以使用许多有趣的特性,比如变量或者LESS混合(mixins)。在这里我们不会详细讲LESS的每个细节,但是我们会告诉你如何在Shopware theme中如何运用LESS。

链接:LESS的官方文档

4.2 Why LESS / 为什么用LESS

我们经常会被问到,为什么选择LESS,而不是SASS或者其它什么。没有一场关于CSS预处理器的争论也许无法说服所有人,在这里提供几个在Shopware中选择LESS的理由:
1. LESS非常轻量级,对于没有过CSS预处理器工作经验的编程者来说,非常易学
2. 这是个稳定的,针对LESS的PHP解析器
3. 没有对其它语言(比如Ruby)的依赖
SASS的忠实粉丝们,别伤心。记住LESS只是我们和编译器推荐给开发者的工具。你可以根据自己的喜好选择其它的预处理器,给你的theme添加编译好的CSS。

4.3 Using LESS in your theme / 在自定义的主题中使用LESS

在你自定义的Shopware theme中,使用LESS很容易。只需要创建正确的文件路径frontend/_public/src/less/,然后在该路径中创建all.less文件,该文件会被自动添加到Shopware的编译器中。
当然,你可以将所有文件都放到同一个文件中,但为了有明了的结构,我们强烈推荐用户为自己的theme的不同部分创建分开的文件。然后在all.less文件使用@import方法导入这些文件。比如:

@import "global.less";
@import "_modules/account-orders.less";```

##4.4 Responsiveness in Shopware / Shopware中的响应式
我们使用LESS则是为了更好的创建响应式主题。

**4.4.1 The .unitize() mixin**
在全响应式网页中,不推荐使用固定的像素值(pixel)。使用pixel的网页会根据屏幕大小(screen size),像素密度(pixel density)和浏览器字体大小(browser fontsize)进行动态的缩放。
因此,我们决定使用中央测量混合(central measurement mixin),它可以将像素转换成其他测量单元。使用该工具的优点是,你可以在你的LESS文件中使用可读的像素值,但是编译后的CSS会有动态测量单元,而这个单元可以在中心点(central point)进行自定义。
在Shopware的Responisve主题中我们使用了`rem`值,从而使所有数值都可以根据单位字体大小(unit)进行缩放。举例:

.my--class {
.unitize(font-size, 16); // Single properties
.unitize-width(200); // Helpers for width and height
.unitize-padding(20, 20); // Helper for padding accepting the four value syntax
.unitize-margin(10, 0, 0, 0); // Helper for margin accepting the four value syntax
// ...
}```

4.4.2 Breakpoint variables
对于响应式网页,我们使用CSS的media queries来创造设备的断点(device breakpoints),从而使该模板可以根据相应的设备类型进行调整。为了获得更多的灵活性,我们先在这里配置一些适用于所有media queries变量。

@phoneLandscapeViewportWidth: 30em;     // 480px
@tabletViewportWidth: 48em;             // 768px
@tabletLandscapeViewportWidth: 64em;    // 1024px
@desktopViewportWidth: 78.75em;         // 1260px```

举例:在不同的media queries中使用断点变量

.my--class {
.unitize-padding(10, 0);
}

@media screen and(min-width: @tabletViewportWidth) {
.my--class {
.unitize-padding(20, 0);
}
}根据 **移动设备优先的原则(mobile first concept)**,建议用户先创建适用于移动设备的样式,然后再使用min-width```这个media queries在最小屏幕宽度处给出一个新的断点。
==> 即从手机屏幕开始设计,然后是tablet,最后是适用于电脑的。通俗一点讲,min-width从小写到大。

4.5 Predefined mixins and components / 预定义的mixins样式和组件

Shopware已经为CSS3的跨浏览器支持预定义了一些minxins样式。当用继承Shopware的Responsive主题时,用户有权限访问所有标准组件,比如按钮(button),警示框(alert)等等。他们都跟着一些简单的CSS类的语法,有可能你以前见过。比如说,

  • 要创建一个基本按钮 ==> 在元素上添加一个btn
  • 想要将按钮设置为高亮的主要按钮 ==> 在元素上添加is--primary

下图为/frontend/_public/src/less/目录下预定义的less文件以及结构。 更多Shopware的UI组件

less文件夹中的内容

4.6 LESS variables in Shopware / Shopware中预定义的Less变量

下面是Responsive主题中所有已定义的LESS变量:

// Breakpoints
@phoneLandscapeViewportWidth: 30em;     // 480px
@tabletViewportWidth: 48em;             // 768px
@tabletLandscapeViewportWidth: 64em;    // 1024px
@desktopViewportWidth: 78.75em;         // 1260px
// Basic color definition
@brand-primary: #d9400b;
@brand-primary-light: saturate(lighten(@brand-primary,12%), 5%);
@brand-secondary: #5f7285;
@brand-secondary-dark: darken(@brand-secondary, 15%);```

// Grey tones
@gray: #f5f5f8;
@gray-light: lighten(@gray, 1%);
@gray-dark: darken(@gray-light, 10%);
@border-color: @gray-dark;


// Highlight colors
@highlight-success: #2ecc71;
@highlight-error: #e74c3c;
@highlight-notice: #f1c40f;
@highlight-info: #4aa3df;

//Scaffolding
@body-bg: darken(@gray-light, 5%);
@overlay-bg: #555555;
@text-color: @brand-secondary;
@text-color-dark: @brand-secondary-dark;
@link-color: @brand-primary;
@link-hover-color: darken(@brand-primary, 10%);
@rating-star-color: @highlight-notice;

// Base configuration
@font-size-base: 14;
@font-base-weight: 500;
@font-light-weight: 300;
@font-bold-weight: 600;
@font-base-stack: "Open Sans", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
@font-headline-stack: @font-base-stack;

// Heading font sizes
@font-size-h1: 26;
@font-size-h2: 21;
@font-size-h3: 18;
@font-size-h4: 16;
@font-size-h5: @font-size-base;
@font-size-h6: 12;

// Shopware font directory
@font-directory: "../../fonts/";

// Open Sans font directory
@OpenSansPath: "../../fonts/open-sans-fontface";

// Button text sizes
@btn-font-size: 14;
@btn-icon-size: 10;

// Default Button
@btn-default-top-bg: #FFFFFF;
@btn-default-bottom-bg: @gray-light;
@btn-default-hover-bg: #FFFFFF;
@btn-default-text-color: @text-color;
@btn-default-hover-text-color: @brand-primary;
@btn-default-border-color: @border-color;
@btn-default-hover-border-color: @brand-primary;

// Primary Button
@btn-primary-top-bg: @brand-primary-light;
@btn-primary-bottom-bg: @brand-primary;
@btn-primary-hover-bg: @brand-primary;
@btn-primary-text-color:#FFFFFF;
@btn-primary-hover-text-color: @btn-primary-text-color;

// Secondary Button
@btn-secondary-top-bg: @brand-secondary;
@btn-secondary-bottom-bg: @brand-secondary-dark;
@btn-secondary-hover-bg: @brand-secondary-dark;
@btn-secondary-text-color: #FFFFFF;
@btn-secondary-hover-text-color: @btn-secondary-text-color;

// Panels
@panel-header-bg: @gray-light;
@panel-header-font-size: 14;
@panel-header-color: @text-color;
@panel-border: @border-color;
@panel-bg: #FFFFFF;

// Labels
@label-font-size: 12;
@label-color: @text-color;

// Form base
@input-font-size: 16;
@input-bg: @gray-light;
@input-color: @brand-secondary;
@input-placeholder-color: lighten(@text-color, 15%);
@input-border: @border-color;

// Form states
@input-focus-bg: #FFFFFF;
@input-focus-border: @brand-primary;
@input-focus-color: @brand-secondary;
@input-error-bg: desaturate(lighten(@highlight-error, 38%), 20%);
@input-error-border: @highlight-error;
@input-error-color: @highlight-error;
@input-success-bg: #FFFFFF;
@input-success-border: @highlight-success;
@input-success-color: @brand-secondary-dark;

// Tables
@panel-table-header-bg: @brand-secondary-dark;
@panel-table-header-color: #FFFFFF;
@table-row-bg: #FFFFFF;
@table-row-color: @brand-secondary;
@table-row-highlight-bg: darken(@table-row-bg, 4%);
@table-header-bg: @brand-secondary;
@table-header-color: #FFFFFF;

// Badges, Hints
@badge-discount-bg: @highlight-error;
@badge-discount-color: #FFFFFF;
@badge-newcomer-bg: @highlight-notice;
@badge-newcomer-color: #FFFFFF;
@badge-recommendation-bg: @highlight-success;
@badge-recommendation-color: #FFFFFF;
@badge-download-bg: @highlight-info;
@badge-download-color: #FFFFFF;


##4.7 Creating CSS source maps / 创建CSS源映射
*- 非常有效的测试方法! 可以直接看到生成文件中的每一条语句在源文件中的对应位置 - 比心 - ❤❤❤ -* 
为了方便用户修改调试LESS,Shopware提供了可自动创建CSS源映射(CSS source maps)的选项。这对于调试已存在的样式十分有用。

![Create a CSS source map](http://upload-images.jianshu.io/upload_images/2662224-80ef5d3fc4024d34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**设置方法:**Configuration -> Theme Manager -> Settings -> Create a CSS source map
         (德语系统:Einstellung -> Theme Manager -> Einstellung -> CSS Source Map erstellen)
>注意:**处于安全原因考虑,建议只在测试平台上开启该功能 !

在清空主题缓存之后你能在Chrome DevTools的console中看见指向当前less文件的映射。(不设置的话是看不到第二行`image-slider.less:97`这条信息的)

![指向当前less文件的映射](http://upload-images.jianshu.io/upload_images/2662224-b3c3e986b573e1d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide...
    老夫的天阅读 1,932评论 1 29
  • 第5章 深入了解:自定义Bootstrap 想象一下,一个网站,所有的网站都是用Bootstrap构建的,看起来和...
    海上名月阅读 870评论 1 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,926评论 25 707
  • 尽管小心奕奕地手捧着春天的盛世美颜,但还是阻挡不住一地落红。北方的春,像是昙花的美丽,又像是一场瞬息的梦。虽说夏天...
    元初阅读 284评论 0 0
  • 真正爱你的人,绝不会轻易的离开你,即使有千万种借口放弃,也会找一个理由坚持下去。 一直相信在生活里很多东西都是注定...
    扫地_阅读 1,564评论 17 19