CSS进阶和SASS

news2025/1/5 14:01:16

目录

一、CSS进阶

1.1、CSS变量

1.2、CSS属性值的计算过程

1.3、做杯咖啡

1.4、下划线动画

1.5、CSS中的混合模式(Blending)

二、SASS

2.1、Sass的颜色函数

2.2、Sass的扩展(@extend)和占位符(%)、混合(Mixin)

2.3、Sass的数学函数

2.4、Sass的模块化开发

2.5、Sass实现主题切换

2.6、Sass实现文字替换

2.7、Sass实现星空效果

2.8、Sass简化媒体查询

2.9、自动注入Less全局变量

2.10、比较Sass和Less

一、CSS进阶

1.1、CSS变量

基础应用:父子元素的css属性存在一定的关系

  <body>
    <div class="container">
      <div class="item"></div>
    </div>
  </body>
    <style>
      /* :root相当于html元素 */
      :root {
        --size: 250px;
      }
      .container {
        --gap: calc(var(--size) / 10);
        width: var(--size);
        height: var(--size);
        background-color: red;
        padding: var(--gap); /* 25px */
        margin: var(--gap);
      }
      .item {
        width: calc(var(--size) / 2); /* 125px */
        height: calc(var(--size) / 2);
        background-color: yellow;
      }
    </style>

小球从左到右滚动:

    <style>
      .container {
        width: 40%;
        height:200px;
        border: 3px solid black;
        position: relative;
        margin: 0 auto;
      }
      .item {
        width: 100px;
        height: 100px;
        border-radius: 50%;
        background-color: red;
        left: 0;
        top: 30px;
        position: absolute;
        animation: move 4s linear infinite;
      }
      @keyframes move {
        50% {
          transform: translateX(calc(var(--w) - 100%));
        }
      }
    </style>
  <body>
    <script>
      const container = document.querySelector(".container");
      // 相当于 <div class="container" style="--w: 758px;">
      const w = container.clientWidth;
      container.style.setProperty("--w", w + "px");
    </script>
  </body>

1.2、CSS属性值的计算过程

先确定声明值—层叠(权重)—继承—使用默认值—最后显示到页面

1.3、做杯咖啡

 杯身path图形: SvgPathEditor

    <style>
      body {
        background-color: #cebca6;
      }
      .cup {
        width: 160px;
        height: 162px;
        margin: 300px auto;
        position: relative;
      }
      /* 杯口 */
      .cup::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 20px;
        background-color: rgba(247, 247, 247, 0.5);
        left: 0;
        top: -10px;
        border-radius: 50%;
      }
      /* 杯身 */
      .cup-body {
        height: 100%;
        background-color: rgba(247, 247, 247, 0.9);
        clip-path: path(
          "m 0 0 q 4.59 145.8 34.425 155.52 c 29.835 8.1 68.85 8.1 96.39 0 q 29.835 -9.72 29.835 -155.52 C 143 11 16 13 0 0 Z"
        );
        display: flex;
        flex-direction: column-reverse;
      }
      .layer {
        text-align: center;
        height: 50px;
        border-radius: 80px/10px;
        position: relative;
      }
      /* 每一层的水面 */
      .layer::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 20px;
        background: inherit;
        top: 0;
        left: 0;
        border-radius: 50%;
      }
      .layer:nth-child(n + 2) {
        margin-bottom: -20px;
      }
      .espresso {
        background-color: rgba(75, 49, 31, 0.8);
      }
      .whiskey {
        background-color: rgba(207, 129, 39, 0.8);
      }
    </style>
  <body>
    <div class="cup">
      <div class="cup-body">
        <div class="layer espresso">espresso</div>
        <div class="layer whiskey">whiskey</div>
      </div>
    </div>
  </body>

