深入解析css-学习小结

news2024/9/20 22:50:43

绪论

盒模型

层叠 优先级 继承

层叠

层叠指规则冲突时,如何选择规则。规则冲突解决顺序:

样式表来源

用户代理样式

用户代理样式:浏览器默认样式

作者样式表:你自己写的css样式

作者样式表会覆盖用户代理样式,因为浏览器先加载用户代理样式,再加载作者样式,所以作者样式会覆盖用户代理样式

例子:

重要声明

在css行末加! important,该行即表示重要声明

总结当前优先级:! important > 作者样式 > 用户代理样式

理解优先级

如果浏览器无法通过来源解决优先顺序,则会检查他们的优先级。浏览器将优先级分为两部分:html行内样式和选择器样式

行内样式

即在元素内手动给属性style赋值,行内样式会覆盖样式表的样式,行内样式没有选择器,因为直接作用于元素。如果样式表的样式带了! important,则行内样式同样带! important的样式声明无法覆盖样式表的样式

选择器优先级

选择器优先级类似操作符优先级 有一定顺序 比如两个类名选择器的优先级高于一个类名选择器 

规则:选择器如果存在多个相同id,则id最多的选择器优先;如果id数量一致,则类名最多的选择器优先;如果id和类名数量都相同,有最多标签名的选择器优先。例如下图,数字越大越优先

其他规则:伪类选择器和属性选择器优先级作用和类选择器作用相同;通用选择器和组合选择器对优先级没有影响

应用:有时候你的样式没有生效,可能是选择器呗更高优先级的选择器覆盖了

优先级标记

可以用linux三位数文件权限理解css选择器优先级,三位数从高到底依次为id选择器数量,类选择器数量,标签选择器数量。计算每个选择器的优先级标记值,值高的优先级越高,越优先

源码顺序

即当样式表来源和选择器优先级都相同时,根据css声明顺序决定哪个样式起作用,也即最后声明的会覆盖

其他经验

不要使用id选择器,因为id选择器优先级过高

尽量不要使用! important ,因为选择器多了,优先级很难搞

继承

如果元素没有设置样式,则会继承父元素的样式

特殊值

inherit

让属性继承父类的属性

initial

让属性使用初始默认值

比如color: initial等于color: black, dispkay: initial等于display:inline, 

简写属性

比如font,background,border,padding等属性

需要注意简写属性会覆盖其他省略的属性

简写顺序

有的属性简写顺序模糊,比如border: 1px solid可以无序 有的比如padding就有顺序

需要注意

padding,margin这类属性,如果属性写满,顺序是上右下左,如果三个属性,左属性为4%3=1,用第二个属性,如果是两个属性,上下用第一个,左右用第二个属性

还有一部分属性顺序不遵从上右下左,比如background-position,box-shadow,text-shadow属性,这些属性后如果根两个属性,则先是左右属性,再是上下属性

相对单位

相对单位好处

灵活

px:像素,1/96英寸

pt:点,印刷术语,1/72英寸

pc:派卡,等于12pt

mm:毫米

cm:厘米

in:英寸

em和rem

em:相对单位,当前元素字号(font-size)大小

好处是当字号大小变化,em单位也会放缩

如果对字号font-size使用em单位,则字号会用父元素的字号绝对值来计算em

浏览器默认字号大小为16px

例如一个选择器font-size:1.2em; padding: 1.2em,则边距目测会比字号大一些,大多少?大1.2em

例子:当多个嵌套元素使用em声明font-size属性时,font-size计算值会不断缩小,或是不断放大

可通过修改选择器解决问题,但办法不够好。em适用于边距这些,不太适用于字体这些属性

rem:是root em的缩写,表示相当于根节点的em,而不是父类的属性

经验:用rem设置字号,用px设置边框,用em设置其他属性

停止像素思维

默认字号可以直接给root根元素font-size属性设置目标值调整字号大小。比如浏览器默认字号16px,你想设置14px,则可以设置 14/16=0.875em

使用@media可以创建响应式,即不同窗口尺寸下会自动使用不同的选择器,在不同选择器里定义自己的样式达到响应式

视口相对单位

vh:视口高度的1%

vw:视口宽度的1%

vmin,vmax:视口宽高中较大/较小的1%

也可以使用相对视口单位定义字号大小

字号定义还可以使用calc函数计算,参数可以是不同相对单位的运算,比如calc(1em + 5px),注意运算符两边必须留空格。一个值得尝试的值是calc(0.5em + 1vw),0.5em定义了最小字号,1vw可以让字号随窗口大小流畅放缩

无单位数值和行高

支持无单位的属性有 line-height, z-index, font-weight。任何属性都可以用无单位的0,因为无论什么单位效果都一样

属性被继承时可以考虑用无单位数值,如下例

自定义属性(css变量)

需要在样式里定义变量,加两个--表示变量,调用时用var括号起来,例如

变量的出现可以让我们每次修改时只改变量,而变量的引用无需修改

