02-CSS3基本样式

目录

1. CSS3简介

1.1 CSS3的兼容情况

1.2 优雅降级和渐进增强的开发思想

2. 新增选择器

2.1 选择相邻兄弟

2.2 匹配选择器

2.3 属性选择器(重点)

2.4 结构性伪类选择器(重点)

2.4.1 整体结构类型

2.4.2 标签结构类型

2.4.3 指定子元素的序号(重点)

2.4.4 其他伪类选择器(了解)

2.5 文本选择伪元素(了解)

2.6 表单中使用的状态伪类选择器

我可以:

2.7 内容追加伪元素(重点)

多学一招

2.8 JS新增的选择器(重点)

3. CSS3新增样式属性

3.1 background-image多重背景

3.2 background-image的渐变

3.2.1 线性渐变(重点)

3.2.2 径向渐变

3.3 background-size背景缩放(回顾)

3.4 background-origin背景定位原点

3.5 CSS3的opacity 属性(重点)

3.6 CSS3的filter(滤镜) 属性

3.7 hsla() 函数

3.8 calc() 函数

3.9 box-sizing盒模型属性(回顾)


1. CSS3简介

如同人类的的进化一样,CSS3是CSS2的“进化”版本,在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷。

1.1 CSS3的兼容情况

CSS3给开发人员带来了很多有趣的功能,同时也为用户提供了更好的用户体验。但是,这一切并不是所有的浏览器都完全支持。目前主流的浏览器都采用了私有属性的形式来支持CSS3属性,以便让用户体验CSS3的新特性。

下面介绍这些私有属性:

  • Webkit引擎浏览器使用“-webkit-”作为私有属性,像Safari和Chrome浏览器。

  • Gecko引擎浏览器使用“-moz-”作为私有属性,像Firefox浏览器。

  • Presto引擎浏览器使用“-o-”作为私有属性,像Opera浏览器。

  • Trident引擎浏览器使用“-ms-”作为私有属性,只有IE8以上支持,像IE浏览器。

css:
-webkit-transition:1s;
-moz-transition:1s;
-o-transition:1s;
transition:1s;

这些专用私有属性虽然可以避免不同浏览器在解析相同属性时出现冲突,但是却给开发人带来了诸多不便。因为,开发人员不仅需要写更多的代码,而且还非常容易导致同一个页面在不同的浏览器之间表现不一致。当然随着CSS3的普及,这种情况一定会得到改善。

1.2 优雅降级和渐进增强的开发思想

优雅降级:一开始就针对比较完整,兼容性比较好的版本进行开发,然后在项目后期对低版本进行兼容。

举例子:我们前端在开发项目的时候一开始可能不会再ie上进行开发测试,一般是现在谷歌上跑通,然后再去兼容低版本的ie浏览器。

渐进增强:则是和优雅降级相反,一开始我们就针对ie浏览器进行开发,然后逐步完善提升版本去适配高级浏览器。

举例子:我们一开始就在ie低版本浏览器上进行开发测试,走通之后我们再去谷歌,火狐浏览器上进行测试开发。

2. 新增选择器

CSS3新增了许多灵活查找元素的方法,极大的提高了查找元素的效率和精准度。

2.1 选择相邻兄弟

如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器,

h1 + p {margin-top:50px;
}

2.2 匹配选择器

