百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

WEB:讲清楚CSS、Less、Sass、Scss

zhezhongyun 2024-12-01 19:22 24 浏览

CSS作为WEB前端开发技术知识点中重要的一项,在开发WEB应用中举足轻重。如下图所示,相关的辅助生成技术有Less、Sasss、Scss。本文分别介绍下。

CSS简介

CSS(Cascading Style Sheets,层叠样式表)是一种用于描述网页文档的样式和布局的样式表语言。它与 HTML 和 JavaScript 一起构成了现代网页的基础技术栈。CSS 的主要作用是控制网页的外观和格式,包括颜色、字体、间距、布局等。其主要特点如下:

1. 样式与内容分离:CSS 允许将样式与 HTML 内容分离,使得网页的结构和外观可以独立管理。这样可以提高代码的可维护性和可读性。如下面的css代码,可以用来定义html文件中h1和p标签的样式。

/* CSS */
h1 {
    color: blue; /* 属性: 值 */
    font-size: 24px;
}

p {
    margin: 10px; /* 设置段落的外边距 */
    line-height: 1.5; /* 设置行高 */
}

2. 层叠性:CSS 的“层叠”特性意味着多个样式可以应用于同一个元素,浏览器会根据优先级规则决定最终应用的样式。优先级规则包括选择器的特异性、样式的来源(内联、内部或外部样式表)以及样式的顺序。如下分别给出内联、内部、外部样式表的示例:

/*内联样式表:可以直接在html标签内通过style属性给出*/

<h1 style="color: blue;">Hello, World!</h1>

/*内部样式表:可以直接在html中head-style标签内给出*/

<head>

<style>

h1 {

color: blue;

}

</style>

</head>

/*外部样式表:可以直接在html中使用link标签引用*/

<head>

<link rel="stylesheet" href="styles.css">

</head>

3. 响应式设计:CSS 支持媒体查询,使得网页可以根据不同的设备和屏幕尺寸自动调整布局和样式,从而实现响应式设计。如下是一个常用的响应式布局:

/* 默认样式 */
body {
    font-size: 16px;
}

/* 针对屏幕宽度小于 600px 的设备 */
@media (max-width: 600px) {
    body {
        font-size: 14px; /* 在小屏幕上减小字体大小 */
    }
}

/* 针对屏幕宽度大于 600px 的设备 */
@media (min-width: 601px) and (max-width: 1200px) {
    body {
        font-size: 18px; /* 在中等屏幕上增大字体大小 */
    }
}

/* 针对屏幕宽度大于 1200px 的设备 */
@media (min-width: 1201px) {
    body {
        font-size: 20px; /* 在大屏幕上进一步增大字体大小 */
    }
}

4. 丰富的选择器:CSS 提供了多种选择器,可以根据元素的类型、类、ID、属性等选择特定的 HTML 元素进行样式设置。如下是一些示例:

/**通用选择器(*):选择所有元素。*/
   * {
       margin: 0;
       padding: 0;
   }

/**元素选择器:选择特定类型的元素,例如所有的`<p>`元素。*/
   p {
       color: blue;
   }

/**类选择器(.classname):选择具有特定类的元素。*/
   .highlight {
       background-color: yellow;
   }
/**ID选择器(#idname):选择具有特定ID的元素。**/
   #header {
       font-size: 24px;
   }

/**属性选择器:选择具有特定属性的元素。**/
   input[type="text"] {
       border: 1px solid #ccc;
   }
/**后代选择器(ancestor descendant):选择某个元素的所有后代元素。*/
     div p {
       color: red;
   }

/**子选择器(parent > child):选择某个元素的直接子元素。**/
   ul > li {
       list-style-type: none;
   }
/**相邻兄弟选择器(previous + next):选择紧接在某个元素后的兄弟元素。*/
   h1 + p {
       margin-top: 0;
   }
/**一般兄弟选择器(previous ~ siblings):选择某个元素之后的所有兄弟元素。*/
   h1 ~ p {
       color: green;
   }
/**伪类选择器:选择特定状态的元素,例如:hover。*/
    a:hover {
        text-decoration: underline;
    }
