攻克CSS记录(1)— 选择器

一直觉得自己CSS很搓很搓很搓~~~, 入职后决心要加强,以前学CSS都是看比较实践的书籍,如《精通CSS》这些,大多是技巧,靠记忆~~ 发现这样学来实在是根基不牢,永远都要跟着别人后头走。 个人觉得要在某个领域中强大,基础原理是必不可少的,于是有了本人第一篇CSS学习的文章,文章主要是根据《CSS权威指南》来对自己的一些不牢靠的知识进行记录巩固,发现对这本书真是相见恨晚,以前学CSS太浮躁了,地基没打好唉~~废话不多说了,进入正题吧~


在选择器上,主要是一些特殊性和层叠顺序规则需要熟悉。


选择器的特殊性:

选择器的特殊性由选择器本身的组件确定。特殊性值表述为4个部分,如:0,0,0,0。一个选择器的具体特殊性如下确定:

  • ID属性值,加 0, 1, 0, 0。
  • 类属性值、属性选择或伪类,加 0, 0, 1, 0。
  • 元素和伪元素, 加 0, 0, 0, 1。
  • 结合符和通配符对特殊性没有任何贡献即便无贡献,但和继承值还有浏览器默认样式相比,优先级还是结合符或通配符高

一般第一个0是为内联样式保留的。

层叠规则:

按以下步骤顺序确定层叠规则:
  1. 找出匹配元素的规则
  2. 按显示权重对匹配元素所有声明排序,!important规则权重高于没有!important的规则;
  3. 按来源对声明排序,包括3种来源:创作人员、读者和用户代理。创作人员样式胜过读者样式。有!important标识的读者样式要强于所有其他样式,这包括有!important标识的创作人员样式。创作人员样式和读者样式都比用户代理的默认样式要强。
  4. 按特殊性对声明排序,较高特殊性胜出。
  5. 按顺序对声明排序,排在后的生出。

一个坑

好吧,先来个例子: .test p span{color:red}; 特殊行为: 0, 1, 2, 0。

这次终于好不容易发挥了我一次研究生的钻研精神,我就想了,这底层估摸是按位来实现的吧?这样就只需1个数字就可以表示了。

有了猜测就要去论证,如何论证? 发挥我无耻的结论导向证明的精神,假设浏览器用1个数字按位表示特殊性,那么每一类别的特殊性肯定都是有上限的,正常情况下应该不会太大,于是有了下面的代码来证明:

基本思路:

给一个id为test的div元素添加样式规则,同时给这个元素添加一定数量的class,再将这些class结合给出另一个规则,如果到达一定数量的class规则覆盖了id规则,那么就证实了我的猜想。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>Selector Demo</title>
		<style>
			#test {
				color: red;
			}
		</style>
	</head>
	<body>
		<div id="test">
			这是一个div,id为test
		</div>
		类添加次数:
		<input type="text" id="count" />
		<input type="button" id="add" value="添加" />
		<script>
			document.getElementById('add').onclick = function() {
				var t = document.getElementById('test');
				var count = Number(document.getElementById('count').value);
				var cls = '';
				var css = '';
				//加它个count个类,同时拼接CSS字符串
				for (var i = 0; i < count; ++i) {
					cls += 't' + i + ' ';
					css += '.t' + i;
				}
				css += '{color: blue;}'
				t.className = cls;
				//插入规则
				loadStyleString(css);
			};

			//插入一条css新规则
			var loadStyleString = function(css) {
				var style = document.createElement('style');
				style.type = "text/css";
				try {
					style.appendChild(document.createTextNode(css));
				} catch(e) {//IE
					style.styleSheet.cssText = css;
				}
				document.getElementsByTagName('head')[0].appendChild(style);
			}

		</script>
	</body>
</html>

在输入框中输入要添加的类次数,JS代码会按照次数给div元素添加对应次数的类,同时会插入一条对应的规则,在代码中,id规则为#test{color:red},

而类规则为{color:blue},所以如果结论正确,那么div的字体颜色会变为蓝色。

通过本屌丝推测性的不懈努力的测试,发现255是个分水岭,超过255次时,也就是2的8次方,二进制11111111,在chrome下div的文字颜色变成了蓝色,

也就是添加的类为256次时,特殊性变成了1,0,0,0,与ID属性特殊性持平,由于规则在后,故而胜出。

为了保持完整性,以下在各大浏览器进行了测试:

FF13, chrome22, IE9(包括在其环境下的IE7/8模式),safira5 下,256个类带来的特殊性都等于1个id的特殊性,

然而在opera12,IE9下的怪异模式以及IETester下的IE6/7中,均不会超过id的特殊性,

推测为分别用数字保存,而不是用一个数字按位存储。


结论:

例子比较极端,正常开发中我想是没有人会弄个256个类的。。。JUST FOR FUN ~ ~ !
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
资源下载链接为: https://pan.quark.cn/s/dab15056c6a5 Oracle Instant Client是一款轻量级的Oracle数据库连接工具,能够在不安装完整Oracle客户端软件的情况下,为用户提供访问Oracle数据库的能力。以“instantclient-basic-nt-12.1.0.1.0.zip”为例,它是针对Windows(NT)平台的Instant Client基本版本,版本号为12.1.0.1.0,包含连接Oracle数据库所需的基本组件。 Oracle Instant Client主要面向开发人员和系统管理员,适用于数据库查询、应用程序调试、数据迁移等工作。它支持运行SQL*Plus、PL/SQL Developer等管理工具,还能作为ODBC和JDBC驱动的基础,让非Oracle应用连接到Oracle数据库。 安装并解压“instantclient_12_1”后,为了使PL/SQL Developer等应用程序能够使用该客户端,需要进行环境变量配置。设置ORACLE_HOME指向Instant Client的安装目录,如“C:\instantclient_12_1”。添加TNS_ADMIN环境变量,用于存放网络配置文件(如tnsnames.ora)。将Instant Client的bin目录添加到PATH环境变量中,以便系统能够找到oci.dll等关键动态链接库。 oci.dll是OCI(Oracle Call Interface)库的重要组成部分。OCI是Oracle提供的C语言接口,允许开发者直接与数据库交互,执行SQL语句、处理结果集和管理事务等功能。确保系统能够找到oci.dll是连接数据库的关键。 tnsnames.ora是Oracle的网络配置文件,用于定义数据库服务名与网络连接参数的映射关系,包括服务器地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值