1.4、下划线动画

    <style>
      .title span {
        line-height: 2;
        background: linear-gradient(to right, #ff5f57, #28c840) no-repeat right
          bottom;
        background-size: 0px 2px;
        transition:background-size 1s;
      }
      .title span:hover {
        background-position: left bottom;
        background-size: 100% 2px;
      }
    </style>
  <body>
    <div class="title" style="width: 400px;">
      <span>
        Lorem is Value Lorem is Value Lorem is Value Lorem is Value Lorem is
        Value Lorem is Value Lorem is Value Lorem is Value Lorem is Value Lorem
        is Value Lorem is Value
      </span>
    </div>
  </body>

1.5、CSS中的混合模式(Blending)

    <style>
      .earth {
        width: 740px;
        height: 486px;
        background: url(./green.png) blue;
        /* 图像背景色和元素背景色混合 :此时green.png是蓝色的*/
        background-blend-mode: lighten;
        position: relative;
      }
      .mix {
        width: 540px;
        height: 270px;
        position: absolute;
        left: 50%;
        top: 40%;
        transform: translate(-50%,-50%);
        background: url(./dance.gif);
        /* 使用 mix-blend-mode 生成对比效果 */
        mix-blend-mode: multiply;
        filter: contrast(3);
      }
    </style>
  <body>
    <div class="earth">
      <div class="mix"></div>
    </div>
  </body>

二、SASS

Sass英文官网地址:Sass: Syntactically Awesome Style Sheets

Sass中文官网地址:Sass世界上最成熟、稳定和强大的CSS扩展语言 | Sass中文网
Less英文官网地址:Getting started | Less.js
Less中文官网地址:Less 快速入门 | Less.js 中文文档 - Less 中文网

2.1、Sass的颜色函数

  <body>
   <button class="btn type-1">按钮</button>
   <button class="btn type-2">按钮</button>
   <button class="btn type-3">按钮</button>
   <button class="btn type-4" disabled>按钮</button>
   <button class="btn type-5">按钮</button>
  </body>
$btnColors: #409eff, #67c23a, #8b590f, #f54343, #6c6d71;
@for $i from 1 through length($btnColors) {
  .btn.type-#{$i} {
    // 获取 $btnColors 列表中第 i 个颜色值
    $color: nth($btnColors, $i);
    background-color: $color;
    color: #fff;
    &:hover {
      background-color: lighten($color, 10%);
    }
    &:active {
      background-color: darken($color, 10%);
    }
    &:disabled {
      background-color: lighten($color, 20%);
      color: white;
    }
  }
}

2.2、Sass的扩展(@extend)和占位符(%)、混合(Mixin)

使用场景:一个选择器要继承另一个选择器的所有样式,需要复用样式,一般和占位符【不会直接编译成 CSS 中的选择器】一起使用。

使用场景:

(1)、基本语法:使用 @mixin 定义样式,然后通过 @include 来调用这个混合;

(2)、接收参数,并为参数设置默认值:在调用时可以部分传递 / 全部传递;

(3)、包含内容(@content):传递块级内容;

混合与继承(@extend)的区别

  • @extend 用于让一个选择器继承另一个选择器的样式。

     会合并多个选择器、可能导致选择器组合过多,生成复杂的 CSS。
  • @mixin 用于定义一组样式,并允许在多个地方重复使用这些样式。

    可以带有参数,灵活性高。每次调用混合时,都会生成独立的样式规则。

2.3、Sass的数学函数

@use "sass:math";
.board {
  position: relative;
  width: 200px;
  height: 200px;
  border: 40px solid #3498db;
  border-radius: 50%;
  margin: 50px auto;
  display: flex;
  justify-content: center;
  align-items: center;
}

.menu-item {
  position: absolute;
  width: 40px;
  height: 40px;
  background-color: #2ecc71;
  border-radius: 50%;
  text-align: center;
  line-height: 40px;
  color: white;
  font-size: 20px;
  opacity: 0;
  transition: .2s;
}
$r: 120px;
$n: 6;
$step: 360deg / $n;
@for $i from 1 through $n {
  .board:hover .menu-item:nth-child(#{$i}) {
    $deg: $step * ($i - 1);
    $x: $r * math.sin($deg);
    $y: -$r * math.cos($deg);
    transform: translate($x, $y);
    opacity: 1;
  }
}

