”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > CSS 的演变:从基础到现代魔法

CSS 的演变:从基础到现代魔法

发布于2024-11-07
浏览:378

The Evolution of CSS: From Basics to Modern-Day Magic

CSS,即层叠样式表,自 20 世纪 90 年代末首次出现以来,一直是网页设计领域的无名英雄。将其视为网络世界的神奇衣橱——将简单、无聊的 HTML 转变为视觉上令人惊叹的交互式仙境。在本文中,我们将深入探讨 CSS 的迷人演变,从它卑微的开始到现在作为每个 Web 开发人员工具包中的终极向导的角色。

早期:CSS 1.0 和 2.0

我们的故事始于 1994 年,当时一位名叫 Håkon Wium Lie 的有远见的人提出了一种用于设计网页样式的新语言。快进到 1996 年,万维网联盟 (W3C) 发布了第一个官方 CSS 1.0 规范。那时,CSS 就像一个小巫师,书中只有几个咒语:

颜色和背景:基本文本和背景颜色——还没有彩虹!
Font Magic: 对字体的有限控制,例如选择大小、样式和系列。
文本技巧:简单的文本对齐和装饰。
间距魔法:带有边距、填充和边框的基本布局控件。
然后 1998 年 CSS 2.0 出现了,我们的小巫师学到了一些新技巧:

元素定位:静态、相对、绝对和固定定位。
Z-Index: 将元素堆叠在一起,就像层蛋糕一样。
媒体类型:屏幕、打印机等的不同样式规则。
高级选择器: 酷炫的新选择器,例如 :hover 可以让事情变得有趣。
但也有一个黑暗的一面:浏览器支持不一致。开发人员经常不得不使用古怪的“黑客”和咒语来让东西在不同的浏览器上工作,这使得 CSS 2.0 感觉就像用一根破损的魔杖施展咒语!

过渡阶段:CSS 2.1 和浏览器之战

欢迎来到 2000 年代初,这个时期被称为“浏览器战争”。将其想象为 Internet Explorer 和 Netscape Navigator 之间的一场史诗般的战斗,双方都试图用自己对 CSS 的解释来超越对方。结果呢?行为不一致,让开发人员感到沮丧。

CSS 2.1 于 2011 年问世,这是一次适度的更新,旨在修复 CSS 2.0 中的错误和歧义。它给场景带来了更多的稳定性,但真正的魔法仍在后台酝酿......

现代时代:CSS3 和现代魔法的兴起

魔法终于来了!从 2000 年代末开始,CSS3 开始推出,但这一次有所不同——它是模块化的! CSS3 不仅仅是一本咒语书;它也是一本咒语书。它是一个完整的库,具有独立的模块,涵盖从布局(Flexbox、Grid)到动画等所有内容。这种新方法让浏览器更快地采用功能,突然之间,网络开发人员就拥有了一些非常强大的魔法!

1. Flexbox 和 Grid:布局向导

Flexbox(灵活框布局):Flexbox 就像一个一维布局向导,使创建复杂的布局变得轻而易举。需要对齐或分布容器中的物品?无论您的内容多么不可预测,Flexbox 都能满足您的需求!
CSS 网格: 将网格视为布局大师。它带来了二维控制,使开发人员能够制作复杂的响应式网格,而无需诉诸讨厌的浮动或定位技巧。借助 grid-template-columns 和 grid-template-rows 等工具,您就是布局宇宙的主人。

2.响应式设计:像变色龙一样适应

随着智能手机和平板电脑的兴起,网站需要比以往更具适应性。输入媒体查询——让您的网站根据宽度、高度和分辨率等设备特征改变其外观的咒语。这就是“移动优先”方法的用武之地:首先针对较小的屏幕进行设计,然后针对较大的屏幕进行增强。结果呢?像手套一样适合各种设备的网络!

3. 动画和过渡:让页面栩栩如生

有了 CSS3,网络有了自己的生命力!开发人员可以直接在 CSS 中创建流畅、具有视觉吸引力的动画,无需使用 JavaScript。想象一下这样的效果:

过渡: 由状态变化触发的简单动画(如悬停效果),具有过渡属性、过渡持续时间等。
动画:使用@keyframes创建多阶段动画的更复杂序列。
突然之间,网站可以跳舞、跳跃和做出反应——吸引用户并使网络变得更加活跃!

4. 自定义属性(CSS 变量):您的个人药水成分

CSS 变量,也称为自定义属性,使样式变得动态且可定制。想要在几秒钟内更改网站的主题吗?定义一次神奇的成分并在整个样式表中使用它们。例如:

:root {
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
}

body {
  background-color: var(--primary-color);
  color: var(--secondary-color);
}

现在您可以更改单个值,整个网站就会像魔术一样发生变化!

5. 变换和过滤器:掌握视觉效果

CSS3 还为我们提供了变换和过滤器——用于弯曲和扭曲现实的工具:

变换:应用旋转、缩放、平移和倾斜等效果来创建令人惊叹的视觉效果。
滤镜:添加模糊、灰度或阴影等动态效果,使元素流行起来,而无需依赖外部图形软件。

6. CSS Houdini:解锁终极魔法

现在,来认识一下 CSS Houdini,这是一组新的 API,可让开发人员更深入地访问浏览器的 CSS 渲染引擎。想象一下编写您自己的 CSS 魔法 — 带类型检查的自定义属性、新的布局算法等等!虽然仍处于早期阶段,但 Houdini 有潜力改变一切。

展望未来:CSS 的未来

我们神奇的语言的下一步是什么?握紧你的魔杖——还有更多精彩等着你:

容器查询:基于容器大小的样式,而不仅仅是视口。
子网格:增强的 CSS 网格功能,实现更精确的控制。
CSS 嵌套: Sass 和其他预处理器的一个熟悉功能即将引入原生 CSS。
新颜色函数: 支持现代色彩空间和 color-mix() 等函数。
CSS 将变得更加强大,突破网页设计的界限。所以,拿起你的魔杖(或者,你知道,你的键盘)并准备好创造一些网络魔法!

版本声明 本文转载于:https://dev.to/ram_nathawat/the-evolution-of-css-from-basics-to-modern-day-magic-4nk7?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-07-12
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-12
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-07-12
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-07-12
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-07-12
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-12
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html &lt;/main&gt; &lt;section&gt; { display:grid; grid-template-...
    编程 发布于2025-07-12
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-07-12
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示 仅通过Python的MlStripper 来简化剥离过程,Python Standard库提供了一个专门的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    编程 发布于2025-07-12
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-07-12
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-07-12
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-07-12
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-07-12
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-07-12
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-07-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3