CSS学习

1. 什么是CSS?

CSS:

  • 称为 Cascading Style Sheet 层叠级联样式表
  • CSS 在三者中的一个核心作用表现层(美化网页)
    • 美化:字体、颜色、边距、高度、宽度、背景图片、网页定位、网页浮动

浏览器中元素(一般点击F12或者点击开发人员工具打开):

1.1. 发展史:

  • CSS 1.0 :只能美化基础样式,例如:加粗
  • CSS 2.0 :融入了 DIV(块)+ CSS,提出了 CSS 与 HTML 分离的思想,网页变得简单,利于 SEO(搜索引擎优化)
  • CSS 2.1 :融入了浮动,定位
  • CSS 3.0 :加入了圆角,阴影,动画…,涉及到了浏览器的兼容性

1.2. CSS 的优势

  1. 内容和表现分离
  2. 网页结构表现统一,可以实现复用
  3. 样式十分的丰富
  4. 建立使用独立于 html 的 css 文件
  5. 利用 SEO ,容易被搜索引擎收录!

2. CSS怎么用(快速入门)

在 CSS 中,注释格式:/* CSS注释 */

2.1. 快速入门 <style> 标签

<style>
  选择器 {
    声明1;
    声明2;
    声明3;
  }
</style>

2.1.1. css 在 html 文件中编写(不推荐,但是在练习中省事)

  • 没有美化:

<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>我是标题</h1>
</body>
  • 美化后:

<head>
  <meta charset="UTF-8">
  <title>index</title>
  <!--规范,<style> 可以编写 CSS 代码-->
  <!--此时h1就是一个选择器 -->
  <style>
    h1 {
      color: red;
    }
  </style>
</head>
<body>
  <h1>我是标题</h1>
</body>

2.1.2. css 与 html 分开写,外部引入 css 文件

  • style 标签不用写在 head 标签里面的

那么如何将 css 文件和 html 文件 联系起来呢?

答:通过 <link rel="stylesheet" href="./css/style.css">

  • 效果:

<head>
    <meta charset="UTF-8">
    <title>index</title>
    <!--导入 css 文件,<link> 标签-->
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>
<h1>我是标题</h1>
</body>

2.2. CSS 的三种导入方式

2.2.1. 行内样式

不符合 html 与 css 分离原则,偷懒使用

一般应用于网页已经基本完善好,某个地方要新增单独配置样式

<!--行内样式,在标签元素中,编写一个 style 属性,编写样式即可-->
<h1 style="color: red">一级标签</h1>

2.2.2. 内部样式

在 <head></head>中编写的 css 样式

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <!--内部样式-->
  <style>
    h1{
      color: green;
    }
  </style>
</head>
<body>
  <h1>一级标签</h1>
</body>

2.2.3. 外部样式

在 <head></head>中通过 link 标签导入 css 文件

h1{
    color:yellow;
}
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--外部样式-->
    <link rel="stylesheet" href="./css/style.css">
</head>
<body>

<h1>一级标签</h1>
</body>

2.2.4. 优先级问题

优先级问题:

  • 行内样式,优先级最高
  • 内部样式和外部样式,谁离选择器元素近,优先谁

总的来讲,就是遵循就近原则

<head>
  <!--内部样式-->
  <style>
    h1{
      color: green;
    }
  </style>
  <!--外部样式-->
  <link rel="stylesheet" href="./css/style.css">
  <!--内部样式和外部样式,谁在下面,谁的优先级最高-->
</head>
<body>
  <!--行内样式,在标签元素中,编写一个 style 属性,编写样式即可-->
  <!--优先级最高-->
  <h1 style="color: red">一级标签</h1>
</body>

2.2.5. 拓展:外部样式的两种写法

  • 链接式:
 <!--外部样式-->
  <link rel="stylesheet" href="./css/style.css">
  • 导入式:CSS 2.1 特有的
<style>
  @import url("css/style.css");
</style>

二者的区别:

  • link是HTML标签,可以加载CSS文件,也可以定义RSS、rel等属性;import是CSS语法,只能加载CSS文件。
  • link引入的CSS会和HTML同时加载;import引入的CSS会在页面加载完毕后加载。
  • link可以被DOM操作,修改样式;import不可以被DOM操作。
  • link的优先级高于import。

3. CSS选择器(重点+难点)

选择器的作用:选择页面上的某一个或者某一类元素

