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

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

myzbx 2024-12-01 18:27 12 浏览

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

相关推荐

攀升战境S5电竞主机评测:NVIDIA RTX 3060实力助阵,光追游戏走起

此次笔者将为玩家们推荐一款游戏主机——攀升战境S5。该主机是攀升电脑今年力推的游戏装备,主机采用一线品牌配件,特别是在显卡选用上严苛把关,精选GeForceRTX30系列显卡,玩家们大可以放心选购...

慎买-神牛闪光灯兼容性问题:神牛V350&amp;松下S5M2

神牛V350和松下S5M2的兼容性问题。大家好,我是向往闪光灯人像的Fish。国庆期间,我购买了神牛V350闪光灯和神牛X2T引闪器,但这成为了我的噩梦。我原以为客服和松友们说这款闪光灯在松下S5M2...

Acer蜂鸟持续办公一整天(acer 蜂鸟s5)

移动办公在工作节奏日益加快的今天越来越普遍,目前大部分工作无法在手持设备上完成,笔记本依然是移动办公最明智的选择。为了实现移动办公,很多笔记本越做越轻薄,性能也越来越强,而续航却一直没有很大提升。笔者...

职业车手明年会骑什么?2021赛季各大世巡赛车队使用器材一览

新年的钟声即将敲响,意味着充满魔幻色彩的2020年即将过去。受新冠肺炎的影响,2020年的赛季非常不同寻常。因这一原因不得不延迟举行的各种比赛导致许多车队的赞助商无法得到足够曝光,这也间接导致了许多车...

三星部分手机系统升级路线图流出(三星系统在哪升级)

三星包括Note3和S5在内的手机在升级到4.4.2系统之后一直没有什么系统升级的消息,而最近流出的一张三星的系统升级路线图中出现了一共13台手机升级KTU84P(也就是Android4.4.4)...

索尼Xperia Z3配置大曝光:升级并不大

IT之家(www.ithome.com):索尼XperiaZ3配置大曝光:升级并不大索尼明天就会在IFA2014大会上发布其下代旗舰XperiaZ3智能手机,目前网上曝光了其原型机,并且机身背后...

不进反退 三星Exynos 5433只能运行32位模式?

三星GalaxyNote4将带有两个版本,除了国行使用的骁龙805以外,还有三星自家的Exynos5433版本。而这颗SoC的详细信息三星并没有公布,据外媒Anandtech称,他们从源码中确认...

尼康Z6III测评:对比EOS R6 II、A7M4、S5IIX

摄影器材测评网站DPReview刚刚发布了尼康Z6III的完整图文测评,该机获得金奖评级,得分达到91%。以下是该文章的摘录——尼康Z6III核心规格:2400万像素“部分堆栈式”传感器RAW连拍:机...

赛默飞Ion S5首批数据公布,玩爆前任PGMTM系列

北美时间9月1日,赛默飞发布了两款最新的NGS系统IonS5和IonS5XL,旨在提供更加简捷的靶向测序流程。10月29日IonS5测序仪的首批实验数据产生于阜外医院。阜外医院研究人员选用了主...

Excel技巧:快速制作批量文件夹,省时省力,加强工作效率

大家好,如果公司领导要求按人员姓名制作文件夹,以一人一档的形式呈现人员档案,办公人员一个一个制作费时费力,而且效力低下,今天为大家介绍快捷制作批量文件夹的方法下面我们用图片来进行演示操作打开表格,选...

国行、港版、美版Apple watch各版本售价一览

今天凌晨,苹果牌手表正式发布,苹果开始正式进入可穿戴设备领域,除了功能和外观,我相信大家更关心的是价格问题了,小编就将国行、港版、美版的Applewatch售价做一总结,以供参考。国行:美版:港版:...

松下全画幅微单S5和S1到底哪里不一样?

Hello,我是ET,欢迎大家来到我的“相机笔记”。————9月2日晚,松下正式发布了第4款全画幅微单LUMIXS5。这一篇,我们主要来说松下LUMIXS5和LUMIXS1到底有哪些区别...

融会贯通之典范 神舟S7-2021S5评测

便携、性能、续航,这简简单单的六个字道出了这么些年来笔记本电脑的设计方向,可是由于底层技术、模具设计等等原因,这三点并不能很好的融合在一起。虽说闻道有先后,术业有专攻,但能够有一台融会贯通的产品,不是...

三国志战略版:S5赛季装X指南,开荒不是一成不变,需要因地制宜

大家好我是零氪玩家花席,S5赛季已经开始,因为S5赛季的野地阵容和S4赛季没有区别,所以S5赛季开荒相对不难。你在S4有经验,并且多了很多武将和战法,还能用150赛季功勋兑换7500战法点。S5赛季新...

聊聊松下S5M2和S5M2X的区别(松下s5k和s5c有什么区别)

先简单说下哪里不同:12bitRAWHDMI外录支持直接将视频录制到USB-SSD上多了All-Intra和ProRes编码支持有线/无线IP推流,USB网络连接黑化的机身不过要特别强调一下,S5...