Foundation SASS 阅读 | _function

unction

列表

  • export
  • lower-bound
  • upper-bound
  • strip-unit
  • text-inputs
  • convert-to-rem
  • data
  • rem-calc
  • emCalc
  • em-calc

简介

common

html 和 body 默认的字体大小,全局设置 1rem = 16px

$rem-base: 16px !default;

export

只 import 一次,如果有 compenents 依赖其他 compenents 阻止多次加载 这个函数只是用来读写 $modules 这个全局变量

注意: 这是一个 mixin 不是一个函数

注意: 第一次执行 exports(moduleA) 之后,再次执行 exports(moduleA),此时不再进行加载, 因为第一次执行之后,moduleA 已经注入到全局对象 $modules 中

$modules: () !default;
@mixin exports($name) {
    // 调用全局对象
    $modules: $modules !global;
    // 检测依赖模块是否已经存在全局模块列表中
    $module_index: index($modules, $name);
    @if (($module_index == null) or ($module_index == false)) {
        // 如果全局列表中不存在此依赖模块,则写入并修改全局变量
        $modules: append($modules, $name) !global;
        @content;
    }
}

lower-bound

返回列表中的第一个元素,列表长度为空,则返回 0

标注: 返回列表中的一个最小值,媒体查询会用到

@function lower-bound($range){
    @if length($range) <= 0 {
        @return 0;
    }
    @return nth($range,1);
}

upper-bound

返回列表中的第二个元素,列表长度小于2时,则返回 999999999999

即返回列表中的一个最大值,媒体查询会用到

@function upper-bound($range){
    @if length($range) < 2 {
        @return 999999999999;
    }
    @return nth($range,2);
}

strip-unit

取掉单位

例如:调用 strip-unit(2px) 则返回 2

@function strip-unit($num) {
    @return $num / ($num * 0 + 1);
}

text-inputs

返回一个包含指定元素属性的列表 一般指定都是 input

一般用于生成input 元素

例如: 
执行 text-inputs() 则返回

input[type="text"], input[type="password"], input[type="date"],
input[type="datetime"], input[type="datetime-local"], input[type="month"],
input[type="week"], input[type="email"], input[type="number"],
input[type="search"], input[type="tel"], input[type="time"],
input[type="url"], input[type="color"], textarea

执行 text-inputs((week, text)) 则返回

input[type="week"], input[type="text"]

执行 text-inputs((week, text), div) 则返回

div[type="week"], div[type="text"]

