<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<!-- <link rel="stylesheet" href="style.css"> -->
<title>Document</title>
</head>
<style>
ul,
li {
margin: 0;
padding: 0
}
ul li {
list-style: none;
width: 40px;
height: 40px;
border: 1px solid #000;
display: inline-block;
text-align: center;
line-height: 40px;
border-radius: 50%;
}
.box1,
.box2,
.box3 {
border: 1px solid #000;
width: 500px;
float: left;
}
.box {
width: 100px;
height: 100px
}
#item {
background: yellow;
}
/* 相邻选择器 */
/* #item后面相邻一个元素 */
#item+* {
background: coral;
}
/* #item后面相邻一个li元素 */
#item+li {
background: chartreuse;
}
/* 跟li同级的后面第一个p元素 */
li+p {
color: red
}
/* 连续选择相邻的同级元素 */
li+p+span {
color: green
}
/* 兄弟选择器 */
#item+li~li {
background: chocolate
}
/* li元素以后的所有同级div */
li~div {
background: blue
}
/* 伪类选择器 */
/* :nth-child() */
/* ul下第一个子元素 */
.list :first-child {
background: grey;
}
/* ul下倒数第二个子元素 */
.list :nth-last-child(2) {
background: red;
}
/* ul下第五个子元素 */
.list :nth-child(5) {
border: none;
}
/* :nth-of-type() */
/* ul下p标签第二个 */
ul p:nth-of-type(2) {
font-size: 20px
}
/* ul下第一个li */
ul li:first-of-type {
color: red
}
ul li:last-of-type {
color: lightskyblue
}
/* padding对盒子大小的影响 */
.box4 {
width: 300px;
background: pink;
border: 1px;
padding: 50px
}
.box5 {
width: 200px;
height: 200px;
background: yellow;
border: 1px;
padding: 100px;
}
/* 宽度分离 */
.box6 {
width: 300px;
background: hotpink;
border: 1px;
padding: 50px
}
.box7 {
padding: 100px;
background: lightblue;
border: 1px;
}
/*box-sizing*/
.box8 {
width: 300px;
background: orange;
border: 1px;
padding: 50px
}
.box9 {
box-sizing: border-box;
width: 300px;
border: 1px;
padding: 100px;
background: lightblue
}
.box10 {
width: 100px;
height: 100px;
background: lightblue;
margin-bottom: 50px;
}
.box11 {
width: 100px;
height: 100px;
background: lightgreen;
margin-top: 50px;
}
.box12 {
width: 150px;
height: 150px;
background: yellow;
}
.box13 {
width: 100px;
height: 100px;
background: cyan;
margin: 50px
}
.box14 {
background: blue;
width: 100px;
height: 100px;
margin: 0 auto;
}
</style>
<body>
<div class="box1">
<!-- 选择器 -->
<h1>选择器</h1>
<ul class="list">
<li>1</li>
<li>2</li>
<li id="item">3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<p>How are you!</p>
<span>你好啊!</span>
<p>baidu</p>
<div class="box"></div>
</ul>
</div>
<div class="box3">
<h1> margin中的同级塌陷, 嵌套传递与自动挤压</h1>
<!-- margin同级坍塌 -->
<div class="box10"></div>
<div class="box11"></div>
<!-- 嵌套传递 -->
<div class="box12">
<div class="box13"></div>
</div>
<!-- 自动挤压 -->
<div class="box14"></div>
</div>
<div class="box2">
<h1>padding 对盒子大小的影响</h1>
<!-- 直接使用padding -->
<div class="box4">
<div class="box5">
普通情况,父元素和子元素都添加有padding,父元素被挤大了
</div>
</div>
<!-- 宽度分离 -->
<div class="box6">
<div class="box7">宽度分离</div>
</div>
<!-- box-sizing -->
<div class="box8">
<div class="box9">
box-sizing
</div>
</div>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例


1、相邻选择器与兄弟选择器
相邻选择器和兄弟选择器都是用来选择同级元素的选择器,相邻选择器使用“+”,兄弟选择器使用“~”,选择出的都是以后的标签,相邻选择器只能选择一个元素而兄弟选择器可以选择多个元素。
2、:nth-child() 和 :nth-of-type()选择器
:nth-child()为子元素选择器,只考虑选择元素级别,其中有两个特别的first-child/nth-last-child可选择第一个和最后一个
:nth-of-type()为类型选择器,既要考虑元素级别,也要考虑元素类型,其中有两个特别的first-of-type/last-of-type可选择第一个和最后一个
3.父盒子和子盒子都设置了大小并使用padding后,会将父盒子大小撑大,最终会影响布局,有两种解决方法:一是宽度分离,子盒子不设置宽度,父盒子固定宽度,这样不会因为子盒子内容变化而撑大父盒子。第二种是给子盒子添加box-sizing:border-box属性。
4.margin同级塌陷和嵌套传递
当两个同级元素上下设置了外边距后,元素之间间隔只有较大的一个外边距高度,这就是同级塌陷,当子元素设置外边距时,会将外边距传递给父元素。一般的处理方法为在父级元素添加属性值overflow:hidden;
总结:
前端达到一个效果可以有很多写法,就选择器来说,要选择一个元素可以有很多方式,适合自己的方式就是最好的,但是其他方式也得了解,否则找来一堆代码看不懂意思就白学了。
margin、padding的使用特别重要,在布局上使用特别多,可以说没有margin、padding的使用,网页就是一堆烂格子。学习margin、padding 要知晓宽度分离、同级坍塌、嵌套传递等坑,成功避开这些布局的坑才能写出漂亮的页面。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号