2.4、Sass的模块化开发

@import './conmon.scss';
@import './conmon2.scss';
// 引入多个模块,出现同名变量,以下面的为准,出现命名污染
@debug conmon.$color;//输出 yellow
@use './conmon.scss';
@use './conmon2.scss';
@debug conmon.$color;//输出 green
@debug conmon2.$color;//输出 yellow
// =====加上命名空间=====
@use './conmon.scss' as a;
@use './conmon2.scss' as b;
@debug a.$color;//输出 green
@debug b.$color;//输出 yellow

对比@use@import 

特性@import@use
作用域导入的内容暴露到全局作用域导入的内容会被限定在命名空间内,避免全局污染
重复导入多次导入同一文件会重复执行同一文件只会被加载一次
变量和混合宏直接暴露到全局,同名变量污染变量、函数、混合宏通过命名空间as访问
性能导入的文件每次都会重新解析只会加载一次,减少冗余解析

2.5、Sass实现主题切换

$themes: (
  light: (
    bgColor: #fff,
    textColor: #000,
  ),
  dark: (
    bgColor: #000,
    textColor: #fff,
  ),
);
$curTheme: "light";
@mixin useTheme() {
  @each $themeName, $themeMap in $themes {
    html[data-theme="#{$themeName}"] & {
      @content($themeMap);
    }
  }
}
@function getVar($themeMap, $paramName) {
  @return map-get($themeMap, $paramName);
}
.item {
  width: 100px;
  height: 100px;
  @include useTheme() using ($themeMap) {
    background: getVar($themeMap, 'bgColor');
    color: getVar($themeMap, 'textColor');
    border-color: getVar($themeMap, 'textColor');
  };
}

2.6、Sass实现文字替换

场景:文字内容根据页面大小进行响应式变化

2.7、Sass实现星空效果

效果:漫天星辰近大远小、每一层以不同流速向上划过

body {
  background-color: black;
}
@function getShadows($n) {
  $shadows: "";
  @for $i from 1 through $n {
    //为每个阴影生成随机的 vw 和 vh 值,确保字符串拼接正确
    $shadow: "#{random(100)}vw #{random(100)}vh #fff";
    //如果是第一次添加阴影,不需要逗号
    @if $i == 1 {
      $shadows: $shadow;
    } @else {
      $shadows: #{$shadows}, #{$shadow};
    }
  }
  @return $shadows;
}
$duration: 500s;
$count: 1000;
@for $i from 1 through 5 {
  $duration: $duration/2;
  $count:floor($count/2);
  .layer#{$i} {
    $size: #{$i}px;
    position: fixed;
    width: $size;
    height: $size;
    border-radius: 50%;
    left: 0;
    top: 0;
    background-color: red;
    box-shadow: getShadows($count);
    animation: moveUp $duration linear infinite;
    &::after {
      content: "";
      position: fixed;
      left: 0;
      top: 100vh;
      border-radius: inherit;
      width: inherit;
      height: inherit;
      box-shadow: inherit;
    }
  }
}
@keyframes moveUp {
  to {
    transform: translateY(-100vh);
  }
}

2.8、Sass简化媒体查询

$breakpoints: (
  "phone": (320px, 480px,),
  "pad": (481px,768px,),
  "notebook": (769px,1024px,),
  "desktop": (1024px,1200px,),
  "tv": 1201px,
); //映射,可以避免多if分支
@mixin responseTo($breakname) {
  $bp: map-get($breakpoints, $breakname);
  @if type-of($bp)=="list" {
    @media (min-width: nth($bp, 1)) and (max-width: nth($bp, 2)) {
      @content;
    }
  }
  @else {
    @media (min-width: $bp) {
      @content;
    }
  }
}
.header {
  width: 100%;
  background-color: yellow;
  @include responseTo("phone") {
    height: 50px;
  }
  @include responseTo("pad") {
    height: 60px;
  }
  @include responseTo("notebook") {
    height: 70px;
  }
  @include responseTo("desktop") {
    height: 80px;
  }
  @include responseTo("tv") {
    height: 90px;
  }
}