3.1. 基本选择器

3.1.1. 标签选择器

  • 弊端:会选择所有的相同标签,修改其样式
    • 下面两个 h1 标签,如果想让它一个红一个绿,标签选择器是做不到的
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*标签选择器,会选择到网页上,所有相同的标签*/
    h1{
      color: green;
    }
    p{
      font-size: 60px;
    }
  </style>
</head>
<body>
  <!--最基本的得有一个标签-->
  <h1>学java</h1>
  <h1>学CSS标签选择器</h1>
  <p>夕落</p>
</body>

3.1.2. 类选择器 class

  • 好处
    • 可以跨标签使用
    • 可以多个标签归类,是同一个class
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*需要借助属性 class */
    /*使用方法:.class的名称{} */
    .a{
      color: #cc3636;
    }
    .b{
      color: #ab15bd;
    }
  </style>
</head>
<body>
  <h1 class="a">标题1</h1>
  <h1 class="b">标题2</h1>
  <h1 class="b">标题3</h1>
  <p class="a">p标签</p>
</body>

3.1.3. id 选择器

使用id选择器时,要注意:

  1. id 全局唯一,否则报错(针对与js,详情见随风丶逆风的文章
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*格式:#id名称{}*/
    #a{
      color: blue;
    }
  </style>
</head>
<body>
  <h1 id="a">标题1</h1>
  <h1 id="b">标题2</h1>
  <h1>标题3</h1>
</body>

3.1.4. 三个基本选择器的优先级问题

  • id选择器 > class 选择器 > 标签选择器
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    #a{
      color: blue;
    }
    .b{
      color: #cc3636;
    }
  </style>
</head>
<body>
  <h1 class="b" id="a">标题1</h1>
  <h1 class="b">标题2</h1>
  <h1>标题3</h1>
</body>

3.2. 层次选择器

3.2.1. 后代选择器:在某个元素后面的所有

对于 body 后代有:p1~p6,ul,li

选择器格式:body p{ }

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*后代选择器*/
    body p{
      background-color: #cc3636;
    }
  </style>
</head>
<body>
  <p>p1</p> 
  <p>p2</p>
  <p>p3</p>
  <ul>
    <li><p>p4</p></li>
    <li><p>p5</p></li>
    <li><p>p6</p></li>
  </ul>
</body>

3.2.2. 子选择器:当前元素的下一代元素

对于 body 的子代有:p1~p3,ul

格式:body>p{ }

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*子选择器*/
    body>p{
      background-color: #cc3636;
    }
  </style>
</head>
<body>
  <p>p1</p>
  <p>p2</p>
  <p>p3</p>
  <ul>
    <li><p>p4</p></li>
    <li><p>p5</p></li>
    <li><p>p6</p></li>
  </ul>
</body>

3.2.3. 相邻兄弟选择器

选中和元素 a 相邻且处于下方的元素 p,进行样式修改,a不生效

格式:.a + p { }

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*相邻兄弟选择器*/
        .a + p{
            background-color: #cc3636;
        }
    </style>
</head>
<body>
<p>p0</p>
<p class="a">p1</p>
<p>p2</p>
<p>p3</p>
<ul>
    <li><p>p4</p></li>
    <li><p>p5</p></li>
    <li><p>p6</p></li>
</ul>
</body>
<!--如果是这种写法,效果见图2-->
<p>p0</p>
<p class="a">p1</p>
<ul>
    <li><p>p4</p></li>
    <li><p>p5</p></li>
    <li><p>p6</p></li>
</ul>
<p>p2</p>
<p>p3</p>

3.2.4. 通用选择器

选中和元素 a 同代的下方所有的元素 p ,进行样式修改,a不生效

格式:.a~p{ }

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*通用选择器*/
        .a~p{
            background-color: #cc3636;
        }
    </style>
</head>
<body>
<p>p0</p>
<p class="a">p1</p>
<p>p2</p>
<ul>
    <li><p>p4</p></li>
    <li><p>p5</p></li>
    <li><p>p6</p></li>
</ul>
<p>p3</p>
</body>

3.3. 结构伪类选择器

3.3.1. 定位父元素,选取其子类中的目标元素

<head>
    <meta charset="UTF-8">
    <title>index</title>
    <!--该环境不使用 class选择器,id选择器-->
    <style>
        /*选中ul第一个子元素*/
        ul li:first-child{
            background-color: #ab15bd;
        }

        /*选中ul最后一个子元素*/
        ul li:last-child{
            background-color: #0000f3;
        }
    </style>
