CSS-0_3 CSS和单位

文章目录

  • CSS的值和单位
    • 属性值
    • 长度单位
      • CSS和绝对单位
      • CSS和相对单位
        • 百分比
        • em & rem
        • 视口
    • 颜色单位
  • 碎碎念

CSS的值和单位

我们知道,CSS是由属性和属性值所组成的表

随着CSS的发展,属性不说几千也有几百,我从来不支持去背诵所有的可能性。我们应该去了解底层的逻辑,了解是什么导致我们最终看到了这样的样式,从而在我们面对不同需求时给予我们以不同的思路

那不聊属性,就先聊聊属性值吧




属性值

.content {max-width: 1080px;margin: 0 auto;
}

css的属性值是很多样的

  • 他可能是带有特殊含义的关键字就像 inheritinitial 或者 auto 这样的

  • 也可以是不带单位的数字

    • 用于表示距离和百分比的0可以不带单位(因为就算带了单位,他们的含义也没有区别)

      像这样

      body {margin: 0;padding: 0;
      }.A{height: 0;
      }.B{position:absolute;top:0;left:0;bottom:0;right:0;
      }
      
    • 一些属性也是允许无单位值的

      比如 z-indexline-heightopacity

  • 最常见的,他是一个带有单位



长度单位

CSS和绝对单位

CSS中的绝对单位,其实一个词就能讲完——px


我们的屏幕的分辨率就是用像素做单位,那用像素不是最好的选择吗?

可惜答案是否定的

css中的px跟分辨率的像素是有所不同的,严格来说CSS的1px并不等同于屏幕的1px,更何况不同的的设备和用户设定更是会渲染出不同的结果

虽然上第一节前端课的时候老师就告诉我们 1 英寸(这个是物理长度) = 96 p x 1英寸(这个是物理长度) = 96px 1英寸(这个是物理长度)=96px

但是现在我们知道了,这就是个大概值,如果你迷信他,到时候会吃亏的。该用英寸的时候,就直接用英寸

除了px以外,其实CSS还允许很多绝对单位,他们其中绝大多数都是印刷行业常用的单位。虽然在渲染网页的时候他们绝大多数情况下都帮不了你什么忙,但如果你要渲染一个专门用于打印的页面时,他们就会大显神威:

单位名称等价换算
cm厘米1cm = 37.8px = 25.2/64in
mm毫米1mm = 0.1 cm
Q四分之一毫米1Q = 0.25 mm = 0.025 cm
in英寸1in = 2.54cm = 96px
pc派卡(印刷用)1pc = 1/6 in = 12 pt
pt点(点)1pt = 1/72 in

在编辑排版工作中,为了方便计算一行内能排多少字符,往往使用“字符每派卡”(cpp,characters per pica)描述字体的大小。由于西文字体多为比例宽度,多带有零碎的小数、分数数值,比如某个版本 11 点大小的 Helvetica 会被记做 2.4 cpp,意即“1派卡里可排 2.4 个字符”。有了这个数值,排印人员就可以方便地计算,在通常一本八开(6×8 英寸)的书籍里排5英寸长的字行(5英寸=30派卡)可以容纳 2.4 × 30 = 72 个字


CSS和相对单位

在很多年前,绘制一个HTML页面跟规划一张报纸的版面没有什么区别 也许这就是为什么CSS会支持这么多排版单位的原因吧。因为开发者们知道用户会用什么设备来访问这个页面,画布是固定大小的,所以所有元素的尺寸都可以写死他。哪怕屏幕分辨率在后来越来越大,开发者们想出了类似前面的 .content 的解决方案:既然画布一直在变大,那我就自己定义一个画布,规定他的最大值。然后让他居中显示,把所有的内容都写到里面去,即使在高分辨率的屏幕上整个页面看起来就像一根矗立在屏幕中央的棍子


直到iphone4诞生,彻底改变人们对“上网”这个行为的思维方式。原来我们可以在一个方砖大小的设备上访问页面,那我们将来是不是可以在一个几十上百寸的巨幕上访问页面?在一张A4纸大小的板子上访问页面?

