CSS初识(私有前缀,属性/伪类/伪元素选择器,颜色,文本,边框圆角/阴影/图片)

了解了html5中html部分的提升,接下来,看一下CSS3吧!

CSS3的现状

  • 浏览器支持程度差,需要添加私有前缀

    • 通过caniuse可查询CSS3各特性的支持程度,一般兼容性处理的常见方法是为属性添加私有前缀,如不能解决,应避免使用,无需刻意去处理CSS3的兼容性问题。
    	<!DOCTYPE html>
    	<html>
    	<head lang="en">
    	    <meta charset="UTF-8">
    	    <title></title>
    	    <style>
    	        /*box变成半径为50px的圆*/
    	        .box{
    	            width: 100px;
    	            height: 100px;
    	            /*加上私有前缀*/
    	            border-radius: 50px;
    	            /*-webkit- 谷歌*/
    	            -webkit-border-radius: 50px;
    	            /*-moz- 火狐*/
    	            -moz-border-radius: 50px;
    	            /*-o- 欧鹏*/
    	            -o-border-radius:50px;
    	            /*-ms- IE*/
    	            -ms-border-radius:50px;
    
    	            /*在学习开发当中不需要考虑兼容性,如果是开发的pc端页面最好是加上私有前缀*/
    	            /*如果在移动端开发,只需要考虑兼容webkit浏览器,主流浏览器内容都是webkit*/
    	        }
    	    </style>
    	</head>
    	<body>
    	   <div class="box"></div>
    	</body>
    	</html>
    
  • 移动端支持优于PC端

  • 不断改进中

  • 应用相对广泛

手册

  • [] 表示全部可选项
  • || 表示或者
  • | 表示多选一
  • ? 表示0个或者1个
    • 表示0个或者多个
      
  • {} 表示范围

选择器

CSS3选择器与jQuery中所提供的绝大部分选择器兼容。

属性选择器

通过属性来选择元素,具体有以下5种形式:

  • E[attr] 表示存在attr属性即可;
  • E[attr=val] 表示属性值完全等于val;
  • E[attr*=val] 表示的属性值里包含val字符并且在"任意"位置;
  • E[attr^=val] 表示的属性值里包含val字符并且在"开始"位置;
  • E[attr$=val] 表示的属性值里包含val字符并且在"结束"位置;
  • 也要考虑到权重的问题。
/*[attribute] 只要标签里面有这个属性就能选中  $('[class]')*/
[class]{
    color: red;
}
/*[attribute=value] 有这个属性并且它的值完全等于value  $('[class=value]')*/
[class='abc']{
    color: green;
}
/*[attribute!=value] 有这个属性并且值不等于value $('[class!="abc"]') */
/*在css当中属性选择器是没有非*/
/* [class!='abc']{
    color:blue;
}*/
/*[attribute^=value] 有这个属性并且属性值以value开头 $('[class^="abc"]')*/
[class^='abc']{
    color: yellow;
}
/*[attribute$=value] 有这个属性并且这个属性的值要以value结尾  $('[class$="abc"]')*/
[class$='abc']{
    color: pink;
}
/*[attribute*=value] 有这个选择器并且这个值包含value  $('[class*="abcd"]')*/
[class*='abcd']{
    color: black;
}

复制一下试试看吧!

伪类选择器

除了:link、:active、:visited、:hover,CSS3又新增了其它的伪类选择器。

  • 以某元素相对于其父元素或兄弟元素的位置来获取无素的结构伪类。

  • 先通过li来确定父元素,去找这个父元素的当中的子元素,再找到第几个子元素,判断是不是这个类型,如果不是则选择器没用,如果是则可以设置样式。

    • E:first-child第一个子元素
    • E:last-child最后一个子元素
    • E:nth-child(n) 第n个子元素,计算方法是E元素的全部兄弟元素
    • E:nth-last-child(n) 同E:nth-child(n) 相似,只是倒着计算
    • E:empty 选中没有任何子节点的E元素(使用不是非常广泛)
    • E:nth-child(even){};偶数行设置样式。
    • E:nth-child(odd){}:奇数行设置样式。
    	/*empty本身就是空的意思 span:empty这是一个span标签并内容为空
    		则会被选中
    	*/
    	span:empty {
    		display: none;
    	}
    
    • 注意:n遵循线性变化,其取值0、1、2、3、4、... 但是当n<=0时,选取无效;n可以是多种形式:nth-child(2n)、nth-child(2n+1)、nth-child(-1n+5)等; n一定要放在表达式的前面。
  • 目标伪类

    • E:target 结合锚点进行使用,处于当前锚点的元素会被选中;
    	/*目标伪类选择器,它选中的当前锚点*/
    	h2:target {
    		color: green;
    	}
    
    • E:not 排除 包含某个条件 选择器
伪元素选择器
  • E::first-letter文本的第一个字母或字(如中文、日文、韩文等);
/*注意要设置首字母首字必须是块级元素*/
span{
	display: block;
}
span::first-letter{
	color: red;
	font-size: 50px;
}
li::first-letter{
	color: red;
}
  • E::first-line 文本第一行;
p::first-line{
	color: green;
}
  • E::before、E::after是一个行内元素,需要转换成块元素
  • E:after、E:before 在旧版本里是伪类,在新版本里是伪元素,新版本下E:after、E:before会被自动识别为E::after、E::before,按伪元素来对待,这样做的目的是用来做兼容处理。
  • E::selection 可改变选中文本的样式;