匹配所有在#div元素之后的同级p元素。

 div ~ p {background-color: #f00;}

2.3 属性选择器(重点)

CSS3新增加了属性选择器,使选择器引入了通配符的概念。这3中常用的属性选择器如下所示:

选择器描述
[attribute]用于选取带有指定属性的元素。
[attribute=value]用于选取带有指定属性和值的元素。
[attribute^=value]匹配属性值以指定值开头的每个元素。
[attribute$=value]匹配属性值以指定值结尾的每个元素。
[attribute*=value]匹配属性值中包含指定值的每个元素。
[attribute~=value]用于选取属性值中(包含)指定词汇的元素,还可以空格为分隔符。
[attribute|=value]用于选取带有以指定值(开头)的属性值的元素,还可以连字符为分隔符。

2.4 结构性伪类选择器(重点)

结构性伪类选择器是CSS3中新增加的类型选择器。常用的的结构性伪类选择器如下所示:

2.4.1 整体结构类型

  • :first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。

  • :last-child 匹配的是某父元素的最后一个子元素,可以说是结构上的最后一个子元素。

2.4.2 标签结构类型

  • :first-of-type 匹配的是某父元素下相同类型子元素中的第一个,比如 p:first-of-type,就是指所有类型为p的子元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了。

  • :last-of-type 匹配某个父元素中最后一个某一类型的元素。

2.4.3 指定子元素的序号(重点)

  • :nth-child(n) 对指定序号的子元素设置样式(从前往后数)。参数可以使数字(1、2、3)、关键字(odd、even)、公式(2n、2n+3 :使用公式时,n从0开始),参数的索引起始值时1,而不是0。

  • :nth-last-child(n) 对指定序号的子元素设置样式(从后往前数)。参数同上。

  • :nth-of-type(n) 匹配指定序号的同一种类型的子元素(从前往后数)。参数同上。

  • :nth-last-of-type(n) 匹配 指定序号的同一种类型的子元素(从后往前数)。参数同上。

2.4.4 其他伪类选择器(了解)

  • :root:将样式应用到页面的根元素中。root选择器就是将样式应用到根元素中。在整个HTML页面中,指的就是整个“html”部分。

  • :empty 指定当元素内容为空白时使用的样式。

  • :not(selector)排除selector选择器选中的元素,不对它们应用样式解析。

  • :target 对页面中某个target元素指定样式,该样式只在用户单击了页面中的链接,并且跳转到target元素后生效。

2.5 文本选择伪元素(了解)

  • ::selection指定当前元素处于选中状态部分的样式。只能向选择器应用少量CSS属性:color、background等。

2.6 表单中使用的状态伪类选择器

  • :disabled 指定当前元素处于不可用状态时的样式。

  • :enabled 指定当前元素处于可用状态时的样式。

  • :checked 指定表单中单选框或复选框处于选中状态时的样式。

我可以:

0,0,0,0

css的权重:行内样式,ID选择器,类选择器,标签

!important > 行内样式>ID选择器 > 类选择器|伪类|属性选择器 > 标签> 通配符 > 继承 > 浏览器默认属性

2.7 内容追加伪元素(重点)

  • ::before:向当前的元素前面追加内容(创建一个伪元素,其将成为匹配选中的元素的第一个子元素)

  • ::after:向当前的元素内容后面追加内容(创建一个伪元素,作为已选中元素的最后一个子元素)

    //在每个 <p> 元素前面插入内容,并设置所插入内容的样式:
    ​
    
    p:before
    { content:"开心";background-color:yellow;color:red;font-weight:bold;
    }
    a::after {content: "每一天";
    }

多学一招

注意

:before和::before写法的区别

  • 相同点

1.都可以用来表示伪类对象,用来设置对象前的内容,:before和::before写法是等效的

2.伪类对象要配合content属性一起使用

3.伪类对象不会出现在DOM中,所以不能通过js来操作,仅仅是在 CSS 渲染层加入

4.所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容,

  • 不同点

    :before是css2的写法,::before是css3的写法,在H5开发中建议使用::before比较好。

多学一招:

伪元素和伪类区别

  • 伪元素/伪对象:不存在在DOM文档中,是虚拟的元素,是创建新元素。代表某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。

  • 伪类:存在DOM文档中,逻辑上存在但在文档树中却无须标识的“幽灵”分类。

2.8 JS新增的选择器(重点)

querySelector();<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript">window.onload = function() {var div1 = document.querySelector("[myselect=hello]");div1.style.background = "red";}</script>
</head>
<body><div id="div1" myselect="hello">哈哈哈</div>
</body>
</html>
querySelectorAll();window.onload = function() {var boxs = document.querySelectorAll(".box");console.log(boxs);
}

3. CSS3新增样式属性

3.1 background-image多重背景

在CSS3中可以在一个元素里显示多个背景图像,还可以将多个背景图像进行重叠显示。(最后写在最下面)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>div {background-image: url(img/1.jpg),url(img/3.jpg),url(img/2.jpg);background-repeat: no-repeat, no-repeat, no-repeat;background-position: 5% 100%, 95% 0%, top;padding: 300px 0;}</style>
</head>
<body><div></div>
</body>
</html>

3.2 background-image的渐变

渐变配色推荐网站:Fresh Background Gradients | WebGradients.com 💎

CSS3 定义了两种类型的渐变(gradients):

  • 线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向

  • 径向渐变(Radial Gradients)- 由它们的中心定义

3.2.1 线性渐变(重点)

语法

background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
  • direction:预定义方向(to bottom、to top、to right、to left、to bottom right,等等)。

  • 定义一个角度

如果不设置direction,那么从头部开始的线性渐变,从红色开 始,转为黄色,再到蓝色:

#grad {width:200px;height: 200px;background-image: linear-gradient(red, yellow, blue);
}