</head>
<body>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<ul>
    <li>li1</li>
    <li>li2</li>
    <li>li3</li>
</ul>
</body>

3.3.2. 定位父类下某个元素,如果是目标元素,则生效

<head>
  <meta charset="UTF-8">
  <title>index</title>
  <!--该环境不使用 class选择器,id选择器-->
  <style>
    /*选中目标元素p,定位到父元素,数字代表第几个元素*/
    /*如果是目标元素p生效,反之不生效*/
    p:nth-child(1){
      background-color: #ab15bd;
    }
    /*这个效果见图二*/
      p:nth-child(2){
      background-color: #ab15bd;
    }

  </style>
</head>
<body>
  <h1>h1</h1>
  <p>p1</p>
  <p>p2</p>
  <p>p3</p>
  <ul>
    <li>li1</li>
    <li>li2</li>
    <li>li3</li>
  </ul>
</body>

3.3.3. 定位父类下的指定元素且指定位置

<head>
  <meta charset="UTF-8">
  <title>index</title>
  <!--该环境不使用 class选择器,id选择器-->
  <style>
    /*对于p元素,先找父类 body,再找处于第一位的 p 元素(相对于其他 p 元素,处于第一位)*/
    p:nth-of-type(1){
      background-color: yellow;
    }
  </style>
</head>
<body>
  <h1>h1</h1>
  <p>p1</p>
  <p>p2</p>
  <p>p3</p>
  <ul>
    <li>li1</li>
    <li>li2</li>
    <li>li3</li>
  </ul>
</body>

3.4. 属性选择器(常用)

  • 相当于将 id 选择器和 class 选择器结合起来

标签名 [ 属性 = 属性值(可以使用正则) ]{ }

  • = 绝对匹配
  • *=模糊匹配
  • ^=匹配以xxx开头
  • ¥=匹配以xxx结尾
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*后代选择器:对a标签做一些修改*/
    .demo a{
      float: left;/*设置左浮动*/
      display: block;/*将a元素,设置成块级元素*/
      height: 50px;/*高度*/
      width: 50px;/*宽度*/
      border-radius: 10px;/*圆角*/
      background: blue;/*背景颜色*/
      text-align: center;/*文字对齐方式:左右居中*/
      text-decoration: none;/*文字下划线取消*/
      color: gainsboro;/*文字颜色*/
      font: bold 20px/50px Arial;/*设置粗体、字号为20像素、行高为50像素,字体为Arial*/
      margin-right: 5px;/*每个元素向右偏移*/
    }
  </style>
</head>
<body>
  <p class="demo">
    <a href="https://www.baidu.com" class="links item first" id="first">1</a>
    <a href="" class="links item active" target="_blank" title="test">2</a>
    <a href="images/123.html" class="links item" id="item">3</a>
    <a href="images/123.png" class="links item">4</a>
    <a href="images/123.jpg" class="links item">5</a>
    <a href="abc">6</a>
    <a href="/a.pdf">7</a>
    <a href="/abc.pdf">8</a>
    <a href="abc.doc">9</a>
    <a href="adcd.doc" class="links item">10</a>
  </p>
</body>

3.4.1. id属性选择器

3.4.1.1. 格式:标签[id属性]{ }

作用:将标签中带有id属性的标签全部选中

a[id]{
  background: yellow;
}

3.4.1.2. 格式:标签[id属性=id属性值]{ }

作用:将标签中的目标id所在标签选中

a[id=first]{
  background: red;
}

3.4.2. class属性选择器

3.4.2.1. 绝对匹配:标签[class="xxx"]{ }
a[class="links item first"]{
  background: #17c713;
}

3.4.2.2. 模糊匹配:标签[class*="xx"]{ }
a[class*="links"]{
  background: #17c713;
}

3.4.3. href属性选择器

3.4.3.1. 匹配开头的属性值
a[href^="https"]{
  background: #cc3636;
}

3.4.3.2. 匹配末尾的属性值
a[href$="pdf"]{
  background: #d407e5;
}

4. 美化网页(文字、阴影、超链接、列表、渐变……)

4.1. 为什么要美化网页?

  1. 有效的传递页面信息
  2. 美化页面,页面漂亮,吸引用户
  3. 凸显页面的主题
  4. 提高用户体验