人们用千奇百怪的设备访问你的网页,这时候如果你依然墨守成规,那就只能在用户糟糕体验之后的唾弃声中抱着你的电脑屏幕退场


百分比

这个应该不需要解释了吧?就像这样:

<div class="f"><div class="A">A</div><div class="B">B</div>
</div><style>.f {background: gray;}.f > * {float: left;}.f::after {content: "";display: block;clear: both;}.A {width: 10%;/*占f的十分之一宽度*/background: red;}.B {width: 50%;/*占f的一半宽度*/background: yellow;}
</style>

在这里插入图片描述


这个其实不能属于相对单位那一类,他甚至都不能算单位

但是最早前辈们刚开始想搞响应式布局的时候,最先想到的就是用百分比

如果你用过一些前端样式框架,比如说 bootstrap 、 layui 或者 Element-plus(Element-ui)。你就会发现他们在布局的时候基本都有一个栅格化类

就是把一个容器切割成N份(N=12的居多),然后你根据调用不同的栅格类-数字来让子元素占据对应的宽度

在 flexbox 出现之前,几乎全都是用类似上面那个例子一样的方式实现的


em & rem

所谓相对单位,说白了就是这个单位是依附于其他东西的

他不像绝对单位,虽然我们说px在不同情况下的长度略有差异,可是只要你定义了这个属性,那么他就一定是这么长,无论周围的东西怎么变动都不会影响