var接收第二个参数,意义是当第一个参数未定义时使用第二个参数

如果var算出的结果是一个非法值,则会将该属性的值置为默认值

变量可以在root伪类样式中声明,伪类用冒号开头定义

看一个例子,值得注意的是,在一个样式里重新定义了两个变量,变量会被元素继承,展现不同的效果。注意同名变量的重新定义类似作用域,不会覆盖父作用域的同名变量,仅会覆盖当前作用域的变量

盒模型

元素宽度问题

目标

1.0代码

<html>
<head>
    <style>
        body {
            background-color: #eee;
            font-family: Helvetica, Arial, sans-serif;
        }
        header {
            color: #fff;
            background-color: #0072b0;
            border-radius: .5em;
        }
        main {display: block;}
        .main {
            float: left;
            width: 70%;
            background-color: #fff;
            border-radius: .5em;
        }
        .sidebar {
            float: left;
            width: 30%;
            padding: 1.5em;
            background-color: #fff;
            border-radius: .5em;
        }
    </style>
</head>
<body>
<header>TJH 666</header>
<div class="container">
    <main class="main">
        <h2>join me</h2>
        <p> this is a paragraph</p>
    </main>
    <aside class="sidebar">
        <div class="widget"></div>
        <div class="widget"></div>
    </aside>
</div>
</body>
</html>

效果

缩小宽度,尝试让两个白色缩到一行

.main {
            float: left;
            width: 70%;
            background-color: #fff;
            border-radius: .5em;
        }
        .sidebar {
            float: left;
            width: 30%;
            padding: 1.5em;
            background-color: #fff;
            border-radius: .5em;
        }

没达到预期,是因为一行太窄装不下,虽然宽度加和的100,但还有边距,宽度声明是对应内容,需要结合盒模型看

一种方法

直接缩小某列的宽度,使其缩到一行,不推荐

调整盒模型

如果宽高定义是基于边框,则可以满足需求,可通过修改属性box-sizing修改宽高定义的基准为边框,内边距或内容。取值有content-box,border-box,inherit。content-box仅包含内容,border-box包含内容,边距和边框宽度,试一下

.main {
            box-sizing: border-box;
            float: left;
            width: 70%;
            background-color: #fff;
            border-radius: .5em;
        }
        .sidebar {
            box-sizing: border-box;
            float: left;
            width: 30%;
            padding: 1.5em;
            background-color: #fff;
            border-radius: .5em;
        }

元素高度问题

负外边距

外边距折叠

容器内元素间距

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

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

相关文章

宅家必备神器!远程控制软件,让你随时随地掌控一切

在数字化时代&#xff0c;远程控制软件已经成为我们日常生活和工作中不可或缺的工具。今天&#xff0c;我将分享五款我使用过的远程控制软件的使用感受&#xff0c;希望大家能够选择到一款适合自己的远控工具&#xff1a; 一、向日葵远程控制 直通车&#xff08;粘贴到浏览器…

基于xr-frame实现微信小程序的图片扫描识别AR功能(含源码)

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…

NWM口罩佩戴检测算法,浅析口罩佩戴检测从源码到实际应用的全面指南

一、背景 随着新冠疫情的全球蔓延&#xff0c;佩戴口罩成为了预防病毒传播的重要措施。然而&#xff0c;随着疫情的持续&#xff0c;社会上仍存在不少未佩戴口罩的行为&#xff0c;这给公共健康带来了巨大的风险。在这样的背景下&#xff0c;基于计算机视觉的口罩检测算法应运…

ML307R_APP_DEMO_SDK TCP/UDP使用介绍

ML307R_APP_DEMO_SDK是在ML307R_OpenCPU_Standard_SDK标准代码基础上&#xff0c;新增了面向用户APP层的demo示例&#xff0c;与标准代码中examples的示例代码不同&#xff0c;app_demo实现了联网自动化&#xff0c;数据透传&#xff0c;各功能可独立自动运行&#xff0c;并对用…

【TB作品】TM1637芯片数码管,PIC16单片机驱动显示,Proteus仿真

文章目录 效果模块芯片介绍code 效果 只能是共阳数码管&#xff1a; 模块 芯片介绍 TM1637芯片是一种常用于LED数码管显示控制的驱动芯片&#xff0c;下面是各引脚的详细说明&#xff1a; DIO (Data Input/Output) - 管脚号: 17 功能: 串行数据输入/输出&#xff0c;DIO引脚…

JVM经典的垃圾收集器

经典垃圾收集器 目录 Serial收集器ParNew收集器Parallel Scavenge收集器 Serial Old收集器Parallel Old收集器CMS 收集器Garbage First收集器 以上是经典收集器的关系图 Serial收集器 Serial收集器是一个单线程工作的收集器&#xff0c;但它的“单线程”的意义并不仅仅是说…

『功能项目』禁止射线穿透行为【06】

