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

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

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

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

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...