CSS-0_3 CSS和单位

news2024/9/22 21:23:51

文章目录

  • 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.coloradmin.cn/o/1928327.html

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

相关文章

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

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

图解PyTorch中的Transpose操作

在PyTorch中&#xff0c;我们时常会对张量进行转置操作。若张量是二维的&#xff0c;则非常容易理解。若张量维度更高&#xff0c;则会令人摸不到头脑。 高维张量究竟是怎么转置的&#xff1f;简单来说&#xff0c;就是将参与转置的维度抽出来&#xff0c;将内侧的子张量视为一…

设计模式学习(二)工厂模式——抽象工厂模式

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式 背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块&#xff0c;它可能在Windows下运行&#xff0c;也可能在Linux下运行。由于在厂家提供的SDK中&#xff0c;Windows下的SDK和Linux下…

DROO论文笔记

推荐文章DROO源码及论文学习 读论文《Deep Reinforcement Learning for Online Computation Offloading in Wireless Powered Mobile-Edge Computing Networks》的笔记 论文地址&#xff1a;用于无线移动边缘计算网络在线计算卸载的深度强化学习 论文代码地址&#xff1a;DR…

统计学9——分类数据统计

知识结构 内容精读 1.分类数据与$\chi^2$统计量 分类数据在第一章已经进行了详细介绍&#xff0c;就是对数据进行分类的结果&#xff0c;特征是&#xff0c;调查结果虽然用数值表示&#xff0c;但不同数值描述了调查对象的不同特征。由此分类数据的结果是频数&#xff0c;而$…

git链接远程仓库

【 一 】ssh链接远程仓库 删除git仓库 【 1 】初步使用方法 1、之前把本地代码&#xff0c;以https形式&#xff0c;提交到了远程仓库 # - git remote add origin https://gitee.com/bai-zhitao/lufy.git- 输入用户名密码2、ssh认证&#xff0c;只需要配置一次&#xff…

uniapp踩坑之项目:uni-table垂直居中和水平居中

uni-table 中的水平居中uni-td align"center"&#xff0c;css里的属性vertical-align: middle //html 水平居中<uni-table ref"table" :loading"loading" border stripe emptyText"暂无更多数据"><uni-tr><uni-th :wid…

车载音视频MediaPlayer优化方案

媒体播放现状 从手机到车载&#xff0c;在很多地方还是有很大的不同。针对多媒体的场景Android车机目前大部分结构大致结构如下图&#xff1a; 从以上图看出的问题&#xff1a; 各个音视频APP单独实现播控界面&#xff0c;播放链路不一致&#xff0c;使用的底层播放器和音频焦…

JavaEE:Spring Web简单小项目实践二(用户登录实现)

学习目的&#xff1a; 1、理解前后端交互过程 2、学习接口传参&#xff0c;数据返回以及页面展示 1、准备工作 创建SpringBoot项目&#xff0c;引入Spring Web依赖&#xff0c;添加前端页面到项目中。 前端代码&#xff1a; login.html <!DOCTYPE html> <html lang&…

云备份服务端

文件使用工具和json序列化反序列化工具 //文件和json工具类的设计实现 #ifndef __UTIL__ #define __UTIL__ #include<iostream> #include<fstream> #include<string> #include <vector> #include<sys/stat.h> #include"bundle.h" #inc…

68、Flink DataStream Connector 之文件系统详解

文件系统 1.概述 连接器提供了 BATCH 模式和 STREAMING 模式统一的 Source 和 Sink。 Flink FileSystem abstraction支持连接器对文件系统进行&#xff08;分区&#xff09;文件读写&#xff0c;文件系统连接器为 BATCH 和 STREAMING 模式提供了相同的保证&#xff0c;而且对…

数字孪生Digital Twin 结合建筑信息模型 BIM 在AIoT 智慧城市建设中Web 可视化大屏实践...

智慧城市建设通过将城市中的建筑、基础设施等构建 BIM 模型&#xff0c;并与实时采集的数据相结合&#xff0c;创建数字孪生体。可以实现对城市能源消耗、交通流量、环境质量等的实时监测和预测&#xff0c;优化城市规划和资源分配。 01 数字孪生 Digital Twin 数字孪生 Digita…

Spring MVC 全注解开发

1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置&#xff1a;开启注解驱动3.2 Spring MVC的配置&#xff1a;视图解析器3.3 Spring MVC的配置&…

【实战:python-Django发送邮件-短信-钉钉通知】

一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Headermsg_from 306334678qq.com # 发送方邮箱 passwd luzdikipwhjjbibf # 填入发送方邮箱的授权码(填入自己的授权码&#xff0c;相当于邮箱…

SSE、Webworker 、webSocket、Http、Socket 服务器推送技术

Http协议 受浏览器的同源策略限制 HTTP 协议是一种无状态的、无连接&#xff08;短暂连接&#xff0c;客户端发送请求&#xff0c;服务器响应后即断开连接&#xff09;的、单向的应用层协议。 它采用了请求/响应模型。通信请求只能由客户端发起&#xff0c;服务端对请求做出应…

(day18) leetcode 204.计数质数

描述 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 示例 1&#xff1a; 输入&#xff1a;n 10 输出&#xff1a;4 解释&#xff1a;小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1a;0示例 3…

JVM--自动内存管理--JAVA内存区域

1. 运行时数据区域 灰色的线程共享&#xff0c;白色的线程独享 白色的独享就是根据个体"同生共死" 程序计数器&#xff1a; 是唯一一个没有OOM(内存溢出)的地方 是线程独享的 作用&#xff1a; 是一块较小的内存空间,是当前线程所执行的字节吗的行号指示器 由于…

智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

docker 安装 onlyoffice

1.文档地址 Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICE 2.安装onlyoffice docker run -i -t -d -p 9000:8000 --restartalways -e JWT_ENABLEDfalse onlyoffice/documentserver 如果发现镜像无法下载,可以尝试更换镜像源 {"registry-mir…

JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM底层 Java虚拟机内存模型JVM组成部分五大内存区域各自的作用虚拟机栈(线程栈)栈帧内存区域 本地方法栈程序计数器为什么jvm要设计程序计数器&#xff1f; 堆方法区 JVM优化-堆详解JVM底层垃圾回收机制jvm调优工具jvisualvm.exeArthas工具使用 Java虚拟机内存模型 JVM跨平台原…