@function text-inputs( $types: all, $selector: input ) {

    $return: ();

    $all-text-input-types:
        text
        password
        date
        datetime
        datetime-local
        month
        week
        email
        number
        search
        tel
        time
        url
        color
        textarea;

    @if $types == all {
        $types: $all-text-input-types;
    }

    @each $type in $types {
        @if $type == textarea {
            @if $selector == input {
                $return: append($return, unquote(‘#{$type}‘), comma)
            } @else {
                $return: append($return, unquote(‘#{$type}#{$selector}‘), comma)
            }
        } @else {
                $return: append($return, unquote(‘#{$selector}[type="#{$type}"]‘),  comma)
        }
    }

    @return $return;

}

convert-to-rem

其他单位和 rem 的换算

例如: convert-to-rem(32) 即返回的是 2 rem

调用时多传 整数

@function convert-to-rem($value, $base-value: $rem-base)  {
    $value: strip-unit($value) / strip-unit($base-value) * 1rem;
    @if ($value == 0rem) {
        $value: 0; // 把 0 rem 转换为 0
    }
    @return $value;
}

data

拼接 HTML5 属性字符串

如果声明了命名空间,则属性名称以 data-$namespace 开头,否则直接以 data 开头

fd 在 _global.scss 文件中声明了 $namespace 变量 即 $namespace: false !default;

@function data($attr) {
    @if $namespace {
        @return ‘[data-‘ + $namespace + ‘-‘ + $attr + ‘]‘;
    }

    @return ‘[data-‘ + $attr + ‘]‘;
}

rem-calc

rem 换算 $rem-base 全局变量 默认为 16px 即浏览器默认字体大小

$values 可以是一个单独的字符串,也可以是一个列表

如果 $values 是一个单独的字符串,跟直接调用 convert-to-rem 没什么两样

@function rem-calc($values, $base-value: $rem-base) {
    $max: length($values);

    @if $max == 1 {
        @return convert-to-rem(nth($values, 1), $base-value);
    }

    $remValues: ();
    @for $i from 1 through $max {
        $remValues: append($remValues, convert-to-rem(nth($values, $i), $base-value));
    }
    @return $remValues;
}

emCalc em-calc

不再建议使用

// Deprecated: We‘ll drop support for this in 5.1.0, use rem-calc()
@function emCalc($values){
    @return rem-calc($values);
}

// Deprecated: We‘ll drop support for this in 5.1.0, use rem-calc()
@function em-calc($values){
    @return rem-calc($values);
}

转载请注明出处(带有 前端乱炖 字样)和本文的显式链接(http://www.html-js.com/article/2579),本站和作者保留随时要求删除文章的权利!
时间: 2024-10-23 16:51:10

Foundation SASS 阅读 | _function的相关文章

【转】从框架看PHP的五种境界及各自的薪资待遇

无意中看到这篇文章,有些触动,作为博客开篇,用来激励自己. 原文地址:点击打开 在撰写此文前首先必须申明的是本人不鄙视任何一种框架,也无意于挑起PHP框架间的战争,更没有贬低某个框架使用者的用意,本文纯粹个人的看法.你可以认为我无知也好,或者装逼也好,请不要试着在任何情况下,随便发起言语的攻击,这只是我个人的一些经验而已,你可以选择赞成或不赞成,也可以选择看与不看. 还有本人基本对这些框架中的大部分都用的时间比较长,绝对不是随便出个Hello World!就在这里评论,曾任某某底层本土公司的技术

2016年你应该学习的语言和框架

2015年,软件开发界发生了很多变化.有很多流行的新语言发布了,也有很多重要的框架和工具发布了新版本.下面有一个我们觉得最重要的简短清单,同时也有我们觉得值得你在2016年花时间精力去学习的新事物的一些建议. 大趋势 在过去的几年里,有一个越来越明显的趋势是web应用的商业逻辑逐步从后端转移到了前端,然后后端变得只需要处理简单的数据API.这就让前端开发框架的选择变得尤为重要了. 另外一个重要的改变是2015年发布的 Edge 浏览器.这是IE的替代品,拥有全新的界面和更好的性能.跟IE不一样的

只会CSS还不够,LESS、SASS、BootStrap、Foundation一网打尽!

有些人想学CSS,不知如何下手:有些人已经学会CSS的各种属性,却不知如何运用:有些人会平面设计,不知道如何与网页设计结合:有些人会HTML,就是学不会CSS.试问自己,图中的技术你都会了吗? 别总是怨天尤人了,<CSS高效开发实战-CSS 3.LESS.SASS.Bootstrap.Foundation>书写作的目的是要确保CSS不会成为开发过程或网站性能的瓶颈,确保读者可以运用一些工具.框架.预处理来提升开发效率和节约人力成本,确保所讲解的内容读者都能活学活用. 曾就职于CSDN和淘宝的一

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(1)设定背景图

技术的新发展,除计算机可以接入互联网之外,平板电脑.智能手机.智能电视等其他设备均可访问互联网.在多设备时代,构建多屏体验也不是听说的那么难. 但是这也增加了学习CSS的难度?不知道如何上手,只懂一点基础的CSS语法,在移动互联时代,难道我们就这样落伍了??好好学习吧,看完<CSS高效开发实战:CSS 3.LESS.SASS.Bootstrap.Foundation>,给自己的未来打气! 5.1  设定背景图的大小 在CSS 3出现之前,背景图片的尺寸是由图片的实际尺寸决定的.如果同样的图片要

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(5)使用放射渐变制作光影效果

阴影效果通常用来表现光线投射在物体上的感觉,如果想制作一个如图5.19所示的文字光影效果,就可以使用背景的线性渐变进行构建. 图5.19可以看到有类似光束照射文字的效果,很好地突出了文字.这实现起来很简单,只需要对文字居中,对背景元素设置从中心发散的放射渐变即可,代码如下: // HTML代码 <div class="box">赞</div> // CSS代码: .box{ width: 200px; height: 200px; font-size: 80px

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(2)CSS3利用图层叠加实现多背景

CSS 3允许设置多个背景图片,每个背景图片占一层,层的上下按照在CSS中书写的顺序来定,最先写的背景在最上层,每层图片定义使用英文逗号隔开. 例如下面的代码: background:url(http://dotnet.aspx.cc/Book/Images/CSS1_s.jpg) 0 0 no-repeat, url(http://dotnet.aspx.cc/Book/Images/CSS2_s.jpg) 200px 0 no-repeat, url("http://dotnet.aspx.

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(4)构造尺寸更灵活的背景

相比传统的图片背景来说,使用CSS构造背景色不仅可以降低网络传输的开销,更由于其尺寸的可控性受到开发者的青睐. 如设计师设计了一张背景图片作为标题背景,如图5.18所示.对于用电脑浏览网页的用户来说,标题基本不存在折行现象,布局也基本是固定宽度的,因此直接使用设计师给出的背景图即可.但是这个页面主要是在手机上显示,标题根据长度不同可能占1行,也可能占3行,如果采用图片就必须根据不同的情况放不同的背景图,实现起来很复杂. 图5.18  设计师给出的背景 好在这张背景图实际是从左到右由深紫蓝色渐变至

CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(3)线性渐变

线性渐变可以设置3个参数值:方向.起始颜色.结束颜色.最简单的模式只需要定义起始颜色和结束颜色,起点.终点和方向默认自元素的顶部到底部.下面举例说明: .test{ background:linear-gradient(red, blue); } 上述代码的效果如图5.9所示. 图5.9  最简单的线性渐变效果 如果要在一些旧版本的浏览器(除IE)下可以正常显示如图5.9的效果,则需要添加兼容代码: .test { background:-webkit-linear-gradient(red,

sass基础以及实战

为什么要在项目中使用Sass 听到最多的一句话就是我会CSS,我能使用CSS写项目,为什么我要花时间去学习Sass,一个自己并不了解的东西,一个对于自己来说是全新的东西?看到这样的问题,让我想起了2010年讨论CSS3的时候,很多同学同样有这样的凝问,CSS3真的会来?我真的要学习CSS3?现在,时间证明了一切.我还是想说,很多东西并不是需要的时候才去学,机会是给有准备的同学. 似乎有些离题了,我们还是回到今天的话题中来,为什么要在项目中使用Sass?在此,我仅想说说我个人的一些看法. 首先,C