其他线性渐变:

#grad {background-image: linear-gradient(to bottom right, red , yellow);
}
#grad {background-image: linear-gradient(to right, red , yellow);
}

3.2.2 径向渐变

径向渐变由它的中心定义。

为了创建一个径向渐变,你也必须至少定义两种颜色节点。颜色节点即你想要呈现平稳过渡的颜色。同时,你也可以指定渐变的中心、形状(圆形或椭圆形)、大小。默认情况下,渐变的中心是 center(表示在中心点),渐变的形状是 ellipse(表示椭圆形)。

语法

background-image: radial-gradient(shape size at position, start-color, ..., last-color);

设置形状

shape 参数定义了形状。它可以是值 circle 或 ellipse。其中,circle 表示圆形,ellipse 表示椭圆形。默认值是 ellipse。

#grad {background-image: radial-gradient(red, yellow, green);
}
#grad {background-image: radial-gradient(circle, red, yellow, green);
}

3.3 background-size背景缩放(回顾)

通过background-size设置背景图片的尺寸,就像我们设置img的尺寸一样,在移动Web开发中做屏幕适配应用非常广泛。

其参数设置如下:

a) 可以设置长度单位(px)(img大小一样)或百分比(设置百分比时,参照盒子的宽高)

b) 设置为cover时,会自动调整缩放比例,保证图片始终填充满背景区域,如有溢出部分则会被隐藏。我们平时用的cover 最多

c) 设置为contain会自动调整缩放比例,保证图片始终完整显示在背景区域。

background-image: url('images/gyt.jpg');
background-size: 300px 100px;
/* background-size: contain; */
/* background-size: cover; */

温馨提示:background-size属性一定要写在background属性后面。

3.4 background-origin背景定位原点

到目前为止,如果要给图像定位,可以使用background-position属性,但是这个属性总是以元素的左上角为坐标原点进行图像定位。background-origin属性是用来指定绘制背景图像时的起点,使用此属性可以任意定位图像的起始位置。它的语法如下:

background-origin: padding-box|border-box|content-box;

其中比较常用的参数如下所示:

  • padding-box: 默认值, 从padding区域开始显示背景。

  • border-box: 从border区域开始显示背景。

  • content-box: 从content区域开始显示背景。

div {width:400px;    height:200px; border: 10px dotted #f00;padding: 20px;background: url(img/2.jpg) no-repeat;   /*background-size: contain;*/background-origin: content-box;}

3.5 CSS3的opacity 属性(重点)

opacity 属性是设置元素的不透明级别

语法

opacity: value|inherit;
描述
value规定不透明度。从 0.0 (完全透明)到 1.0(完全不透明)。
inherit应该从父元素继承 opacity 属性的值。

3.6 CSS3的filter(滤镜) 属性

filter 属性定义了元素(通常是<img>)的可视效果

语法

 filter: grayscale(100%) | blur(px);
描述
grayscale将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0;
blur(px)给图像设置高斯模糊。"radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊; 如果没有设定值,则默认是0;这个参数可设置css长度值,但不接受百分比值。

3.7 hsla() 函数

表示色相-饱和度-亮度(Hue-saturation-lightness)模式。

  • h:表示色相,就是颜色,只不过这个颜色是用单个值来表示的

    整个颜色用圆形来表示的话,每个度数都对应一个颜色。 比如red = 0deg = 360deg green = 120deg blue = 240deg

  • s和l都用百分比表示 s 的100%就是完全饱和,偏向于原色,而0%就是完全不饱和,偏向于灰色 l 的100%就是亮度最大,偏向于白色,而0%就是没有亮度,偏向于黑色。

.box {width: 200px;height: 200px;background-color: hsla(120, 50%, 50%, 1);
}

3.8 calc() 函数

calc() 函数用于动态计算长度值。

calc(expression)
描述
expression必须,一个数学表达式,结果将采用运算后的返回值。
  • 需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px)

  • 任何长度值都可以使用calc()函数进行计算;

  • calc()函数支持 "+", "-", "*", "/" 运算;

  • calc()函数使用标准的数学运算优先级规则

