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

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

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

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

相关推荐

JavaScript做个贪吃蛇小游戏(过关-加速),无需网络直接玩。

JavaScript做个贪吃蛇小游戏(过关-则加速)在浏览器打开文件,无需网络直接玩。<!DOCTYPEhtml><htmllang="en"><...

大模型部署加速方法简单总结(大模型 ai)

以下对大模型部署、压缩、加速的方法做一个简单总结,为后续需要备查。llama.cppGithub:https://github.com/ggerganov/llama.cppLLaMA.cpp项...

安徽医大第一医院应用VitaFlow Liberty(R)Flex为患者焕然一“心”

近日,在安徽医科大学第一附属医院心血管内科负责人暨北京安贞医院安徽医院业务副院长喻荣辉教授的鼎力支持和卓越带领下,凭借着先进的VitaFlowLiberty(R)Flex经导管主动脉瓣可回收可...

300 多行代码搞定微信 8.0 的「炸」「裂」特效!

微信8.0更新的一大特色就是支持动画表情,如果发送的消息只有一个内置的表情图标,这个表情会有一段简单的动画,一些特殊的表情还有全屏特效,例如烟花表情有全屏放烟花的特效,炸弹表情有爆炸动画并且消息和...

让div填充屏幕剩余高度的方法(div填充20px)

技术背景在前端开发中,经常会遇到需要让某个div元素填充屏幕剩余高度的需求,比如创建具有固定头部和底部,中间内容区域自适应填充剩余空间的布局。随着CSS技术的发展,有多种方法可以实现这一需求。实现步骤...

css之div内容居中(css中div怎么居中)

div中的内容居中显示,包括水平和垂直2个方向。<html><head><styletype="text/css">...

使用uniapp开发小程序遇到的一些问题及解决方法

1、swiper组件自定义知识点swiper组件的指示点默认是圆圈,想要自己设置指示点,需要获得当前索引,然后赋给当前索引不同的样式,然后在做个动画就可以了。*关键点用change方法,然后通过e.d...

微信小程序主页面排版(怎样设置小程序的排版)

开发小程序的话首先要了解里面的每个文件的作用小程序没有DOM对象,一切基于组件化小程序的四个重要的文件*.js*.wxml--->view结构---->html*.wxss--...

Vue动态组件的实践与原理探究(vue动态组件component原理)

我司有一个工作台搭建产品,允许通过拖拽小部件的方式来搭建一个工作台页面,平台内置了一些常用小部件,另外也允许自行开发小部件上传使用,本文会从实践的角度来介绍其实现原理。ps.本文项目使用VueCLI...

【HarmonyOS Next之旅】兼容JS的类Web开发(四) -> tabs

目录1->创建Tabs2->设置Tabs方向3->设置样式4->显示页签索引5->场景示例编辑1->创建Tabs在pages/index目录...

CSS:前端必会的flex布局,我把布局代码全部展示出来了

进入我的主页,查看更多CSS的分享!首先呢,先去看文档,了解flex是什么,这里不做赘述。当然,可以看下面的代码示例,辅助你理解。一、row将子元素在水平方向进行布局:1.垂直方向靠顶部,水平方向靠...

【HarmonyOS Next之旅】兼容JS的类Web开发(四) -> swiper

目录1->创建Swiper组件2->添加属性3->设置样式4->绑定事件5->场景示例编辑1->创建Swiper组件在pages/index...

CSS:Flex布局,网页排版神器!(css3 flex布局)

还在为网页排版抓狂?别担心,CSS的flex布局来了,让你轻松玩转各种页面布局,实现网页设计自由!什么是Flex布局?Flex布局,也称为弹性布局,是CSS中的一种强大布局方式,它能够让你...

移动WEB开发之flex布局,附携程网首页案例制作

一、flex布局体验传统布局兼容性好布局繁琐局限性,不能再移动端很好的布局1.1flex弹性布局:操作方便,布局极为简单,移动端应用很广泛PC端浏览器支持情况较差IE11或更低版本,不支持或仅部...

2024最新升级–前端内功修炼 5大主流布局系统进阶(mk分享)

2024最新升级–前端内功修炼5大主流布局系统进阶(mk分享)获课》789it.top/14658/前端布局是网页设计中至关重要的一环,它决定了网页的结构和元素的排列方式。随着前端技术的不断发展,现...