0

0

Sass map详解_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:49:13

|

1548人浏览过

|

来源于php中文网

原创

作为一个css预处理器,sass正受到越来越多的青睐,诸如github、codepen、css-tricks、sitepoint、w3cplus等网站采用sass组织、管理css文件,sass正在逐渐成为事实上的css预处理器行业标准。接下来几篇文章,我们来研读下sass中的关键功能,今天来看map,大家不妨一坐,精彩内容马上呈现。

map简介

在Sass中,maps代表一种数据类型,可以包含若干键值对的对象类型,使用()包围一个map,里面的键值对用逗号隔开,键和值可以是任何的Sass数据类型,尽管一个值可以用在多个键上,但是通过一个键我们必须只能找到一个值。map不能直接在css中使用,如果你把一个map赋值给一个元素将会报错。下面的代码示例一个经典的map。

$map: (  key1: value1,  key2: value2,  key3: value3);

map使用

我们可以使用一系列的函数操作map,可以使用循环指令遍历map。
map相关的函数有map-keys()、map-values()、map-get()、map-has-key()、map-merge()、map-remove()、keywords()等,函数功能如下表所示。

函数 功能 示例
map-keys(map) 返回map里面所有的key(list) map-keys(("foo": 1, "bar": 2)) => "foo", "bar"
map-values(map) 返回map里面所有的value(list) map-values(("foo": 1, "bar": 2)) => 1, 2
map-get(map,key) 返回map里面指定可以的value map-get(("foo": 1, "bar": 2), "foo") => 1
map-has-key(map,key) 返回map里面是否含有指定的key map-has-key(("foo": 1, "bar": 2), "foo") => true
map-merge(map1,map2) 合并map(map) map-merge(("foo": 1), ("bar": 2)) => ("foo": 1, "bar": 2)
map-remove(map,keys) 删除指定map中的指定key(map) map-remove(("foo": 1, "bar": 2), "bar") => ("foo": 1)
keywords(args) 返回一个函数参数组成的map(map) @mixin foo(args...) { at debug keywords($args); //=> (arg1: val, arg2: val)}

我们可以使用@each指令遍历map,如下所示。

$map: (  key1: value1,  key2: value2,  key3: value3);/* 遍历map */@each $key, $value in $map {  .element--#{$key} {    background: $value;  }}

map案例

map在Sass中应用广泛,有很多场合可以用到map,下面列举一二。

立即学习前端免费学习笔记(深入)”;

指定多值

css里有很多属性可以指定多个值,例如transition、box-shadow等,这个时候我们可以使用map来定义不同的值,然后可以统一使用。例如

/* 使用map定义不同的值 */$card_transition_map: (  trans1: 200ms transform ease-in-out,  trans2: 400ms background ease-in,  trans3: 600ms color linear);/* map-values统一使用 */.card {  transition: map-values($card_transition_map);}

编译之后输出

逻辑智能
逻辑智能

InsiderX:打造每个团队都能轻松定制的智能体员工

下载
.card {    transition: 200ms transform ease-in-out,                 400ms background ease-in,                 600ms color linear;}

压缩多值

我们可以使用zip函数来压缩多值,例如操作animate时:

$animation_config: (  name: none,  duration: 0s,  timing: ease,  delay: 0s,  iteration: 1, // infinite  direction: normal, // reverse, alternate, alternate-reverse  fill-mode: none, // forwards, backwards, both  play-state: running);@function sh-setup($config) {  @return zip(map-values($config)...);} .object {  animation: sh-setup($animation_config);}

编译之后输出结果为

.object {  animation: none 0s ease 0s 1 normal none running;}

指定皮肤

我们可以使用一个循环来遍历不同的map,达到指定不同皮肤的功效。

$background_color: (	jeremy: #0989cb,	beth: #8666ae,	matt: #02bba7,	ryan: #ff8178);$font: (	jeremy: Helvetica,	beth: Verdana,	matt: Times,	ryan: Arial);@each $key, $value in $background_color {	.#{$key} {		background: $value;		font-family: map-get($font, $key);	}}

编译之后输出

.jeremy {  background: #0989cb;  font-family: Helvetica;}.beth {  background: #8666ae;  font-family: Verdana;}.matt {  background: #02bba7;  font-family: Times;}.ryan {  background: #ff8178;  font-family: Arial;}

配置文件

使用Sass的一个最大的优点在于,我们可以对css文件进行统一的组织与管理,使用配置文件是达到目的的主要手段,例如我们把网页中所有层的z-index放配置文件里,在需要的地方进行调用。

/*定义配置文件*/$z-index: (  modal              : 200,  navigation         : 100,  footer             : 90,  triangle           : 60,  navigation-rainbow : 50,  share-type         : 41,  share              : 40,);/*在合适的时机调用*/.navigation {  z-index: map-get($z-index, navigation);}

编译之后输出

.navigation {  z-index: 100;}

上面案例调用的时候还用到map-get函数,还是比较麻烦,我们继续简化。

$z-index: (  modal              : 200,  navigation         : 100,  footer             : 90,  triangle           : 60,  navigation-rainbow : 50,  share-type         : 41,  share              : 40,);@function z-index($key) {  @return map-get($z-index, $key);}@mixin z-index($key) {  z-index: z-index($key);}/*调用时*/.navigation {  @include z-index(navigation);}

断点管理

下面代码演示如何在项目管理中如何进行断点管理。

// _config.scss$breakpoints: (  small: 767px,  medium: 992px,  large: 1200px); // _mixins.scss@mixin respond-to($breakpoint) {   @if map-has-key($breakpoints, $breakpoint) {    @media (min-width: #{map-get($breakpoints, $breakpoint)}) {      @content;    }  }   @else {    @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "        + "Please make sure it is defined in `$breakpoints` map.";  }} // _component.scss.element {  color: hotpink;   @include respond-to(small) {    color: tomato;  }}

编译之后输出结果为

.element {  color: hotpink;}@media (min-width: 767px) {  .element {    color: tomato;  }}

处理前缀

下面我们来看map在处理前缀mixin中的应用,两个参数类型分别为map和list,使用需要注意。

/*定义*//// Mixin to prefix several properties at once/// @author Hugo Giraudel/// @param {Map} $declarations - Declarations to prefix/// @param {List} $prefixes (()) - List of prefixes to print@mixin prefix($declarations, $prefixes: ()) {  @each $property, $value in $declarations {    @each $prefix in $prefixes {      #{'-' + $prefix + '-' + $property}: $value;    }    // Output standard non-prefixed declaration    #{$property}: $value;  }}/*使用*/.selector {  @include prefix((    column-count: 3,    column-gap: 1.5em,    column-rule: 2px solid hotpink  ), webkit moz);}

编译之后输出为

.selector {  -webkit-column-count: 3;  -moz-column-count: 3;  column-count: 3;  -webkit-column-gap: 1.5em;  -moz-column-gap: 1.5em;  column-gap: 1.5em;  -webkit-column-rule: 2px solid hotpink;  -moz-column-rule: 2px solid hotpink;  column-rule: 2px solid hotpink;}

反向函数

Hugo Giraudel大牛定义的反向函数。

/*定义*//// Returns the opposite direction of each direction in a list/// @author Hugo Giraudel/// @param {List} $directions - List of initial directions/// @return {List} - List of opposite directions@function opposite-direction($directions) {  $opposite-directions: ();  $direction-map: (    'top':    'bottom',    'right':  'left',    'bottom': 'top',    'left':   'right',    'center': 'center',    'ltr':    'rtl',    'rtl':    'ltr'  );   @each $direction in $directions {    $direction: to-lower-case($direction);        @if map-has-key($direction-map, $direction) {       $opposite-directions: append($opposite-directions, unquote(map-get($direction-map, $direction)));    } @else {      @warn "No opposite direction can be found for `#{$direction}`. Direction omitted.";    }  }   @return $opposite-directions;}/*使用*/.selector {  background-position: opposite-direction(top right);}

编译之后输出结果为

.selector {  background-position: bottom left;}

深入阅读

本文的写作过程大量参考了以下文章,大家可以仔细阅读下面文章获得更深的体会。

  • 官方文档
  • mapfunction
  • Real Sass, Real Maps
  • Making Use of Sass’ Zip() Function
  • Sass Maps Are Awesome!
  • Using Sass Maps
  • Sass Mixins to Kickstart Your Project
  • 声明

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    全国统一发票查询平台入口合集
    全国统一发票查询平台入口合集

    本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

    19

    2026.02.03

    短剧入口地址汇总
    短剧入口地址汇总

    本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

    27

    2026.02.03

    植物大战僵尸版本入口地址汇总
    植物大战僵尸版本入口地址汇总

    本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

    15

    2026.02.03

    c语言中/相关合集
    c语言中/相关合集

    本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

    3

    2026.02.03

    漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
    漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

    本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

    13

    2026.02.03

    Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
    Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

    本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

    114

    2026.02.03

    Java 设计模式与重构实践
    Java 设计模式与重构实践

    本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

    3

    2026.02.03

    C# 并发与异步编程
    C# 并发与异步编程

    本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

    2

    2026.02.03

    Python 强化学习与深度Q网络(DQN)
    Python 强化学习与深度Q网络(DQN)

    本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

    3

    2026.02.03

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Go语言实战之 GraphQL
    Go语言实战之 GraphQL

    共10课时 | 0.8万人学习

    进程与SOCKET
    进程与SOCKET

    共6课时 | 0.4万人学习

    c语言项目php解释器源码分析探索
    c语言项目php解释器源码分析探索

    共7课时 | 0.4万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号