3.9 box-sizing盒模型属性(回顾)

盒模型分为 : W3C标准盒模型 和 IE盒模型

1.W3C标准盒子(content-box):

在这种盒模型下,是指块元素box-sizing属性为content-box的盒模型。

我们所说的元素的 width ,实际上只包含 content

盒子总宽度 = margin + border + padding + width

2.IE盒子(border-box):

又称怪异盒模型(边框盒子),是指块元素box-sizing属性为border-box的盒模型。

在这种盒模型下,我们所说的元素的 width ,实际上包含了 content + padding + border

盒子总宽度= margin + width

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

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

相关文章

模型训练、结果存储、API 调用的系列优化|ModelWhale 版本更新

蜂飞蝶舞&#xff0c;万物并秀&#xff0c;明媚的春光中 ModelWhale 带来新一轮的版本更新&#xff0c;期待为大家带来更优质的使用体验。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 IDE 中使用训练记录&#xff08;专业版✓ 团队版✓&…

Ansible04-Ansible Vars变量详解

目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…

迈的普拉姆利普绘图:深入解析与实战应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;matplotlib绘图的基本原理 代码案例 二、深入了解&#xff1a;matplo…

数据结构与算法02-排序算法

介绍 排序算法是计算机科学中被广泛研究的一个课题。历时多年&#xff0c;它发展出了数十种算法&#xff0c;这些 算法都着眼于一个问题&#xff1a;如何将一个无序的数字数组整理成升序&#xff1f;先来学习一些“简单排序”&#xff0c;它们很好懂&#xff0c;但效率不如其他…

闽盾杯 2021 DNS协议分析

今年CISCN的Tough DNS 的前戏就是DNS协议分析 直接可以查找到flag的base64形式Zmxh 发现就是请求的dnslog 携带的数据 过滤器就是 dns tshark -r dns.pcapng -T json -Y "dns" >1.json 字段选择 dns.qry.name tshark -r dns.pcapng -T json -Y "dns"…

内网渗透-隧道搭建ssp隧道代理工具

内网渗透-隧道搭建&ssp隧道代理工具 目录 内网渗透-隧道搭建&ssp隧道代理工具spp隧道代理工具spp工作原理图cs上线主机spp代理通信服务端配置客户端配置CS配置设置CS生成木马的监听器配置CS监听上线的监听器生成木马 spp隧道搭建服务端配置客户端配置CS配置 内网穿透&a…

根据模板和git commit自动生成日·周·月·季报

GitHub - qiaotaizi/dailyreport: 日报生成器 GitHub - yurencloud/daily: 程序员专用的日报、周报、月报、季报自动生成器&#xff01; config.json: { "Author": "gitname", "Exclude": ["update:", "add:", "…

实际测试stm32中断优先级

HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);第一个函数 HAL_NVIC_SetPriority 是用来设置单个优先级的抢占优先级和响应优先级的值。第二个…

恒压频比开环控制系统Matlab/Simulink仿真分析(SPWM控制方式)

介绍恒压频比的开环控制方法驱动永磁同步电机的转动&#xff0c;首先分析恒压频比的控制原理&#xff0c;然后在Matlab/Simulink中进行永磁同步电机恒压频比开环控制系统的仿真分析&#xff0c;最后将Simulink中的恒压频比控制算法生成代码加载到实际工程中进行工程实现。 一、…

丝绸之路网络安全论坛成功举办,开源网安受邀分享软件供应链安全落地经验