/**伪元素选择器:选择元素的特定部分,例如::before和::after。*/
    p::first-line {
        font-weight: bold;
    }

5. 动画与过渡:CSS 允许创建简单的动画和过渡效果,增强用户体验。如下面代码所示

/*CSS过渡(Transitions)的基本语法*/
.selector {
    transition: property duration timing-function delay;
}
/**
	property:要过渡的CSS属性(例如 `background-color`、`width` 等)。
	duration:过渡持续的时间(例如 `0.5s`)。
	timing-function:过渡的速度曲线(例如 `ease`、`linear`、`ease-in`、`ease-out` 等)。
	delay:过渡开始前的延迟时间(可选)。
*/
/*示例:
当鼠标悬停在 `.box` 上时,背景颜色将从蓝色变为红色,并且宽度将从100px变为200px,
整个过程持续0.5秒。
*/

.box {
    width: 100px;
    height: 100px;
    background-color: blue;
    transition: background-color 0.5s ease, width 0.5s ease;
}

.box:hover {
    background-color: red;
    width: 200px;
}
/*CSS动画(Animations)的基本语法:**/
@keyframes animation-name {
    from {
        /* 初始状态 */
    }
    to {
        /* 结束状态 */
    }
}

.selector {
    animation: animation-name duration timing-function delay iteration-count direction;
}
/*
	animation-name:定义的动画名称。
	duration:动画持续的时间(例如 `2s`)。
	timing-function:动画的速度曲线(例如 `ease`、`linear` 等)。
	delay:动画开始前的延迟时间(可选)。
	iteration-count:动画的循环次数(例如 `infinite` 表示无限循环)。
	direction:动画的方向(例如 `normal`、`reverse`、`alternate`)。
*/
/*示例:
`.box` 元素将沿着X轴平滑地移动100px,动画持续2秒,并且在每次完成后反向移动。
*/
@keyframes slide {
    from {
        transform: translateX(0);
    }
    to {
        transform: translateX(100px);
    }
}

.box {
    width: 100px;
    height: 100px;
    background-color: blue;
    animation: slide 2s ease-in-out infinite alternate;
}

Less

Less是一个工具用来生成浏览器可以识别的CSS。提供了变量、函数、嵌套等语法可以帮助更方便的编写样式表。


Less要求先按照其语法写一个.less文件,然后使用less编译器,将less文件编译为.css文件。然后再在页面中应用。下面是一个实例:

/*编辑less文件*/
@primary-color: #4CAF50;
@font-size: 14px;

.button {
    color: @primary-color;
    font-size: @font-size;
}
/*编译成css文件*/
lessc .\test\less\demo.less .\test\less\demo.css 
/*.css文件如下*/
.button {
  color: #4CAF50;
  font-size: 14px;
}

Saas

Sass也是一个用来生成css的工具,除了有less的功能之外,还提供了继承的能力。

Sass一样要求先写一个.sass的文件,然后使用sass编译成css。如下示例:

//  先编辑一个sass文件
/*使用变量*/
$primary-color: #4CAF50
$font-size: 14px

.button
  color: $primary-color
  font-size: $font-size
 
/* 嵌套规则*/
.nav
  ul
    list-style: none
  li
    display: inline-block

    a
      text-decoration: none
      color: $primary-color

/*混入*/
=rounded-corner($radius: 5px)
  border-radius: $radius

.box
  +rounded-corner
  border: 1px solid #ccc

/*继承*/
.button
  padding: 10px 20px
  background-color: $primary-color

.success-button
  @extend .button
  background-color: scale($primary-color, 10%)
  color: adjust($primary-color,30%)

// 然后使用sass编译
sass  .\test\sass\demo.sass .\test\sass\demo.css    
// 得到如下文件
@charset "UTF-8";
/*使用变量*/
.button, .success-button {
  color: #4CAF50;
  font-size: 14px;
}

/* 嵌套规则*/
.nav ul {
  list-style: none;
}
.nav li {
  display: inline-block;
}
.nav li a {
  text-decoration: none;
  color: #4CAF50;
}

