博客列表 >选择器;盒模型padding和margin的详细—2019年9月3日

选择器;盒模型padding和margin的详细—2019年9月3日

L先生的博客
L先生的博客原创
2019年09月05日 21:46:22773浏览

选择器


标签选择符:

用标签名来表示,用来描述网页元素类型的;通常与其他选择符组合使用,返回一组元素

p{text-align:center;} /*段落 文本居中*/


id选择符:

用'#'表示,用来选择网页中用id属性声明的元素,只返回一个元素

#header{backgroud-color:#ccc;} /*设置背景为灰色*/


类选择符:

用英文的'.'来表示,用来选择使用了class属性声明的元素,通常返回一组相关元素

.blue{color:blue;} /*设置元素文本颜色为蓝色*/


属性选择符:

除class和id,style以外的属性都可以,属性放在一对方括号中[],可以指定多个属性,还可以以对属性值进行正则查询。

[title="http://www.php.cn"]{font-size:20px;}/*将具有该属性的元素文本大小设置为20像素*/


群组选择符:

可以设置多个元素共用样式,用逗号分隔每个选择符

h1,h2,h3,h4,h5,h6{font-weight:lighter;}/*去掉标题元素的加粗样式*/


后代选择符:

根据元素隶属关系来选择,多个选择符之间,用空格分隔

section h1{color:red;}/*将section元素下面所有h1元素文本设置为红色*/


子代选择符:

只选择当前元素直接子元素,用'>'表示,非常复杂,应用了大量伪类元素,是学习的重点。

div > h1{ color: green;}/*将div元素下面子级h1元素文本设置为绿色*/


伪类选择符:

伪类主要应用在特定标签上,表示当前元素的状态。例如a标签的4种状态,未访问,已访问,鼠标悬停,点击中等

a:visited { color: gray;} /*将访问过的链接文本颜色设置为灰色*/


伪元素选择符,设置首字母下沉效果,或者首行的显示效果,主要适合英文,中文应用不多,了解即可

first-letter:设置段落首行的首字母样式

first-line:设置段落首行文本的样子


通用选择符*与同辈选择符+(不推荐使用)

*{font-size: 12px;}: /*设置网页中文本均为12像素*/

可以一次性设置所有标签的统一样式,效率低,影响到了样式继承

p + a{color: pink;}: /*设置p和相邻a标签文本为粉色*/

通常用其他更高效的选择符代替他

实例演示相邻选择器与兄弟选择器,并分析异同


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择器</title>
    <style>
    	ul {
		    margin: 0;  /*将外边距清零*/
		    padding-left: 0;  /*将左侧的内边距清零*/
		    border: 1px dashed red;  /*设置红色虚线*/
		}
		ul li {
    		list-style-type: none;  /*将li标签的黑色圆点类型去掉*/
		    width: 40px;
		    height: 40px;  /*宽高都设置为40px*/
		    background-color: wheat;  /*设置背景色*/
		    /*border: 1px solid black;*/   /*边框*/
		
		    /*水平和垂直的居中*/
		    text-align: center;  /*水平*/
		    line-height: 40px;  /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/
		
		    border-radius: 50%;   /*设置圆角,50%*/
		
		    /*将一个块级元素转为内联元素*/
		    display: inline-block;
			/*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/
		    box-shadow: 2px 2px 1px #888;
		}
    	/*相邻选择器*/
		#bg-blue + * {
		    background-color: yellow;
		}
		
		/*兄弟选择器*/
		#bg-blue ~ * {
		    /*background-color: green;*/
		}
    </style>
</head>
<body>
<ul>
    <li class="bg-green">1</li>
    <li id="bg-blue">2</li>
    <li class="bg-green">3</li>
    <li class="bg-green">4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
</ul>

<div>
    <p>猪哥</p>
    <li>朱老师</li>
    <p>西门大官人</p>
</div>

<div>
    <p id="bg-blue">欧阳克</p>
    <li>金莲妹妹</li>
    <a href="">百度</a>
</div>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

        分析:代码中注释了兄弟选择器,只有相邻选择器,#bg-blue + * { background-color: yellow;} 会将id为bg-blue的元素的下一个同级元素的背景变为黄色,代码中有两处,打开代码中的兄弟选择器#bg-blue ~ * {/*background-color: green;*/},运行,会发现id为bg-blue的元素的后面所有的同级元素都变成了绿色。由此可见,兄弟选择器的优先级大于相邻选择器。