5月23日&#xff0c;2024第八届丝绸之路网络安全论坛在陕西宾馆会议中心成功举办&#xff0c;本次论坛由陕西省信息网络安全协会主办&#xff0c;以“汇聚万千智慧 夯实安全堤坝”为主题&#xff0c;邀请业内专家学者、企业代表、行业代表共计400余人参加。开源网安常务副总王颉…

【PostgreSQL17新特性之-冗余IS [NOT] NULL限定符的处理优化】

在执行一个带有IS NOT NULL或者NOT NULL的SQL的时候&#xff0c;通常会对表的每一行&#xff0c;都会进行检查以确保列为空/不为空&#xff0c;这是符合常理的。 但是如果本身这个列上有非空&#xff08;NOT NULL&#xff09;约束&#xff0c;再次检查就会浪费资源。甚至有时候…

Leetcode3165. 不包含相邻元素的子序列的最大和(Go中的线段树分治包含多类数据使用maintain进行维护)

题目截图 题目分析 不能取相邻的&#xff0c;就是打家劫舍 然后更改某一个值就是单点更新 更新后&#xff0c;需要更新区间的值 需要注意的是&#xff0c;使用分治时需要考虑到一头一尾的问题&#xff0c;所以有4种情况&#xff08;选or不选在两个位置&#xff09; 这四种情况…

编程入门(七)【虚拟机VMware安装Linux系统Ubuntu】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;Ubuntu知多少&#x1f680;安装的前期准备&am…

SQL—DQL之执行顺序(基础)

一、引言 1、编写顺序 2、执行顺序 介绍&#xff1a; DQL语句&#xff08;数据查询语句&#xff09; 1、首先先执行的是 FROM &#xff0c;通过 FROM 来决定我要查询的是哪一张表的数据。 2、紧接着通过 WHERE 来指定查询的条件。 3、第三步就是通过 GROUP BY 以及 HAVING 来…

中国BI步入增长大周期,腾讯云ChatBI加速AI+BI融合

过去十年&#xff0c;大数据技术的快速发展&#xff0c;让数据消费前进一大步&#xff0c;数据价值得到一定程度的挖掘与释放&#xff0c;真正开启了“用数”的大时代。但数据分析繁杂的技术栈、复杂的处理过程以及程式化的交互方式&#xff0c;让“数据消费”的门槛始终降不下…

现在的时代,您必会的“调教”AI技巧

人工智能大行其道&#xff0c;如何借势&#xff1f;始于问询。要得要得预期&#xff0c;精于“提问技巧”&#xff01; (笔记模板由python脚本于2024年05月30日 18:37:27创建&#xff0c;本篇笔记适合有独立编程基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#…

基于 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案

作者&#xff1a;田向阳&#xff0c;联通西部创新研究院 大数据专家 共创&#xff1a;SelectDB 技术团队 导读&#xff1a; 数据是 5G 全连接工厂的核心要素&#xff0c;为支持全方位的数据收集、存储、分析等工作的高效进行&#xff0c;联通 5G 全连接工厂从典型的 Lambda 架…

Presto 从提交SQL到获取结果 源码详解(3)

物理执行计划 回到SqlQueryExecution.startExecution() &#xff0c;执行计划划分以后&#xff0c; // 初始化连接&#xff0c;获取Connect 元数据&#xff0c;添加会话&#xff0c;初始ConnectId metadata.beginQuery(getSession(), plan.getConnectors()); // 构建物理执行…

AngularJS基础语法(2009版本)

jquery和AngularJS 数据绑定和获取对比&#xff1a; jquery&#xff0c;要操作DOM&#xff1a; angularJS&#xff0c;无需操作DOM就可以进行动态数据变化&#xff1a; 要使用Angularjs就需要在html页面先引入&#xff1a; ng-app&#xff1a; html页面中&#xff0c;需要给…

redis(17):什么是布隆过滤器?如何实现布隆过滤器?

1 布隆过滤器介绍 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它基于位数组和多个哈希函数的原理,可以高效地进行元素的查询,而且占用的空间相对较小,如下图所示: 根据 key 值计算出它的存储位置,然后将此位置标…