4.2. span 标签

约定俗成:重点要突出的字,使用 span 包含起来

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    #title1{
      font-size: 50px;
    }
  </style>
</head>
<body>
  <!--本身没有突出-->
  欢迎学习java
  <br/>
  <!--将重点使用 span 标签括起来-->
  欢迎学习<span id="title1">java</span>
</body>

4.3. 字体样式

font: italic small-caps bold 20px Arial, sans-serif;/*例子*/

4.3.1. 分别设置字体属性(常用)

font-family: /*设置字体类型*/
color: /*字体颜色*/
font-size: /*设置字体大小*/
font-weight: /*设置字体粗细*/
font-style:/*控制字体的倾斜效果*/

4.4. 文本样式

4.4.1. 颜色:color --> 单词,#000000,rgba

color:red;/*用单词设置颜色*/
color:#000000;
color:rgb(0,0,0,0.5);/*RGBA,其中0.5(范围0~1),设置颜色的深浅*/

4.4.2. 文本对齐方式、首行缩进

text-align: center;/*默认左对齐,当前居中,也可以设置右对齐*/
text-indent: 2em;/*首行缩进:em代表字符,px代表像素点*/

4.4.3. 行高

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .p1{
      line-height: 100px;
    }
  </style>
</head>
<body>
  <p class="p1">123123123</p>
  <p>abcde</p>
</body>

4.4.4. 划线

text-decoration: overline;/*上划线*/
text-decoration: line-through;/*中划线*/
text-decoration: underline;/*下划线*/

4.4.5. 文字与图片居中

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    /*水平对齐,参照物:a,b*/
    img, span {
      vertical-align: middle;
    }
  </style>
</head>
<body>
  <img src="resource/image/1.png" width="50px" height="50px">
  <span>123123123123</span>
</body>

对齐前:

对齐后:

4.4.6. 文本阴影

#pa1{
  text-shadow: 5px 5px 5px yellow;
}
<p><a href="a1" id="pa1">星空</a></p>

4.5. 超链接伪类

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    a{
      text-decoration: none;/*去除下划线*/
      color:#000000;/*修改颜色*/
    }
/*==========================以下是超链接伪类=========================*/
    /*鼠标悬浮响应*/
    a:hover{
      color: orange;
    }
    /*鼠标摁住响应:激活响应颜色*/
    a:active{
      color: green;
    }
/*==================================================================*/
  </style>
</head>
<body>
  <a href="a1">
    <img src="resource/image/1.png" width="50px" height="50px">
  </a>
  <p><a href="a1">图片1</a></p>
  <p><a href="a1">星空</a></p>
  <p><a href="a1">$1.00</a></p>
</body>

4.6. 列表

<div id="nav">
  <h2 class="title">全部商品分类</h2>
  <ul>
    <li><a href="#">图书</a>&nbsp;&nbsp;<a href="#">音像</a>&nbsp;&nbsp;<a href="#">数字商品</a></li>
    <li><a href="#">家用电器</a>&nbsp;&nbsp;<a href="#">手机</a>&nbsp;&nbsp;<a href="#">数码</a></li>
    <li><a href="#">电脑</a>&nbsp;&nbsp;<a href="#">办公</a></li>
    <li><a href="#">家居</a>&nbsp;&nbsp;<a href="#">家装</a>&nbsp;&nbsp;<a href="#">厨具</a></li>
    <li><a href="#">服饰鞋帽</a>&nbsp;&nbsp;<a href="#">个护化妆</a></li>
    <li><a href="#">礼品箱包</a>&nbsp;&nbsp;<a href="#">钟表</a>&nbsp;&nbsp;<a href="#">珠宝</a></li>
    <li><a href="#">食品饮料</a>&nbsp;&nbsp;<a href="#">保健食品</a></li>
    <li><a href="#">彩票</a>&nbsp;&nbsp;<a href="#">旅行</a>&nbsp;&nbsp;<a href="#">充值</a>&nbsp;&nbsp;<a href="#">票务</a></li>
  </ul>
</div>

#nav{
  width: 300px;
  background: rgba(121, 121, 121, 0.3);
}