但相对单位是可能你没有变动他自身,但是他相对的东西的长度变动了,所以他就跟着变动了(这个其实就跟百分比差不多

em和rem,这俩就是正儿八经的相对单位了

其实也很简单,一句话也能说完:

em是相对于父元素的字体大小的倍数;rem是相对于根元素的字体大小的倍数(r代表root)

但这是针对你用em来设定字体大小的时候,如果你用em设定的不是字体大小,那么他的参照物就会变成 当前元素的字体大小


em

em最直接的用法是当你想要在一段文字中突出某个大字号标题的时候使用,就像这样:

<div class="word"><p class="title">我是标题</p>巴拉巴拉        巴拉巴拉        巴拉巴拉        巴拉巴拉
</div><style>.word{font-size: 16px;}.title{font-size: 2em;}
</style>

在这里插入图片描述

我们通过2em这个设定让 title类 字体大小变成 word类 字体的两倍,这种写法是有意义的,当我们修改整段文字的字体大小的时候,可以只修改外层的word类的大小

通常我们用这种方式设定所有元素的字体大小,然后根据实际的分辨率来设定根元素的字体大小,已实现对整个页面的字体大小的动态控制

如果对根元素使用em呢?

你知道浏览器有个标准字体大小的伐

如果你对根元素使用em,就会以浏览器标准字体来计算

不过事实上现在我们最常见的对em的用法不是用他来设定字体,而是用他来设定边距,就像这样:

<div class="box A">A
</div>
<div class="box B">B
</div><style>.box{display: inline-block;padding: 2em;}.A {font-size: 16px;background: red;}.B {font-size: 32px;background: green;}
</style>

在这里插入图片描述

这样一来无论我把这两个方块的字体大小如何设定,他们的边距都会是当前字体大小的两倍


rem

rem跟em几乎是一样的,区别在于他的参照物永远都是根元素。在html文档中,这个根元素其实就是html标签

不过除此之外,CSS还提供了一个叫 :root 的伪类选择器让你选择根元素,我个人建议你用这个伪类选择器来选中根元素

就像这样:

<p>这是标准器默认字体大小的一句话</p>
<p style="font-size: 1.5em">1.5em</p>
<div style="font-size: 2em"><p style="font-size: 1em">父元素2em时的1em</p>
</div>
<p style="font-size: 1.5rem">1.5rem</p>
<div style="font-size: 2em"><p style="font-size: 1rem">父元素2em时的1rem</p>
</div><style>:root{font-size: 8px;}
</style>

在这里插入图片描述

视口

视口,就是指浏览器窗口里网页可见部分的边框区域

JavaScript中的视口(inner- 和 outer-)

在JavaScript里面,我们可以通过 inner-outer- 来获取html渲染区域尺寸和浏览器窗口尺寸,就像这样:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<button id="btn">打印窗口尺寸</button>
</body>
</html><script>(function () {document.getElementById("btn").onclick = function () {console.log(`innerHeight`, window.innerHeight, `innerWidth`, window.innerWidth);console.log(`outerHeight`, window.outerHeight, `outerWidth`, window.outerWidth);console.log("**************************************");};})()
</script>

在这里插入图片描述

这里发生了很有意思的事情

在一开始,我拉动了F12弹出的调试工具的大小,这时候innerWidth变小了,但是outerWidth无动于衷。但是当我让调试工具弹出来,同时缩小浏览器窗口大小时,我们看到outerWidth变小了,但是innerWidth反而变大了

会出现这样的情况只有一种解释,那就是inner-返回的是html页面当前可用的渲染区域的尺寸,而outer-返回的是整个浏览器窗口的尺寸,就像这样:

在这里插入图片描述

显然,inner- 所代表的就是我们说的视口

值得注意的是 inner- 的尺寸是包含滚动条的尺寸的,所以如果你用这个属性让某个容器占满整个页面的高度/宽度,那么在滚动条出现的情况下可能会出现很诡异的情形,就像这样:

<div id="test"><div style="height: 10px;width: 10000px"></div>
</div><style>body{margin: 0;padding: 0;}div{width: 200px;background: green;}
</style><script>(function(){document.getElementById("test").style.height = window.innerHeight + "px";})()
</script>

在这里插入图片描述

如我们所料,横向的滚动条出现了,这是因为我们有一个宽度为10000px的div,这远远超过我们的视口,所以横向滚动条出现了

但是纵向滚动条为什么会出现呢?明明test的高度等同于视口啊?

因为我们的视口是包含滚动条的,也就是说这样:

在这里插入图片描述

横向滚动条刚好挡住了一部分test的内容,所以纵向滚动条出现了,而且可以滚动的距离刚好等于横向滚动条的高度


vh & vw

在今天的网页开发里,如果你想要用视口尺寸,不一定要使用JavaScript,CSS也推出了四个用于操作视口的单位,就像这样:

说明
1vh视口高度的1%
1vw视口宽度的1%
1vmax视口高度和宽度中的较大值的1%
1vmin视口高度和宽度中的较小值的1%
<div id="A">A</div>
<div id="B">B</div><style>body{margin: 0;padding: 0;}#A{background: green;width: 90vw; /*占90%的宽度*/}#B{background: blue;height: 50vh; /*占50%的高度*/}
</style>

在这里插入图片描述



颜色单位

聊完了字体大小,长度单位,那么我们最常用的CSS单位就还有一个颜色

虽然颜色有非常多的枚举值可以选,但是在实际开发中基本都是用不上的,毕竟得是审美多诡异的设计师才会喜欢这些大红大紫

CSS最常用的一些颜色单位,其实打开PS的调色盘你就知道了:

在这里插入图片描述

看右下角这堆输入框,其实这里有五种表示颜色的方式

  • HSB

    这个在CSS里面用 hsl 来表示,hsl的四个参数分别代表这里的 H、S、B以及透明度

    这是给人理解的颜色表示方式,通过色度+饱和度的方式帮助你确认自己挑的颜色

    一般来说如果看两个相近颜色的RGB/十六进制代码,我们是看不出来这俩有多相似的,但是如果是hsl数值的话就会很明显

  • RGB & 十六进制

    RGB模式应该是大家最熟悉也是最常见的表示方式了,四个参数分别是,红色、绿色、蓝色以及透明度

    三种原色的最大值是255,所以RGB(255,255,255)是纯白色

    而RGB和十六进制是可以互相转换的,255刚好等于16进制的FF,所以颜色的十六进制是固定位数的六位(八位的那种是加上透明度的)

  • Lab

    这个很少用,但是CSS里也可以用,对应的函数是: lab()

    尽量别用,因为这玩意兼容性目前不太行

  • CMYK

    这个在网页上不怎么用,但是如果你绘制一个需要用来打印的页面时会用到这个东西

    在CSS里这样写:device-cmyk()




碎碎念

  • css是属性+属性值的键值对表。属性值是多样的,可以是枚举关键字、可以是不带单位的数字,但是更多时候他是带单位的值
  • 长度单位分绝对单位和相对单位,绝对单位最常用的px,其他基本是印刷时用的单位
  • 长度相对单位主要为响应式服务,最常用的有em&rem、还有vh&vw
  • 视口就是指浏览器窗口里网页可见部分的边框区域,虽然不包含标题、地址、开发者窗口等等浏览器组件,但是包含滚动条
  • 颜色的各种单位基本上打开PS的调色盘就明白了





万分感谢您看完这篇文章,如果您喜欢这篇文章,欢迎点赞、收藏。还可以通过专栏,查看更多与【CSS笔记】有关的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第22天|基于MindSpore的红酒分类实验

基于MindSpore的红酒分类实验 K近邻算法实现红酒聚类 1、实验目的 了解KNN的基本概念&#xff1b;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;…

WPF 手撸插件 一

1、本文主要使不适用第三方工具&#xff0c;纯手工的WPF主项目加载另一个WPF的项目&#xff0c;这里我们加载的是*.exe。 2、项目结构如下图。AbstractionLayer用于创建插件的接口。WPFIPluginDemo是主程序。WpfPlugin3是要加载的插件程序。 3、 AbstractionLayer中添加接口IP…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具&#xff0c;用于列出正在运行的Java进程 jps命令的使用&#xff1a;cmd打开直接jps 1.1不带参数&#xff1a; jps 默认情况下&#xff0c;列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l&#xff1a;显示完整的主类名或 JAR 文件…

计算机的错误计算(三十二)

摘要 在计算机的错误计算&#xff08;二十八&#xff09;与&#xff08;三十 一&#xff09;中&#xff0c;我们探讨了 Visual Studio 对 6个随机exp(x)函数的计算精度问题。根据网友的反馈&#xff0c;本节将展示 Python 对它们的输出&#xff1a;结果几乎与 Visual Studio …

MyBatis框架学习笔记(四):动态SQL语句、映射关系和缓存

1 动态 SQL 语句-更复杂的查询业务需求 1.1 动态 SQL-官方文档 &#xff08;1&#xff09;文档地址: mybatis – MyBatis 3 | 动态 SQL &#xff08;2&#xff09;为什么需要动态 SQL 动态 SQL 是 MyBatis 的强大特性之一 使用 JDBC 或其它类似的框架&#xff0c;根据不同条…

链接追踪系列-09.spring cloud项目整合elk显示业务日志

准备工作&#xff1a; 参看本系列之前篇&#xff1a;服务器安装elastic search 本机docker启动的kibana-tencent 使用本机安装的logstash。。。 本微服务实现的logstash配置如下&#xff1a; 使用腾讯云redis 启动本机mysql 启动本机docker 启动nacos,微服务依赖它作为…

为什么要使用加密软件?

一、保护数据安全&#xff1a;加密软件通过复杂的加密算法对敏感数据进行加密处理&#xff0c;使得未经授权的人员即使获取了加密数据&#xff0c;也无法轻易解密和获取其中的内容。这极大地提高了数据在存储、传输和使用过程中的安全性。 二、遵守法律法规&#xff1a;在许多国…

实验六:频域图像增强方法

一、实验目的 熟练掌握频域滤波增强的各类滤波器的原理及实现。分析不同用途的滤波器对频域滤波增强效果的影响,并分析不同的滤波器截止频率对频域滤波增强效果的影响。二、实验原理 ① Butterworth 低通滤波器:一种具有最大平坦通带幅度响应的滤波器。它的特点是在通带内具…

Dify中固定递归字符文本分割器的chunk长度计算方式

本文主要从源码角度剖析了Dify中FixedRecursiveCharacterTextSplitter的chunk长度计算方式。 1.self._length_function(chunk) 源码位置:dify\api\core\splitter\fixed\_text\_splitter.py\FixedRecursiveCharacterTextSplitter类\split\_text方法\self.\_length\_function(…

AutoHotKey自动热键(十一)下载SciTE4AutoHotkey-Plus的中文增强版脚本编辑器

关于AutoHotkey的专用编辑器, SciTE4AutoHotkey是一个免费的基于 SciTE 的 AutoHotkey 脚本编辑器,除了 DBGp 支持, 它还为 AutoHotkey 提供了语法高亮, 调用提示, 参数信息和自动完成, 以及其他拥有的编辑特性和辅助工具.XDebugClient 是一个基于 .NET Framework 2.0 的简单开…

buuctf-web

先输入127.0.0.1查找本地 得到网页目录&#xff0c;再输入127.0.0.1|ls查找下一级 得到php文件&#xff0c;127.0.0.1 | ls /返回上级目录 127.0.0.1 | cat /flag得到flag

如何提取视频中的音频?提取音频的几种方法

如何提取视频中的音频&#xff1f;提取视频中的音频&#xff0c;是许多人在处理多媒体内容时常遇到的需求。这一过程不仅仅是简单地从视听媒体中抽离音频部分&#xff0c;它背后蕴含着许多技术上的挑战和创意上的可能性。通过提取音频&#xff0c;你可以更方便地利用视频中的声…

object-C 解答算法:两数之和(leetCode-1)

两数之和(leetCode-1) 题目如下图:(也可以到leetCode上看完整题目,题号1) 解答方法一: 最简单的方法就是双指针遍历数组.代码如下 - (NSMutableArray *)sumOfTwoNumbers:(NSMutableArray *)array target:(int)target {NSMutableArray * resultArray [[NSMutableArray alloc…

【python】操作mysql数据库

一、操作步骤 MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结构化查询语言&#xff08;SQL&#xff09;作为操作和管理数据的主要方式。MySQL具有以下特点&#xff1a; 开源&#xff1a;MySQL是开源软件&#xff0c;这意味着任何人…

数电基础 - 触发器

目录 ​编辑 一. 简介 二. SR锁存器 三. JK 触发器 四. D 触发器 五. 电平触发的触发器 六. 脉冲触发的触发器 七. 边沿触发的触发器 八 . 触发器的逻辑功能和描述方法 一. 简介 触发器是数字电路中的一种基本存储单元&#xff0c;具有记忆功能&#xff0c;能够存储一…

36.UART(通用异步收发传输器)-RS232(3)

&#xff08;1&#xff09;串口发送模块visio视图&#xff1a; &#xff08;2&#xff09;串口发送模块Verilog代码: /* 常见波特率&#xff1a; 4800、9600、14400、115200 在系统时钟为50MHz时&#xff0c;对应计数为&#xff1a; (1/4800) * 10^9 /20 -1 10416 …

macOS 安装软件提示 “已损坏,无法打开。 您应该将推出磁盘映像” 或 “已损坏,无法打开。 您应该将它移到废纸篓”,解决办法

本文以 Pulsar Assistant 软件为例进行介绍&#xff0c;Redisant 系列的其他软件同理&#xff0c;只需要根据不同软件修改下面命令中的软件名即可。 在 macOS 系统上安装 下载最新的.dmg包&#xff0c;双击打开安装程序&#xff0c;将软件拖动到下方的程序目录即可。 安装时报…

AWS Aurora Postgres 的开源替代品:存储和计算分离 | 开源日报 No.278

neondatabase/neon Stars: 13.0k License: Apache-2.0 Neon 是一个无服务器的开源替代品&#xff0c;用于 AWS Aurora Postgres。它将存储和计算分离&#xff0c;通过在节点集群中重新分配数据来替换 PostgreSQL 存储层。 提供自动扩展、分支和无限存储。Neon 安装包括计算节…

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换&#xff08;强制转换&#xff09;C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…

pdf文件怎么转换为jpg图片?这几种转换方法操作起来很简单!

pdf文件怎么转换为jpg图片&#xff1f;在数字化洪流席卷职场的当下&#xff0c;PDF文档虽一度稳坐信息传输与储存的宝座&#xff0c;却逐渐显露出其在效率与便捷性追求中的疲态&#xff0c;随着技术疆界的不断拓宽&#xff0c;我们愈发深刻地意识到&#xff0c;PDF那复杂的格式…