p::selection{
	background: pink;
	color: blue;
	/*不能设置字体大小*/
	font-size: 40px;
}
  • 注意:":" 与 "::" 区别在于区分伪类和伪元素。伪类的效果可以通过添加一个实际的类来达到,而伪元素的效果则需要通过添加一个实际的元素才能达到。

颜色

新增了RGBA、HSLA模式,其中的A 表示透明度通道,即可以设置颜色值的透明度,相较opacity,它们不具有继承性,即不会影响子元素的透明度。

  • Red、Green、Blue、Alpha即RGBA
  • Hue、Saturation、Lightness、Alpha即HSLA
  • R、G、B 取值范围0~255
  • H 色调 取值范围0~360,0/360表示红色、120表示绿色、240表示蓝色
  • S 饱和度 取值范围0%~100%
  • L 亮度 取值范围0%~100%
  • A 透明度 取值范围0~1
  • 透明度比较补充:
    • opacity只能针对整个盒子设置透明度,子盒子及内容会继承父盒子的透明度;
    • transparent 不可调节透明度,始终完全透明;
    • RGBA、HSLA可应用于所有使用颜色的地方。

文本

text-shadow,可分别设置偏移量、模糊度、颜色(可设透明度)。

  • 水平偏移量,正值向右,负值向左,单位px;
  • 垂直偏移量,正值向下,负值向上,单位px;
  • 模糊度是不能为负值。
/*第二个li的文字有阴影  往左和上偏移 颜色是红*/
li:nth-child(2){
	text-shadow: -3px -3px 5px red;
}
/*最后一个li设置 两个阴影*/
/*以英文逗号分隔*/
li:last-child{
	text-shadow: 6px 6px 5px #000,-3px -3px 5px red,-9px -9px 5px green;
}

边框

  • 百分比宽度的时候怎么防止溢出?box-sizing: border-box;
边框圆角(border-radius)

边框圆角

可分别设置长、短半径,以"/"进行分隔,遵循"1,2,3,4"规则,"/"前面的1~4个用来设置横轴半径(分别对应横轴1、2、3、4位置 ),"/"后面1~4个参数用来设置纵轴半径(分别对应纵轴1、2、3、4位置)。

//正圆形
border-radius: 50%;
border-radius: 100px;
border-radius: 100px 100px;
border-radius: 100px 100px 100px 100px;
border-radius: 100px 100px 100px 100px / 100px 100px 100px 100px;
边框阴影(box-shadow)
  • 水平偏移量,正值向右,负值向左;
  • 垂直偏移量,正值向下,负值向上;
  • 模糊度是不能为负值;
  • inset可以设置内阴影;
/*
1.x轴偏移
2.y轴偏移
3.阴影的模糊度
4.阴影的延伸(可选)
5.阴影的颜色
*/
box-shadow: 3px 3px 5px 10px #ccc;
边框图片(border-image)
  • round和repeat之间的区别
    • round 会自动调整尺寸,完整显示边框图片。
    • repeat 单纯平铺多余部分,会被"裁切"而不能完整显示。
  • 更改裁切尺寸:border-image-slice
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS3边框</title>
	<style>
		body {
			margin: 0;
			padding: 0;
			background-color: #F7F7F7;
		}

		ul {
			width: 960px;
			margin: 40px auto;
			list-style: none;
			background-color: #FFF;
		}

		li {
			padding: 15px;
		}

		li:nth-child(2) {
			width: 300px;
			height: 150px;

			/*
			1.边框图片资源的路径
			2.切割的尺寸
			3.边框的宽度
			4.边的平铺方式
			*/

			/*1.边框图片资源的路径*/
			border-image-source: url("./images/border.png");
			/*2.切割的尺寸*/
			/* 切了4刀  上  右  下  左 单位是px但是默认都是不带参数*/
			/**/
			border-image-slice:38 38 27 27;
			/*3.边框的宽度*/
			border-image-width: 20px;
			/*4.边的平铺方式*/
			/* stretch 拉伸  把切割的九宫格当中的边对应的图标拉伸 */
			/* round 环绕  会按照整数的图标来排列  不会损坏图标*/
			/* repeat 平铺  从边的中线开始平铺 不会保证图标的完整性*/
			border-image-repeat: round;
		}
		
	</style>
</head>
<body>
	<ul>
		<li>
			<div class="border-image">
				<img src="./images/border.png" alt="">
			</div>
		</li>
		<li>
			<div class="border-image"></div>
		</li>
		<li>
			<div class="border-image"></div>
		</li>
	</ul>
</body>
</html>

注意点

  • 默认字体大小是16px,间隙就是3px(文字的基线和图片的底线对齐)
  • 去除图片间隙的方法:
    • font-size:0px;
    • img{display:block;};
    • img{vertical-align:top};值可以是top,middle,bottom都可以(middle值表示居中对齐)
  • 设置position:fixed后,元素的基准是以浏览器窗口为基准的。不设置的话是以body为基准的,body的宽高是由内容撑开的。

这次只介绍了CSS3的一部分内容,下节继续哈。如果本文有什么错误,欢迎留言指正,谢谢!如果您觉得还不错,记得收藏下,谢谢,多谢大家支持!

转载于:https://my.oschina.net/yxmBetter/blog/830935

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值