/*混入*/
.box {
  border-radius: 5px;
  border: 1px solid #ccc;
}

/*继承*/
.button, .success-button {
  padding: 10px 20px;
  background-color: #4CAF50;
}

.success-button {
  background-color: scale(#4CAF50, 10%);
  color: adjust(#4CAF50, 30%);
}

/*# sourceMappingURL=demo.css.map */

Scss

Scss与Sass本质是一个工具,但是语法不同(作者建议使用scss),Scss兼容css语法。如下示例:

// var.scss
$primary-color: #4CAF50;
$font-size: 14px;

.button {
    color: $primary-color;
    font-size: $font-size;
}
// mixin.scss

// nest.scss
.nav {
    ul {
        list-style: none;
    }
    li {
        display: inline-block;

        a {
            text-decoration: none;
            color: $primary-color;
        }
    }
}
// extend.scss
.button {
    padding: 10px 20px;
    background-color: $primary-color;
}

.success-button {
    @extend .button;
    background-color: darken($primary-color, 10%);
}
// import.scss
@import "var";
@import "mixin";
@import "nest";
@import "extend";

.button {
    @include rounded-corner;
    background-color: $primary-color;
}
// 编译 import.scss
sass  .\test\scss\import.scss .\test\scss\import.css
// 得到import.css
.button, .success-button {
  color: #4CAF50;
  font-size: 14px;
}

.box {
  border-radius: 5px;
  border: 1px solid #ccc;
}

.nav ul {
  list-style: none;
}
.nav li {
  display: inline-block;
}
.nav li a {
  text-decoration: none;
  color: #4CAF50;
}

.button, .success-button {
  padding: 10px 20px;
  background-color: #4CAF50;
}

.success-button {
  background-color: rgb(60.5577689243, 139.4422310757, 63.7450199203);
}

.button, .success-button {
  border-radius: 5px;
  background-color: #4CAF50;
}

// function.scss

@use 'var';
// 定义一个函数
@function lighten-color($color, $amount) {
  @return scale($color, $amount);
}

// 定义主颜色

// 使用函数
.button {
  background-color: var.$primary-color;
  color: lighten-color(var.$primary-color, 20%); // 使用自定义函数
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background-color: lighten-color(var.$primary-color, 10%); // 在悬停时使用函数
  }
}

sass当前的主要版本是dart实现的1.80.3 compiled with dart2js 3.5.4,其他版本如node.sass已经停止更新。新版本有一些变更,import指令被废弃,对应引入了use和forward指令,用来更好的管理文件模块。forward用来将多个文件合并为一个模板,便于使用者统一使用一个模板引用其他的变量等。下面是use的实例:

// forward.scss
@forward 'var';
@forward 'nest';
@forward 'mixin';
@forward 'extend';
@forward 'function';

//use.scss
@use 'forward';


a{
  @extend .button;
  color: blue;
  background-color: forward.$primary-color;
  @include forward.rounded-corner;
}

div{
  background-color: forward.lighten-color(forward.$primary-color, 10%);
}


总结

除了Saas、Scss、Less之外还有其他辅助生成CSS的工具。大体看Sass、Scss热度最高。

这些辅助工具的工作模式基本都是这样的:

  1. 按照特定的语法编辑一个文件,例如.sass .scss .less
  2. 使用对应的编译器编译此文件,如sass 1.sass 1.css
  3. 将生成的css文件用到web页面上。 <link rel="stylesheet" href="styles.css">

scss更优秀,可考虑直接使用SCSS,其对模块的管理更加方便。而且能直接兼容css语法。

参考资料:

  1. CSS2 https://www.w3.org/TR/CSS22/
  2. CSS3 https://www.w3.org/TR/css-syntax-3/
  3. 教程 https://www.w3schools.com/css/default.asp
  4. Less https://lesscss.org/
  5. Sass/Scss https://sass-lang.com/guide
  6. 教程 https://www.w3schools.com/sass/default.asp

相关推荐

JPA实体类注解,看这篇就全会了

基本注解@Entity标注于实体类声明语句之前,指出该Java类为实体类,将映射到指定的数据库表。name(可选):实体名称。缺省为实体类的非限定名称。该名称用于引用查询中的实体。不与@Tab...

Dify教程02 - Dify+Deepseek零代码赋能,普通人也能开发AI应用

开始今天的教程之前,先解决昨天遇到的一个问题,docker安装Dify的时候有个报错,进入Dify面板的时候会出现“InternalServerError”的提示,log日志报错:S3_USE_A...

用离散标记重塑人体姿态:VQ-VAE实现关键点组合关系编码

在人体姿态估计领域,传统方法通常将关键点作为基本处理单元,这些关键点在人体骨架结构上代表关节位置(如肘部、膝盖和头部)的空间坐标。现有模型对这些关键点的预测主要采用两种范式:直接通过坐标回归或间接通过...

B 客户端流RPC (clientstream Client Stream)

客户端编写一系列消息并将其发送到服务器,同样使用提供的流。一旦客户端写完消息,它就等待服务器读取消息并返回响应gRPC再次保证了单个RPC调用中的消息排序在客户端流RPC模式中,客户端会发送多个请...

我的模型我做主02——训练自己的大模型:简易入门指南

模型训练往往需要较高的配置,为了满足友友们的好奇心,这里我们不要内存,不要gpu,用最简单的方式,让大家感受一下什么是模型训练。基于你的硬件配置,我们可以设计一个完全在CPU上运行的简易模型训练方案。...

开源项目MessageNest打造个性化消息推送平台多种通知方式

今天介绍一个开源项目,MessageNest-可以打造个性化消息推送平台,整合邮件、钉钉、企业微信等多种通知方式。定制你的消息,让通知方式更灵活多样。开源地址:https://github.c...

使用投机规则API加快页面加载速度

当今的网络用户要求快速导航,从一个页面移动到另一个页面时应尽量减少延迟。投机规则应用程序接口(SpeculationRulesAPI)的出现改变了网络应用程序接口(WebAPI)领域的游戏规则。...

JSONP安全攻防技术

关于JSONPJSONP全称是JSONwithPadding,是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。如果...

大数据Doris(六):编译 Doris遇到的问题

编译Doris遇到的问题一、js_generator.cc:(.text+0xfc3c):undefinedreferenceto`well_known_types_js’查找Doris...

网页内嵌PDF获取的办法

最近女王大人为了通过某认证考试,交了2000RMB,官方居然没有给线下教材资料,直接给的是在线教材,教材是PDF的但是是内嵌在网页内,可惜却没有给具体的PDF地址,无法下载,看到女王大人一点点的截图保...

印度女孩被邻居家客人性骚扰,父亲上门警告,反被围殴致死

微信的规则进行了调整希望大家看完故事多点“在看”,喜欢的话也点个分享和赞这样事儿君的推送才能继续出现在你的订阅列表里才能继续跟大家分享每个开怀大笑或拍案惊奇的好故事啦~话说只要稍微关注新闻的人,应该...

下周重要财经数据日程一览 (1229-0103)

下周焦点全球制造业PMI美国消费者信心指数美国首申失业救济人数值得注意的是,下周一希腊还将举行第三轮总统选举需要谷歌日历同步及部分智能手机(安卓,iPhone)同步日历功能的朋友请点击此链接,数据公布...

PyTorch 深度学习实战(38):注意力机制全面解析

在上一篇文章中,我们探讨了分布式训练实战。本文将深入解析注意力机制的完整发展历程,从最初的Seq2Seq模型到革命性的Transformer架构。我们将使用PyTorch实现2个关键阶段的注意力机制变...

聊聊Spring AI的EmbeddingModel

序本文主要研究一下SpringAI的EmbeddingModelEmbeddingModelspring-ai-core/src/main/java/org/springframework/ai/e...

前端分享-少年了解过iframe么

iframe就像是HTML的「内嵌画布」,允许在页面中加载独立网页,如同在画布上叠加另一幅动态画卷。核心特性包括:独立上下文:每个iframe都拥有独立的DOM/CSS/JS环境(类似浏...