2.9、自动注入Less全局变量

每个单页面都要使用.less里的变量或者公共部分,下面这样每次都要引入

<style lang="less" scoped>
@import "./var.less";
.less-div{
  color: @color;
}
</style>

简便写法就是直接在vue.config.js里直接引入

module.exports = {  
css: {
    loaderOptions: {
      less:{
        additionalData:`@import "~@/var.less"`
        // 或者
        additionalData:`@import "../../views/some-folder/var.less";`
      },
    }
  }
}

vue3的vue.config.js:

export default defineConfig({
  plugins: [vue()],
  css: {
    preprocessorOptions: {
      less: {
        additionalData: `
          @import "@/assets/styles/variables.less";
          @import "@/assets/styles/mixins.less";
        `
      }
    }
  }
});

2.10、比较Sass和Less

特性SassLess
语法Sass(缩进式)和 SCSS(与 CSS 类似)类似 CSS 的语法,完全基于 CSS
变量使用 $ 符号定义变量使用 @ 符号定义变量
混合支持混合,可以接收参数支持混合,支持动态参数
嵌套规则支持嵌套规则,嵌套可以嵌套任意层支持嵌套规则,最多支持 4 层嵌套
继承使用 @extend 来继承样式使用 & 来模拟继承样式或组合选择器
运算支持运算(如加减乘除、比较等)支持运算(如加减乘除、比较等)
功能丰富功能丰富,适用于大项目,支持Sass模块化、函数等功能简单,但对于中小型项目非常合适
生态与工具社区和文档支持丰富较少,但也有一定的使用者和工具支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习

2.最大子数组和 问题描述 代码解答 #include<bits/stdc.h> using namespace std; const int N1005; int sum,n,a[N]; int res-1;int result(){for(int i0;i<n;i){if(sum<0) suma[i];else{suma[i];resmax(res,sum);}}return res; } int main(){cin>>n;for(i…

纵览!报表控件 Stimulsoft Reports、Dashboards 和 Forms 2025.1 新版本发布!

Stimulsoft 2025.1 新版发布&#xff0c;旨在增强您创建报告、仪表板和 PDF 表单的体验&#xff01;此最新版本为您带来了许多改进和新功能&#xff0c;使数据处理更加高效和用户友好。亮点包括对 .NET 9 的支持、Microsoft Analysis Services 的新数据适配器、发布向导中适用于…

Javascript-web API-day04

文章目录 01-实例化日期对象02-常见的日期对象方法03-年月日案例04-年月日简化05-得到时间戳06-倒计时07-关闭节点08-子节点09-增加节点10-克隆节点11-删除节点12-m端时间13-(swiper插件的使用)移动端轮播图游乐园项目 学成在线重构 01-实例化日期对象 <!DOCTYPE html> …

Formality:匹配(match)是如何进行的?

相关阅读Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 匹配点、对比点和逻辑锥 匹配指的是Formality工具尝试将参考设计中的每个匹配点与实现设计中的相应匹配点进行配对&#xff0c;这里的匹配点包括对比点(Compare Point…

浅谈电力监控系统在厂房电力工程中的设计与应用

安科瑞汪洋/汪小姐/汪女士---Acrelwy 摘要 &#xff1a;电力监控系统在厂房电力工程中的应用&#xff0c;稳步提升了电力系统管理的智能化、信息化水平&#xff0c;确保电力资源的合理化应用&#xff0c;满足工业生产的基本需求。为确保电力监控系统与厂房电力工程的有效结合&…

AIGC生图实战技巧分享

目录 引言 &#x1f343;安装与配置代码 &#x1f343;数据处理代码 &#x1f343;生图请求代码 引言 本文展示了 AIGC 生图相关的代码示例&#xff0c;包括安装与配置、数据处理以及生图请求等不同阶段的代码&#xff0c;清晰呈现了整个技术实现过程中代码层面的操作要点和…

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…