.title{
  font-size: 18px;/*字体大小*/
  font-weight: bold;/*设置粗体*/
  text-indent: 1em;/*1个字体的缩进*/
  line-height: 35px;/*行高*/
  background: #cc3636;
}
ul {
}
/* 选中所有的ul li*/
ul li{
  height: 30px ;/*设置行高*/
  list-style: none;/*设置无序列表样式,这里是把·去掉*/
  text-indent: 1em;/*文字缩进*/
}

a{
  text-decoration: none;
  font-size: 14px;
  color: #000;
}
a:hover{
  color: orangered;
  text-decoration: underline;
}

4.7. 背景 background

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{
      width: 600px;
      height: 300px;
      /*默认全部平铺 repeat */
      background-image: url("../../resource/image/4.png");
      border: 1px  solid red ;/*边框:粗细 样式 颜色*/
    }
    .div1{
      /*横着平铺*/
      background-repeat: repeat-x;
    }
    .div2{
      /*竖着平铺*/
      background-repeat: repeat-y;
    }
    .div3{
      /*不平铺*/
      background-repeat: no-repeat;
      /*设置背景位置*/
      background-position: 200px 30px;
    }
  </style>
</head>
<body>
  <div class="div1"></div>
  <div class="div2"></div>
  <div class="div3"></div>
</body>

4.8. 渐变

background-image: linear-gradient(19deg, #21d4fd 0%, #b721ff 100%);

5. 盒子模型

  • margin:外边距
    • margin所在区域,它会控制两个元素之间的距离(a.margin+b.margin=ab元素之间的距离)
  • padding:内边距
    • 内容到边框的距离,通常是从边框左上角开始计算
  • border:边框
    • 边框 border: 粗细,样式,颜色;

5.1. 盒子模型大小计算

外边距+内边距+边框+内容所占的范围

6. 浮动:脱离标准文档流的方式

6.1. 标准文档流

标准文档流:指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。前面内容发生了变化,后面的内容位置也会随着发生变化。

6.2. display:一种实现行内元素排列的方式

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            width: 100px;
            height: 100px;
            border: 1px solid red;
        }
        span{
            width: 100px;
            height: 100px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
<div>div块级元素a</div><span>span行内元素b</span><div>div块级元素c</div><span>span行内元素d</span>
</body>

6.2.1. block 块元素

.e{
  display: block;
}

6.2.2. inline 行内元素

  .c{
            display: inline;
        }

6.2.3. inline-block 是块元素,但是可以内联,在同一行

.c{
    display: inline-block;
}

6.2.4. none 消失,网页上看不见(源码里存在)

.a{
    display: none;
}

6.3. float 浮动(常用)

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="css/style.css">

</head>
<body>
<div class="box">
    <div class="a">
        <img src="../resource/image/1.png" width=" 50px" height="150px">
    </div>
    <div class="b">
        <img src="../resource/image/2.png" width=" 50px" height="50px">
    </div>
    <div class="c">
        <img src="../resource/image/3.png" width=" 50px" height="50px">
    </div>
    <div class="d">浮动的盒子可以向左浮动,也可以向右浮动,直到它的外边缘碰到包含框或者另一个浮动的盒子</div>
</div>
</body>
div{
    margin: 10px;
    padding: 5px;
}
.box{
    border: 1px solid red;
    display: inline-block;
}
.a{
    border: 1px solid #243fcb;
    display: inline-block;
}
.b {
    border: 1px solid #57117c;
    display: inline-block;
}
.c{
    border: 1px solid #568325;
    display: inline-block;
}
.d{
    border: 1px dashed #d6e321;
    font-size: 12px;
    line-height: 23px;
    display: inline-block;
}

6.3.1. 左右浮动

.a{
  border: 1px solid #243fcb;
  display: inline-block;
  float: right;/*右浮*/
}
.c{
  border: 1px solid #568325;
  display: inline-block;
  float: left;/*左浮*/
}

当网页大小变化时,他们的位置也会改变

6.4. 父级边框塌陷问题

在使用 float 浮动的时候,会引起父级边框塌陷问题,有以下的解决方法

.a{
  border: 1px solid #243fcb;
  display: inline-block;
  float: right;

}
.b {
  border: 1px solid #57117c;
  display: inline-block;
  float: left;
}
.c{
  border: 1px solid #568325;
  display: inline-block;
  float: left;
}
.d{
  border: 1px dashed #d6e321;
  font-size: 12px;
  line-height: 23px;
  display: inline-block;
  float: right;
}

6.4.1. 增加父级高度

理论上将只要父级的宽高无限大,就不会出现该问题,但是实际开发中,我们会将它取得恰到好处

.box{
    border: 1px solid red;
    height: 200px;
}

6.4.2. 增加一个空的 div,清除浮动

<div class="box">
    <div class="a"><img src="../resource/image/1.png" width=" 50px" height="150px"></div>
    <div class="b"><img src="../resource/image/2.png" width=" 50px" height="50px"></div>
    <div class="c"><img src="../resource/image/3.png" width=" 50px" height="50px"></div>
    <div class="d">浮动的盒子可以向左浮动,也可以向右浮动,直到它的外边缘碰到包含框或者另一个浮动的盒子</div>
    <!--增加一个空的div盒子-->
    <div class="clear"> </div>
</div>
.clear{
    clear: both;
    margin: 0;
    padding: 0;
}

6.4.3. clear:解决元素的浮动情况

.d{
    border: 1px dashed #d6e321;
    font-size: 12px;
    line-height: 23px;
    display: inline-block;
    float: right;
    clear: right;
}

  • clear:right;右侧不允许有浮动元素
  • clear:left;左侧不允许有浮动元素
  • clear:both;两侧不允许有浮动元素
  • clear:none;不允许有浮动元素

6.4.4. overflow

作用:解决子级元素比父级元素大的情况

.box{
    border: 1px solid red;
    overflow: hidden;
}
  • overflow: hidden;超出父级的部分,父级会自动补全

.box {
    border: 1px solid red;
    height: 50px;
    overflow: scroll;
}
  • overflow: scroll;增加一个滚动条,这是在父级高度固定时,子级的高度大于父级

6.4.5. 在父级添加一个伪类

.box:after{
    content: '';
    display: block;
    clear: both;
}
/*避免了在html中添加一个空div的情况,改用代码实现*/

6.5. 对比

  • display
    • 方向不可以控制
  • float
    • 浮动起来的话会脱离标准文档流,所以要解决父级边框塌陷问题

7. 定位:脱离标准文档流的方式

<head>h
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div {
      margin: 10px;
      padding: 5px;
      font-size: 12px;
      line-height: 25px;
    }
    #father {
      border: 1px solid #ff0000;
      padding: 0;
    }
    #first {
      border: 1px dashed #77e819;
      background: #77e819;
    }
    #second {
      border: 1px dashed #00c4ff;
      background:  #00c4ff;
    }
    #third {
      border: 1px dashed #c817dc;
      background: #c817dc;
    }
  </style>