实例演示:nth-child() 和 :nth-of-type()选择器,并分析异同

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择器</title>
    <style>
    	ul {
		    margin: 0;  /*将外边距清零*/
		    padding-left: 0;  /*将左侧的内边距清零*/
		    border: 1px dashed red;  /*设置红色虚线*/
		}
		ul li {
    		list-style-type: none;  /*将li标签的黑色圆点类型去掉*/
		    width: 40px;
		    height: 40px;  /*宽高都设置为40px*/
		    background-color: wheat;  /*设置背景色*/
		    /*border: 1px solid black;*/   /*边框*/
		
		    /*水平和垂直的居中*/
		    text-align: center;  /*水平*/
		    line-height: 40px;  /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/
		
		    border-radius: 50%;   /*设置圆角,50%*/
		
		    /*将一个块级元素转为内联元素*/
		    display: inline-block;
			/*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/
		    box-shadow: 2px 2px 1px #888;
		}
    	/*伪类: 子元素选择器*/
		ul :first-child {  /*注意ul后的空格*/
		    background-color: blue;
		}
		
		ul :last-child {
		    background-color: red;
		}
		
		ul :nth-child(6) {   /*索引从1开始*/
		    background-color: pink;
		}
		/*倒数第3个*/
		ul :nth-last-child(4) {
		    background-color: green;
		}
    </style>
</head>
<body>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
</ul>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看nth-child()选择器在线实例


实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择器</title>
    <style>
    	ul {
		    margin: 0;  /*将外边距清零*/
		    padding-left: 0;  /*将左侧的内边距清零*/
		    border: 1px dashed red;  /*设置红色虚线*/
		}
		ul li {
    		list-style-type: none;  /*将li标签的黑色圆点类型去掉*/
		    width: 40px;
		    height: 40px;  /*宽高都设置为40px*/
		    background-color: wheat;  /*设置背景色*/
		    /*border: 1px solid black;*/   /*边框*/
		
		    /*水平和垂直的居中*/
		    text-align: center;  /*水平*/
		    line-height: 40px;  /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/
		
		    border-radius: 50%;   /*设置圆角,50%*/
		
		    /*将一个块级元素转为内联元素*/
		    display: inline-block;
			/*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/
		    box-shadow: 2px 2px 1px #888;
		}
		
		/*伪类: 类型选择器*/
		ul li:first-of-type {
		    background-color: darkorange;
		    color: white;
		}
		
		ul li:last-of-type {
		    background-color: darkgreen;
		    color: white;
		}
		
		ul li:nth-of-type(5) {
		    background-color: darkgreen;
		    color: white;
		}
		/*将每个div中的第二个子元素背景设置绿色*/
		div :nth-child(2) {
		    background-color: lightgreen;
		}
		/*选择文档中的第二个p标签的内容*/
		p:nth-of-type(2) {
		    background-color: yellow;
		}
		/*选中第一个div中的第三个元素*/
		div:first-of-type :nth-child(3) {
		    /*background-color: lightblue;*/
		}
		/*打开上面注释,发现第二个标签变为了蓝色,因为他也是第一个div中的第三个元素,两者结合的优先级会更高*/
    </style>
</head>
<body>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
</ul>

<div>
    <p>猪哥</p>
    <li>朱老师</li>
    <p>西门大官人</p>
</div>

<div>
    <p id="bg-blue">欧阳克</p>
    <li>金莲妹妹</li>
    <a href="">百度</a>
</div>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看nth-of-type()选择器在线实例


关注点不同, 如果关注点是位置: 用nth-child

既关注位置, 又关注类型, 用 nth-of-type

两者结合使用的优先级会更高于单个的使用

padding 对盒子大小的影响与解决方案, 使用宽度分离或box-sizing

使用三种方式写一个加上边框为300px的块,内部图片为200*200px,边框为10px

一般方式:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>调皮的内边距padding</title>
    <style type="text/css">
    	.box1 {
		    width: 200px;
		    height: 200px;
		    border: 10px solid black;
		    /*照片的宽度是200px*/
		    background-color: lightgreen;
		    padding: 40px;
		    /*padding变大时,盒子也会变大*/
		}		
    </style>
</head>
<body>
<!--将图片显示在容器中间-->
<div class="box1">
    <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="头像" width="200" height="200">
</div>
<br />

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

        padding变大时,盒子也会变大,padding是在content大小的基础上扩大的,和图片的大小无关,图片会显示在content的左上角,如果要将图片显示在正中间,需要计算,300px的块,边框为10,则content为200*200,padding为40.

宽度分离:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>调皮的内边距padding</title>
    <style type="text/css">
    	.wrap {
		width: 300px;
		height: 300px;
	}		
	.box2 {
		border: 10px solid black;
		padding: 40px;
		background-color: lightblue;	    
	}
    </style>
</head>
<body>
<!--宽度分离-->
<div class="wrap">
    <div class="box2">
        <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="头像" width="200" height="200">
    </div>
</div>
<br />
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

嵌套div,将外侧的div的content固定宽高为300*300,然后编辑内部的div,border为10px,padding为40px。

box-sizing

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>调皮的内边距padding</title>
    <style type="text/css">
    	.box3 {
	    width: 300px;
	    height: 300px;
	    box-sizing: border-box;
	    /*padding: 80px;*/
	    padding: 40px;
	    background-color: pink;
	    border: 10px solid black;
	}
    </style>
</head>
<body>

<!--box-sizing-->
<div class="box3">
    <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="小姐姐" width="200" height="200">

</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

使用了box-sizing: border-box;盒子的边框固定为300*300px,border为10,padding为40图片居中,如果padding为80,则图片完全紧贴右下角。

 实例演示: margin中的同级塌陷, 嵌套传递与自动挤压, 并提出解决方案或应用场景

同级塌陷:

        两个盒子同级排列时,比如:一个盒子在上一个在下时,设置上方盒子A的margin-button为50px,下方盒子B的margin-top为50px,控制台查看时,A的下方外边距依然是50px,B的上方外边距依然是50px,但是在视觉上两个之间的距离依然是50px,此时更改B盒子的上方外边距为30px,控制台查看时,A的下方外边距依然是50px,B的上方外边距依然是30px,但是在视觉上两个之间的距离依然是50px,B盒子的上外边距塌陷到A盒子的下外边距中。

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    	.box1 {
	    /*box-sizing: border-box;*/
	    width: 150px;
	    height: 150px;
	    background-color: lightblue;
	    margin-bottom: 50px;
	}
	
	.box2 {
	    width: 150px;
	    height: 150px;
	    background-color: lightgreen;
	    margin-top: 30px;
	}
    </style>
    <title>捉摸不定的外边距maring</title>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

嵌套传递:

两个块级元素程父级或嵌套关系,子元素的margin会传递到父元素上

解决方法:如想要子元素距父元素的上方50px,设置外边距会传递,此时可以设置父级元素的内边距为50px

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    	.box3 {
		    box-sizing: border-box;
		    width: 150px;
		    height: 150px;
		    background-color: lightblue;
		    padding-top: 50px;
		}
		.box4 {
			width: 100px;
		    height: 100px;
		    background-color: lightgreen;
		    /*margin-top: 50px;*/
		}
    </style>
    <title>捉摸不定的外边距maring</title>
</head>
<body>
<div class="box3">
    <div class="box4"></div>
</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

自动挤压:

        外边距的自动挤压,margin-left:auto;元素会尽可能的压到右边,margin-right:auto;元素会尽可能的压到左边,同时作用会挤压到中间,页面布局时,可以margin:30px auto;居中并且距离顶部30px

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    	.box5 {
		    box-sizing: border-box;
		    width: 150px;
		    height: 150px;
		    background-color: lightblue;
		    margin: 30px auto;
		}
    </style>
    <title>捉摸不定的外边距maring</title>
</head>
<body>
<div class="box5"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

在不同情况下选择合适的选择器会事半功倍。

盒子的内边距相关展示内容时,需要计算,注意边框。

盒子的外边距的三种情况需要在布局时多加注意

总是感觉对盒子的理解及使用掌握依旧不是很好,依旧要好好学习。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议