akamai3.0反爬教程逆向分析9个视频汇总

目录 一、akamai2.0文章二、akamai3.0每月疑似改版点二、9个视频汇总如下 一、akamai2.0文章 文章1cookie反爬之akamai_2.0-上文章2cookie反爬之akamai_2.0-上文章3cookie反爬之akamai_2.0-上文章中akamai2.0对应调试html与js文件 二、akamai3.0每月疑似改版点 详细文字与2.…

解决chatgpt(mac app登陆)出现报错:获取您的 SSO 信息时出错

由于我们是app登陆的&#xff0c;不能直接修改网站的链接&#xff0c;将 URL 的域名部分从 auth.openai.com 变更为 auth0.openai.com&#xff0c;然后加载新的地址&#xff0c;这时候应该就可以正常登录或注册了。 所以我们使用邮箱先载入auth0的地址&#xff0c;再更改自己的…

基于Springboot + vue实现的高校办公室行政事务管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

DeepSeek-VL2

《DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding》是 DeepSeek-AI 团队发布的关于视觉语言模型 DeepSeek-VL2 的论文&#xff0c;以下是对该论文的详细介绍&#xff1a; 研究背景与动机 多模态理解的重要性&#xff1a;在当…

【第二部分--Python之基础】03 容器类型的数据

Python内置的数据类型如序列&#xff08;列表、元组等&#xff09;、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列&#xff08;sequence&#xff09;是一种可迭代的、元素有序的容器类型的数据。 序列包括列表&#xff08;list&#xff…

大型概念模型:在句子表示空间中的语言建模

《Large Concept Models: Language Modeling in a Sentence Representation Space》这篇论文介绍了一种新的语言模型方法&#xff0c;它在句子表示空间中进行建模。该方法旨在改进传统语言模型的局限性&#xff0c;通过捕捉更高级别的语义信息来提高自然语言处理任务的表现。 模…

日期时间选择(设置禁用状态)

目录 1.element文档需要 2.禁用所有过去的时间 3.设置指定日期的禁用时间 <template><div class"block"><span class"demonstration">起始日期时刻为 12:00:00</span><el-date-pickerv-model"value1"type"dat…

Mac 安装Mysql启动Mysql以及数据库的常规操作

Mac 安装Mysql启动Mysql以及数据库的常规操作 一、mysql的安装 1、登录官方网站:dev.mysql.com/downloads/mysql/ 二、查看系统架构 uname -m 在MAC中&#xff1a; 如果输出结果是 x86_64&#xff0c;则表示你的系统是 x86-64 架构。 如果输出结果是 arm64&#xff0c;则表示…

2011-2020年各省粗离婚率数据

2011-2020年各省粗离婚率数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;地区、年份、粗离婚率 4、范围&#xff1a;31省 5、指标解释&#xff1a;粗离婚率指某地区当年离婚对数占该地区年平均人口的比重。计算公式为&#xff1a…

【Cocos TypeScript 零基础 2.1】

目录 cocos常识新建动画添加组件 cocos 下载就不讲了,多的很 cocos 界面设置中文 新建一个2D项目 SIKI_学院_点击跳转 常识 竖屏 宽720 高1280 如果背景图确定是竖屏也可以根据背景图片大小来确定项目宽高 鼠标功能 左键 选中 滚轮 放大缩小 右键 移动视角位置 场景 双击…

UE蓝图战利品掉落动画

战利品掉落动画&#xff0c;其实就是添加个冲量 add impulse 什么是冲量&#xff1f; 冲量 &#xff08;impulse&#xff09;是作用在物体上的力 在 时间上的累积效果

Transformer从零详细解读——DASOU讲AI

1. 从全局角度概括Transformer transformer的任务是什么&#xff1f; 进一步细化 进一步细化&#xff0c;注意&#xff1a;每个encoder结构相同&#xff0c;参数不同&#xff1b;decoder同理 原论文中的图如下&#xff1a; 2.Encoder 2.1 输入部分 &#xff08;1&#xff09…