</head>
<body>
  <div id="father">
    <div id="first">第一个盒子</div>
    <div id="second">第二个盒子</div>
    <div id="third">第三个盒子</div>
  </div>
</body>

7.1. 相对定位:relative

相对于原来的位置,进行指定的偏移。

相对定位后,它仍在标准文档流中,原来位置会被保留。

7.1.1. 添加相对定位

#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: relative; /*相对定位:上下左右*/
}

#second {
  border: 1px dashed #00c4ff;
  background:  #00c4ff;
  position: relative;
}

#third {
  border: 1px dashed #c817dc;
  background: #c817dc;
  position: relative;
}

可以看出,添加相对定位后,位置不会发生改变,且四个方向的偏移量都为0

7.1.2. 偏移

#first {
  border: 1px dashed #77e819;
  background: #77e819;
  /*相对定位:上下左右*/
  position: relative;
  top: -20px;
}

相对于之前的位置,向上偏移了20px

同理:left,bottom,right,也是一样的用法,就是方向不同

7.1.3. 偏移方向疑惑点

top:-20px;应该是相对于之前向下移动才对

个人观点:

如图所示,黑色边框是原来的位置,那么向内侧方向移动就是 20px ,向外侧移动就是 -20px

验证:

#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: relative;/*相对定位:上下左右*/
  top: -20px;
  left: 20px;
}
#third {
  border: 1px dashed #c817dc;
  background: #c817dc;
  position: relative;
  bottom: 20px;
  right: 20px;
}

