scss是sass3.0之后的称呼

scss主要功能嵌套、变量、函数、混入

1.嵌套

  1. .box{
  2. width:300px;
  3. height:300px;
  4. p{
  5. color:red
  6. }
  7. &.desc{
  8. font-size:16px;
  9. }
  10. }

2.变量

  1. $red = #ff0000
  2. $fontSize = 16px
  3. .box{
  4. width:300px;
  5. height:300px;
  6. p{
  7. color:$red
  8. }
  9. &.desc{
  10. font-size:$fontSize;
  11. }
  12. }

注:sass、scss定义变量用$,less定义变量用@

3.函数

  1. @function doublePx($px){
  2. @return $px *2 + px
  3. }
  4. $titleSize:doublePx(16)

4.混入

  1. @mixin important-text {
  2. color: red;
  3. font-size: 25px;
  4. font-weight: bold;
  5. border: 1px solid blue;
  6. }
  7. //使用定义的mixin
  8. p {
  9. @include important-text
  10. }

适应移动端不同屏幕尺寸,通过计算html的font-size

  1. (function (doc, win) {
  2. var docEl = doc.documentElement,
  3. resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
  4. recalc = function () {
  5. var clientWidth = docEl.clientWidth;
  6. if (!clientWidth) return;
  7. docEl.style.fontSize = (clientWidth / 10) + 'px';
  8. };
  9. if (!doc.addEventListener) return;
  10. win.addEventListener(resizeEvt, recalc, false);
  11. doc.addEventListener('DOMContentLoaded', recalc, false);
  12. })(document, window);

基准数也就是html,的 font-size有关:设计稿大小为750,转变就是拿设计稿的实际距离除以基准数 $rem乘以基数
基准数$rem:75;
/除了字体或者特殊要求需要用到的/
@function px2rem($px){
@return ($px/$rem)*1rem;
}

举个例子:假如设计稿有一个100*100的图片。则在经过px2rem(100)转换后为1.333rem,由于根html的fontsize会随着设备大小变化,

  • 在iphone6/7/8中fontSize为37.5px,那么图片的显示大小为1.333*37.5。
  • 在iphone6/7/8 plus中的fontSize为41.4px,那么图片的显示大小为1.333*41.4。

常用的mixin方法

针对字体

  1. /*针对字体,根据屏幕的不同dpr设置不同的px,round为取整函数*/
  2. @mixin px2px($name, $px) {
  3. #{$name}: round($px / 2) * 1px;
  4. [data-dpr="2"] & {
  5. #{$name}: $px * 1px;
  6. }
  7. [data-dpr="2.5"] & {
  8. #{$name}: round($px * 2.5 / 2) * 1px;
  9. }
  10. [data-dpr="2.75"] & {
  11. #{$name}: round($px * 2.75 / 2) * 1px;
  12. }
  13. [data-dpr="3"] & {
  14. #{$name}: round($px / 2 * 3) * 1px
  15. }
  16. [data-dpr="4"] & {
  17. #{$name}: $px * 2px;
  18. }
  19. }
  20. /*使用该mixin */
  21. p{
  22. @include px2px(font-size,30)
  23. }

图片媒体查询

  1. @mixin retina($url) {
  2. background-image: url($url+ '.png');
  3. [data-dpr="2"] & {
  4. background-image: url($url+ '@2x.png');
  5. }
  6. [data-dpr="3"] & {
  7. background-image: url($url+ '@3x.png');
  8. }
  9. }

多行文字省略号

  1. @mixin clamp($num) {
  2. overflow: hidden;
  3. text-overflow: ellipsis;
  4. display: -webkit-box;
  5. -webkit-line-clamp: $num;
  6. -webkit-box-orient: vertical;
  7. }

background-size rem数值转换

  1. @mixin bg_size_rem($x:auto,$y:auto) {
  2. @if $x==auto{
  3. $x:auto;
  4. } @else {
  5. $x:px2rem($x);
  6. }
  7. @if $y==auto{
  8. $y:auto;
  9. } @else {
  10. $y:px2rem($y);
  11. }
  12. background-size: ($x, $y);
  13. }

background-size px数值转换

  1. @mixin bg_size_px($x:auto,$y:auto) {
  2. @if $x==auto{
  3. $x:auto;
  4. } @else {
  5. $x:px2rem($x);
  6. }
  7. @if $y==auto{
  8. $y:auto;
  9. } @else {
  10. $y:px2rem($y);
  11. }
  12. background-size: ($x, $y);
  13. }