我们打开上一篇04禁止射线穿透行为项目&#xff0c; 本章要做的事情是在Unity编辑器中添加 新输入系统 实现主角在场景中鼠标右键可以使主角 转向。 本次项目需要让Unity引擎重新启动所以先保存当前项目 再次打开项目后&#xff0c; 修改为Both 点击Apply前注意要先保存项目&a…

数据结构——树的三种表示方法

目录 引言 树 1.树的定义 2.树的基本概念 3.树的表示方式 (1)双亲表示法 (2)孩子表示法 (3)左孩子右兄弟表示法 (4)树的应用 结束语 引言 在学习完栈和队列的之后后&#xff0c;我们接下来学习新的数据结构——树。 树 1.树的定义 树是一种非线性数据结构&#x…

JavaScript 数据结构 ==== 二叉树

目录 二叉树 结构 二叉树和二叉搜索树介绍 1.创建树 2.插入一个键 3.树的遍历 中序排序 先序遍历 后序遍历 4.搜索树中的值 5.删除节点 二叉树 在计算机科学中&#xff0c;二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtre…

Docker Desktop镜像路径修改一直报错

一 点击Apply & Restart报错 [Window Title] Docker Desktop[Main Instruction] Error migrating WSL disk[Content] An error occurred while migrating the Docker Desktop WSL data disk to its new location:moving disk file: rename C:\Users\Lenovo\AppData\Local\D…

Linux 进程 | 进程地址空间

文章目录 进程地址空间程序地址空间进程地址空间 进程地址空间 程序地址空间 地址空间一共有如下的几个区域&#xff0c;从下到上地址逐渐增加&#xff0c;其中栈区的空间是从上往下使用&#xff0c;即从高地址往低地址增长&#xff1b;堆区的空间是从下往上使用&#xff0c;…

简单实现进度条效果(vue2)

如果用echarts或者其他图表来写个进度条有点大材小用&#xff0c;所以直接简单html、js写一下就可以&#xff1b; 以下代码基于vue2&#xff0c; 部分代码来自国内直连GPT/Claude镜像站 <template><div class"progress-container"><div class"p…

aosp源码导入android studio无法跳转-学员答疑

背景&#xff1a; 在学习framework入门课时候&#xff0c;一个很重要环节就是导入aosp的源码到android studio&#xff0c;这样有了IDE之后开发起来就很方便了&#xff0c;但是很多学员朋友对编译出来的ipr&#xff0c;iml文件改造不知道该怎么搞&#xff0c;导致android stud…

mysql 开启binlog并设置

打开my.cnf 文件&#xff0c;Linux系统文件默认位置为 /etc目录下&#xff0c;若不存在&#xff0c;可以使用下述命令查询 find / -name my.cnf修改my.cnf文件&#xff0c;开启binlog mysqld 模块下添加以下内容 server_id1 #给当前mysql机器设置一个id log-binmysql_bin …

分布式事务理论和解决方案

分布式事务理论 business&#xff08;下单&#xff09;远程调用库存&#xff08;storage&#xff09;,保存订单&#xff08;order&#xff09;&#xff0c;扣减积分&#xff08;account&#xff09;&#xff0c;只有这三个步骤全部成功&#xff0c;我们的下订单才算成功。 如果…

2024-01-开发技术积累

文章目录 递归删除文件执行任务超时时间读写锁获取异常栈信息通过NIO读取文件单例模式代码NIO管道写文件(来自nacos)NIO读取文件(来自Nacos)spring指定注解扫描 递归删除文件 xxl-job源码 public static boolean deleteRecursively(File root) {if (root ! null && ro…

JAVA中的Stream流的使用详解

1.Stream的介绍 Java 8 API添加了一个新的抽象称为流Stream&#xff0c;可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力&#xff0c;让程…

React+Vis.js(04):vis.js设置节点显示图片

文章目录 实现效果关键代码完整代码设置图片边框和背景颜色我们继续以 复仇者联盟为例,来介绍如何实现节点显示 图片。 实现效果 以图片进行节点的显示,使得显示效果更加直观,信息更为明了。 关键代码 在vis.js中,通过属性shape来控制节点显示为图像。 const nodes …

Shire 0.5 发布:构建数据安全 RAG,充分整合研发资产

最近&#xff0c;我们发布了新版本的 Shire&#xff0c;在这个新的发布&#xff08;Shire 0.5&#xff09;里&#xff0c;你可以更好地融合本地研发资产&#xff0c;同时构建数据安全 RAG。在这次版本中&#xff0c;我们增加了&#xff1a; 对 SonarQube 的 issue 支持。可以直…

1.反爬虫机制

一、IP 封锁 网站可以检测请求的IP地址&#xff0c;并封锁那些频繁请求的IP&#xff0c;使其无法访问网站。这是一种常见的反爬虫策略&#xff0c;用于防止单个IP地址对服务器造成过大的负载。 解决办法 &#xff1a; 使用代理IP池以避免IP封锁 // 待补充 二、请求头检测(Us…