7.1.4. 练习题

  • 使用<div>和<a>布局页面
  • 每个超链接的高度和宽度都是100px,背景是粉色,鼠标移上去是蓝色
  • 使用相对定位改变每个超链接的位置

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 305px;
      height: 305px;
      border: 1px solid red;
      padding: 5px;
    }
    a{
      width: 100px;
      height: 100px;
      background: pink;/*背景颜色*/
      text-decoration: none;/*去掉下划线*/
      text-align: center;/*左右居中*/
      line-height: 100px;/*行高100px,保证文字上下居中*/
      color: white;/*字体颜色*/
      display: block;/*转换成块级元素*/
    }
    a:hover{
      background: blue;
    }
    .a2,.a4{
      position: relative;
      left: 200px;
      top: -100px;
    }
    .a5{
      position: relative;
      left: 100px;
      top: -300px;
    }
  </style>
</head>
<body>
  <div class="box">
    <a class="a1" href="#">链接1</a>
    <a class="a2" href="#">链接2</a>
    <a class="a3" href="#">链接3</a>
    <a class="a4" href="#">链接4</a>
    <a class="a5" href="#">链接5</a>
  </div>
</body>

7.2. 绝对定位:absolute

定位:基于xxx进行指定方向的偏移

  • 没有父级元素定位的情况下,相对于浏览器进行定位,同时会有一个默认的偏移量position
  • 父级元素定位存在,我们通常会相对于父级元素进行偏移
    • 确定后只能在父级元素中进行偏移,无法突破父级元素
    • 如何证明父级元素存在?答:父级元素中有 position 修饰。

相对与父级或者浏览器的位置,进行指定的偏移

绝对定位后,它不会存在标准文档流中,且原来的位置会消失

7.2.1. 添加绝对定位

#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: absolute;
}

元素所占像素点的大小会被改变:外边距+内边距+边框+实际内容所占空间

所以你看到的绿色块会变短

7.2.2. 偏移

7.2.2.1. 没有指定父级元素
#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: absolute;
  top: 30px;
}

7.2.2.2. 指定父级元素
#father {
  border: 1px solid #ff0000;
  padding: 0;
  /*相对定位*/
  position: relative;
}
#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: absolute;
  top: 30px;
}

7.2.3. 偏移方向疑惑点

与相对定位的偏移一致

如果同时向左向右偏移呢?

答:如图,但是一般不这么弄

#first {
  border: 1px dashed #77e819;
  background: #77e819;
  position: absolute;
  left: 40px;
  right: 40px;
}

7.3. 固定定位:fixed

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    body {
      height: 1000px;
    }
    div:nth-of-type(1) {
      width: 100px;
      height: 100px;
      background: red;
      position: absolute; /*绝对定位,相对于浏览器*/
      right: 0;
      bottom: 0;
    }
    div:nth-of-type(2) {
      width: 50px;
      height: 50px;
      background: blue;
      position: fixed; /*固定定位*/
      right: 0;
      bottom: 0;
    }
  </style>
</head>
<body>
  <div>div1</div>
  <div>div2</div>
</body>

在网页生成后,都定位到了右下角

移动滚轮后,红色块上移,蓝色块不动

原因:蓝色块是固定定位,红色块是绝对定位

7.4. 图层:z-index

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <div id="app">
    <ul>
      <li><img src="../resource/image/1.png" alt="" width="200px" height="300px"></li>
      <li class="tipText">星空背景图</li>
      <li class="tipBg"></li>
      <li>2024-7-16</li>
      <li>位置:火星</li>
    </ul>
  </div>
</body>
#app {
    width: 200px;
    margin: 0;
    padding: 0;
    overflow: hidden;
    font-size: 12px;
    line-height: 25px;
    border: 1px solid #000000;
    color: red;
}
ul,li{
    margin: 0;
    padding: 0;
    list-style: none;
}
/*父级元素,相对定位*/
#app ul{
    position: relative;
}
/*子级元素进行绝对定位*/
.tipText,.tipBg{
    position: absolute;
    bottom: 60px;/*或者top:270;*/
    width: 200px;
    height: 25px;
    border: 1px dashed red;
}
.tipBg{
    background: white;
}

7.4.1. 图层移动

默认:z-index=0;

.tipText{
    z-index: 1;/*可以看见文字*/
    color: black;
}
.tipText{
    z-index: 0;/*看不到文字*/
    color: black;
}

将白色背景面板高都调整为25px

调整了”星空背景图“文字所在图层的位置,修改了颜色方便识别

7.4.2. 透明度

.tipBg{
    background: white;
    opacity: 0.5;/*透明度*/
}

8. 网页动画:拓展了解

动画一般使用js制作,css也能但是比较复杂。

卡巴斯基全球网络攻击实时图:

9. 总结(截的别人的)

  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值