前端html&Css快速入门...

一、什么是前端?

  任何与用户直接打交道的操作界面 都可以称之为前端

  比如:电脑界面 手机界面 平板界面

 什么是后端?

  后端类似于幕后操纵者(一大堆令人头皮发麻的代码)

  不直接和用户打交道

二、软件开发结构

  C/S:客户端 - 服务端

  B/S:浏览器 - 服务端

  ps:B/S本质也是C/S

# 浏览器窗口输入网址 回车后 发生了几件事?
1.浏览器 朝 服务端 发送请求
2.服务端 接收请求(请求百度首页)
3.服务端 返回相应的响应(返回一个百度首页)
4.浏览器 接收 响应 根据特定的规则渲染页面 展示给用户看

# 浏览器可以充当很多服务端的客户端
    百度 腾讯视频 优酷视频...
    
# 如何做到浏览器能够与多个不同的客户端之间进行数据交互?
    1.浏览器很牛逼 能够自动识别不同服务端 做不同的处理
     2.制定一个统一的标准 如果你想要你写的服务端能够跟客户端之间做正常的数据交互 必须制定一些规则

三、http协议

  HTTP就是Hyper Text Transfer Protocol(超文本传输协议)用来规定服务端和浏览器之间的数据交互的格式...

# 四大特性:

  1.基于请求响应

  2.基于TCP/IP 作用与应用程序之上的协议

  3.无状态

    不保存用户的信息

eg:一个人来了一千次  你都记不住 每次都当他如初见

由于HTTP协议 是无状态的 所以后续出现了一些专门用来记录用户状态的技术:Cookie、Session、Token...

  4.无/短连接

    请求来一次 我响应一次 之后就再也没有任何链接和关系了

    长链接:双方建立连接后 默认不断开 websocket(后面讲项目的时候会讲)

# 请求数据格式

  1.请求首行:用来标识当前HTTP协议版本、当前请求方式

  2.请求头:一大堆k,v键值对

  3. :换行符

  4.请求体:并不是所有的请求方式都有,get没有,post有(存放的是post请求提交的敏感数据)

# 响应数据格式

  1.响应首行:用来标识当前HTTP协议版本、响应状态码

  2.响应头:一大堆k,v键值对

  3. :换行符

  4.响应体:返回给用户展示的数据

# 响应状态码:

  用一串简单的数字表示一些复杂的状态或者描述性信息404:请求资源不存在

  分类分类描述

    1xx   服务端已经接收到了你的数据 正在处理 你可以继续提交额外的数据

    2xx   服务端成功响应了你想要的数据(200 OK 请求成功)

    3xx   重定向(当你在访问一个需要登录之后才能看的页面,会自动跳转到登录页面)

    4xx   客户端错误,请求包含语法错误或无法完成请求

       404:请求资源不存在

       403:当前请求不合法 或者 不符合访问资源的条件

    5xx   服务器错误,服务器在处理请求的过程中发生了错误(500,服务器炸了,机房着火了)

# 请求方式:

1.get请求:

朝服务端 要数据

eg:输入网址 获取对应的内容

2.post请求:

朝服务端 提交数据

eg:用户登录 输入用户名和密码之后 提交到后端做身份校验

# URL:Uniform Resource Locator 统一资源定位符,就是网址

四、HTML简介

  HTML就是Hyper Text Markup Language超级文本标记语言(如果你想要浏览器能都渲染出你写的页面 你就必须遵循HTML语法,所有网站内部都是HTML代码 浏览器按F12可以查看源代码)

<h1> Hello World</h1>
<a href = 'http://www.baidu.com'>点我</a>
<img src = 'https://images.cnblogs.com/cnblogs_com/xuexianqi/1652079/o_200221125314%E5%98%9A%E7%91%9F.gif'>

  HTML就是书写网页的一套标准

# 注释:注释是代码之母
<!-- 单行注释 -->
<!-- 
多行注释1
多行注释2
多行注释3
-->
由于HTML代码非常的杂乱无章 并且很多所以我们习惯性地用注释来划分区域 方便后续的查找

<!-- 导航条开始 -->
导航条所有的HTML代码
<!-- 导航条结束 -->

<!-- 左侧菜单栏开始 -->
侧菜单栏HTML代码
<!-- 左侧菜单栏结束 -->

HTML文档结构

<html>
    <head> </head>head内标签不是给用户看的 而是定义一些配置 主要是给浏览器看的
    <body> </body>body内的标签写什么 浏览器就渲染什么 用户就看到什么 
</html>

PS:文件的后缀名 其实是给用户看的,只不过对应不同的文件后缀名 有不同的软件来处理 并添加很多功能

注意:HTML代码是没有格式的,可以全部写在一行都没问题,只不过我们习惯了缩进来表示代码

五、标签分类

<h1> </h1>

<a href = 'http://www.baidu.com'></a>

<img/>

1.双标签

2.单标签(自闭和标签)

1、head内常用标签:

<title></title>        # 网页标题
<style></style>        # 存放样式
<script></script>      # 存放JS代码
<link>                 # 引入外部文件
<meta>                 # 定义与文档相关联的名称/值对
<title>Title</title>     # 网页标题
<style>
        h1 {
            color: greenyellow;
        }
</style>     # 内部用来书写css代码

<script>
        alert(123)
</script>  # 内部用来书写js代码
<script src="myjs.js"></script>  # 还可以引入外部js文件

<link rel="stylesheet" href="mycss.css">  # 引入外部css文件

# 当你在用浏览器搜索的时候 只要输入了keywords后面指定的关键字那么该网页都有可能被百度搜索出来展示给用户
<meta name="keywords" content="老男孩教育,老男孩,老男孩培训,Python培训,Linux培训,网络安全培训,Go语言培训,人工智能培训,云计算培训,Linux运维培训,Python自动化运维,Python全栈开发,IT培训"> 
<meta name="keyword" content="淘宝,掏宝,网上购物,C2C,在线交易,交易市场,网上交易,交易市场,网上买,网上卖,购物网站,团购,网上贸易,安全购物,电子商务,放心买,供应,买卖信息,网店,一口价,拍卖,网上开店,网络购物,打折,免费开店,网购,频道,店铺"> # 网页的描述性信息
<meta name="description" content="淘宝网 - 亚洲较大的网上交易平台,提供各类服饰、美容、家居、数码、话费/点卡充值… 数亿优质商品,同时提供担保交易(先收货后付款)等安全交易保障服务,并由商家提供退货承诺、破损补寄等消费者保障服务,让你安心享受网上购物乐趣!">

2、body内常用标签:

<h1></h1>              # 1级标题(最大)
<h2></h2>              # 2级标题
<h3></h3>              # 3级标题
<h4></h4>              # 4级标题
<h5></h5>              # 5级标题
<h6></h6>              # 6级标题(最小)
<b></b>                # bold 加粗
<i></i>                # italy 斜体
<u></u>                # underline 下划线
<s></s>                # strike 删除线
<p></p>                # paragraph 段落
<div></div>            # division 分隔
<span></span>          # span 范围
<p></p>                # 5级标题
<img>                  # image 图片标签
<a></a>                # anchor 链接标签

  基本标签: 

<h1>我是h1</h1>  标题标签 1~6级标题
<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除线</s>
<p>段落</p>
<br>  换行
<hr>  水平分割线

  标签分类2

# 1 块儿级标签:独占一行
        h1~h6    p     div
      1 块儿级标签可以修改长宽 行内标签不可以 修改了也不会变化
      2 块儿级标签内部可以嵌套任意的块儿级标签和行内标签
        但是p标签虽然是块儿级标签 但是它只能嵌套行内标签 不能嵌套块儿级标签
        如果你套了 问题也不大 因为浏览器会自动帮你解开(浏览器是直接面向用户的 不会轻易的报错 哪怕有报错用户也基本感觉不出来)
       
    总结:
        只要是块儿级标签都可以嵌套任意的块儿级标签和行内标签,但是p标签只能嵌套行内标签(HTML书写规范)
# 2 行内标签:自身文本多大就占多大
        i   u   s   b   span
      行内标签不能嵌套块儿级标签 可以嵌套行内标签 

  特殊符号:

&nbsp;      空格
&gt;        大于号
&lt;        小于号
&amp;       &
&yen;       ¥
&copy;      ©
商标&reg;    ®

  常用标签

div    块儿级标签
span   行内标签
  上述的两个标签是在构造页面初期最常使用的 页面的布局一般先用div和span占位之后再去调整样式 尤其是div使用非常的频繁
  div你可以把它看成是一块区域 也就意味着用div来提前规定所有的区域,之后往该区域内部填写内容即可,而普通的文本先用span标签 

  img标签

# 图片标签
<img src="" alt="">

src    
    1.图片的路径    可以是本地的也可以是网上的
    2.url           自动朝该url发送get请求获取数据

alt="这是我的前女友"
    当图片加载不出来的时候 给图片的描述性信息

title="新垣结衣"
    当鼠标悬浮到图片上之后 自动展示的提示信息

height="800px" 
        
width=""
    高度和宽度当你只修改一个的时候 另外一个参数会等比例缩放
  如果你修改了两个参数 并且没有考虑比例的问题 那么图片就会失真

  a标签

# 链接标签
<a href=""></a>
"""
a标签指定的网址从来没有被点击过 那么a标签的字体颜色是蓝色如果点击过了就会是紫色(浏览器给你记忆了)
"""

target
    默认a标签是在当前页面完成跳转   _self
    你也可以修改为新建页面跳转      _blank

# a标签的锚点功能
"""eg:点击一个文本标题 页面自动跳转到标题对应的内容区域"""
<a href="" id="d1">顶部</a>
<h1 id="d111">hello world</h1>
<div style="height: 1000px;background-color: red"></div>
<a href="" id="d2">中间</a>
<div style="height: 1000px;background-color: greenyellow"></div>
<a href="#d1">底部</a>
<a href="#d2">回到中间</a>
<a href="#d111">回到中间</a>

1.id值

2.class 该值有点类似于面向对象里面的继承 一个标签可以继承多个class

  <p id="d1" class="c1" username="jason" password="123"></p>

   列表标签

# 无序列表(较多)

<ul>
        <li>第一项</li>
        <li>第二项</li>
        <li>第二项</li>
        <li>第二项</li>
</ul>
虽然ul标签很丑 但是在页面布局的时候 只要是排版一致的几行数据基本上用的都是ul标签

# 有序列表(了解)

<ol type="1" start="5">
    <li>111</li>
    <li>222</li>
    <li>333</li>
</ol>

1 A I a ... 参考博客了机即可

# 标题列表(了解)

<dl>
    <dt>标题1</dt>
    <dd>内容1</dd>
    <dt>标题2</dt>
    <dd>内容2</dd>
    <dt>标题3</dt>
    <dd>内容3</dd>
</dl>

六、表格、表单标签

 表格标签(只要是展示数据,一般都可以使用表格标签)

 表单标签(重要:获取前端用户数据发送给后端)

表格标签

<tr>一个tr就表示一行</tr>
<th>加粗文本</th>
<td>正常文本</td>
<table border="1">    # 加外边框
<td colspan="2">xiaoming</td>   # 水平方向占多行
<td rowspan="2">DBJ</td>   # 垂直方向占多行
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="2">
        <thead>
        <tr>
            <th colspan="3">
<!--            <th rowspan="3">-->
                用户表
            </th>
        </tr>
        </thead>

        <tbody>
        <tr>
            <td>username</td>
            <td>password</td>
            <td>gender</td>
        </tr>
        <tr>
            <td>xiaoming</td>
            <td>123456</td>
            <td>male</td>
        </tr>
        <tr>
            <td>xiaohuang</td>
            <td>123456</td>
            <td>fmale</td>
        </tr>
        </tbody>
    </table>

</body>
</html>

 表单标签

  能够获取前端用户数据(用户输入的、用户选择、用户上传、、、)基于网络发送给后端的服务器

<form action=""></form>
action:控制数据提交到后端的路径
    1、什么都不写 默认就是朝当前页面所在的url提交数据
    2、写全路径:https://www.baidu.com 朝百度服务端提交
    3、只写路径后缀action=“/index/”  自动识别出当前服务端的ip和port拼接到前面 host:port/index/

# label 和input都是行内标签
# 第一种 直接讲input框写在label内
<label for="d1">  
            username:<input type="text" id="d1">
</label>                    
# 第二种 通过id链接即可 无需嵌套
<label for="d2">password:</label>
<input type="text" id="d2">
ps:input不跟label关联也没有问题

input标签

input标签 就类似于前端的变形金刚  通过type属性变形
    text:普通文本
    password:密文
    date:日期    
    submit:用来触发form表单提交数据的动作
    button:就是一个普普通通的按钮 本身没有任何的功能 但是它是最有用的,学完js之后可以给它自定义各种功能
    reset:重置内容
    radio:单选
        默认选中要加checked='checked'
      <input type="radio" name="gender" checked='checked'>男
      当标签的属性名和属性值一样的时候可以简写
      <input type="radio" name="gender" checked>女
    checkbox:多选
      <input type="checkbox" checked>DBJ
  
    file:获取文件  也可以一次性获取多个
        <input type="file" multiple>
    hidden:隐藏当前input框  # 钓鱼网站

 select标签

select标签 默认是单选 可以加mutiple参数变多选 默认选中selected
<select name="" id="" multiple>
       <option value="" selected>新垣结衣</option>
       <option value="" selected>斯佳丽</option>
       <option value="">明老师</option>
 </select>

textarea标签

  textarea标签 获取大段文本

<textarea name="" id="" cols="30" rows="10"></textarea>

补充:

# 能够触发form表单提交数据的按钮有哪些(一定要记住)
        1、<input type="submit" value="注册">
        2、<button>点我</button>
    
# 所有获取用户输入的标签 都应该有name属性  name就类似于字典的key  用户的数据就类似于字典的value
  <p>gender:
            <input type="radio" name="gender"><input type="radio" name="gender"><input type="radio" name="gender">其他
  </p>

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <h1>注册表</h1>
    <style>
        h1 {
            color: pink;
        }
    </style>
</head>
<body>
    <form action="http://127.0.0.1:5000/index/" method="post">    # form表单默认提交数据的方式 是get请求 数据是直接放在url后面的 可以通过method指定提交方式
        <p>
        <label for="d1">username:
            <input type="text" id="d1">
        </label>
        </p>
        <p>
        <label for="d2">password: </label>
            <input type="password" id="d2">
        </p>
        <p>date:
            <input type="date">
        </p>
        <p>gender:
            <input type="radio" name='gender' checked>male
            <input type="radio" name='gender'>female
            <input type="radio" name='gender'>other      
        </p>
        <p>hobby:
            <input type="checkbox" name="hobby" value="basketball">篮球     # 针对用户选择的标签 用户不需要输入内容 但是你需要提前给这些标签添加内容value值
            <input type="checkbox" name="hobby" value="football">足球
            <input type="checkbox" name="hobby" value="other" checked>其他
        </p>
        <p>注册地:
            <select name="" id="">
                <option value="sh">上海</option>
                <option value="sz">深圳</option>
                <option value="bj">北京</option>
            </select>
        </p>
        <p>文件上传:
            <input type="file">
        </p>
        <p>个人简介:
            <textarea name="" id="" cols="30" rows="10"></textarea>
        </p>
        <p>
            <input type="submit" value="注册">
            <input type="button" value="点我">
            <input type="reset" value="重置">
        </p>
    </form>

</body>
</html>

 ps:

  """

  form表单默认提交数据的方式 是get请求 数据是直接放在url后面的

  form表单提交文件需要注意

    1.method必须是post

    2.enctype="multipart/form-data"

      enctype类似于数据提交的编码格式   默认是urlencoded 只能够提交普通的文本数据

      formdata 就可以支持提交文件数据 

<form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/form-data">

  针对用户输入的标签。如果你加了value 那就是默认值

<label for="d1">username:<input type="text" id="d1" name="username" value="默认值"></label> 
disable 禁用
readonly只读

  """

七、验证form表单提交数据(配合上面例子

from flask import Flask, request


app = Flask(__name__)


# 当前url既可以支持get请求也可以支持post请求  如果不写默认只能支持get请求
@app.route('/index/',methods=['GET','POST'])
def index():
    print(request.form)  # 获取form表单提交过来的非文件数据
    # ImmutableMultiDict([('username', 'jason'), ('password', '123132131231233'), ('gender', 'on')])
    print(request.files)  # 获取文件数据
    file_obj = request.files.get('myfile.png')
    file_obj.save(file_obj.name)
    return 'OK'

app.run()

八、CSS介绍

  层叠样式表:就是给html标签添加样式的,让他变的更加好看

# 注释
/*单行注释*/
/*
多行注释1
多行注释2
多行注释3
*/

通常我们在写css样式的时候也会用注释来划定样式区域(因为HTML代码多所以对呀的css代码也会很多)
/*这是博客园首页的css样式文件*/
/*顶部导航条样式*/
...
/*左侧菜单栏样式*/
...
/*右侧菜单栏样式*/
...


# css的语法结构
选择器 {
  属性1:值1;
  属性2:值2;
  属性3:值3;
  属性4:值4;
}

# css的三种引入方式
  1.style标签内部直接书写(为了教学演示方便我们用第一种)
    <style>
        h1  {
            color: burlywood;
        }
    </style>
  2.link标签引入外部css文件(最正规的方式 解耦合)
    <link rel="stylesheet" href="mycss.css">
  3.行内式(一般不用)
    <h1 style="color: green">老板好 要上课吗?</h1>

九、CSS选择器

基本选择器

  id选择器

    #d1 {  /*找到id是d1的标签 将文本颜色变成绿黄色*/
            color: greenyellow;
        }

  类选择器

    .c1 {  /*找到class值里面包含c1的标签*/
            color: red;
        }

  元素/标签选择器

   span {  /*找到所有的span标签*/
            color: red;
        }

  通用选择器

      * {  /*将html页面上所有的标签全部找到*/
            color: green;
        }

组合选择器

  在前端 我们将标签的嵌套用亲戚关系来表述层级

<div>div
        <p>div p</p>
        <p>div p
            <span>div p span</span>
        </p>
        <span>span</span>
        <span>span</span>
</div>
div里面的p span都是div的后代 p是div的儿子 p里面的span是p的儿子 是div的孙子 div是p的父亲 ...

# 后代选择器

div span {
            color: red;
         }

# 儿子选择器

div>span {
            color: red;
         }

# 毗邻选择器

div+span {  /*同级别紧挨着的下面的第一个*/
            color: aqua;
         }

# 弟弟选择器

div~span {  /*同级别下面所有的span*/
            color: red;
         }

属性选择器

  1、含有某个属性

  2、含有某个属性并且有某个值

  3、含有某个属性并且有某个值的某个标签

  # 属性选择器是以中括号[]作为标志的

# 某个属性
[username] {  /*将所有含有属性名是username的标签背景色改为红色*/
            background-color: red;
        }

# 某个属性的某个值
[username='jason'] {  /*找到所有属性名是username并且属性值是jason的标签*/
            background-color: orange;
        }

# 某个属性的某个值的标签
input[username='jason'] {  /*找到所有属性名是username并且属性值是jason的input标签*/
            background-color: wheat;
        }

伪类选择器

                               

  常用的伪类选择器有::link、:visited、:hover、:active、:not(s)、:frist-child、:last-child、:only-child、:checked等等;

伪类选择器的四种状态:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            background-color: black;
        }
        a:link {  /*访问之前的状态*/
            color: red;
        }
        a:hover {  /*需要记住*/
            color: aqua;  /*鼠标悬浮态*/
        }
        a:active {
            color: black;  /*鼠标点击不松开的状态  激活态*/
        }
        a:visited {
            color: darkgray;  /*访问之后的状态*/
        }
    </style>
</head>
<body>
<a href="https://www.jd.com/">小轩在不在?</a>
<input type="text">
</body>
</html>

#获取焦点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            background-color: black;
        }
        p {
            color: darkgray;
            font-size: 48px;
        }
        p:hover {
            color: white;   /*鼠标悬浮状态 为白色*/
        }
        
        input:focus {  /*input框获取焦点(鼠标点了input框)*/
            background-color: red;
        }
    </style>
</head>
<body>
<p>点我有你好看哦</p>
<input type="text">
</body>
</html>

伪元素选择器

  伪元素的效果是需要通过添加一个实际的元素才能达到的

/* 为某个元素的第一行文字使用样式。 */
:first-line
/* 为某个元素中的文字的首字母或第一个字使用样式。 */
:first-letter
/* 在某个元素之前插入一些内容。 */
:before
/* 在某个元素之后插入一些内容。 */
:after
p:first-letter {
            font-size: 48px;
            color: orange;
        }
p:before {  /*在文本开头 同css添加内容*/
            content: '你说的对';
            color: blue;
        }
p:after {
            content: '雨露均沾';
            color: orange;
        }
ps:before和after通常都是用来清除浮动带来的影响:父标签塌陷的问题(后面马上讲)

十、分组与嵌套

div,p,span {  /*逗号表示并列关系*/
            color: yellow;
        }
#d1,.c1,span  {
            color: orange;
        }

十一、选择器优先级

  主要对:id选择器、类选择器、标签选择器、行内式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
        /*
            1.选择器相同 书写顺序不同
                就近原则:谁离标签更近就听谁的
            2.选择器不同 ...
                行内 > id选择器  > 类选择器 > 标签选择器
                精确度越高越有效
        */
        #d1 {
            color: aqua;
        }
        /*.c1 {*/
        /*    color: orange;*/
        /*}*/
        /*p {*/
        /*    color: red;*/
        /*}*/
    </style>
<!--    <link rel="stylesheet" href="mycss1.css">-->
</head>
<body>
    <p id="d1" class="c1" style="color: blue">果然很识趣,有前途~</p>
</body>
</html>

十二、CSS属性相关(操作标签样式)

"""
id选择器
类选择器
标签选择器
行内式
    
"""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
     
        #d1 {       /*id选择器*/
            color: aqua;
        }
        .c1 {      /*类选择器*/
            color: orange;
        }
        p {        /*标签选择器*/ 
            color: red;
        }
    </style>
<!--    <link rel="stylesheet" href="mycss1.css">-->
</head>
<body>
    <p id="d1" class="c1" style="color: blue">果然很识趣,有前途~</p>     /*行内式*/
</body>
</html>

字体属性

  p {
            /*font-family: "Arial Black","微软雅黑","...";  !*可以写多个,第一个不生效就用后面的 写多个备用*!*/
            /*font-size: 24px;  !*字体大小*!*/
            /*font-weight: inherit;  !*bolder lighter 100~900 inherit继承父元素的粗细值*!*/
            /*color: red;   !*直接写颜色英文*!*/
            /*color: #ee762e;  !*颜色编号*!*/
            /*color: rgb(128,23,45);  !*三基色 数字  范围0-255*!*/
            /*color: rgba(23, 128, 91, 0.9);  !*第四个参数是颜色的透明度 范围是0-1*!*/

            /*当你想要一些颜色的时候 可以利用现成的工具
                1 pycharm提供的取色器
                2 qq或者微信截图功能(也可以多软件结合使用) 
            */
        }

文字属性

    p {
            /*text-align: center;  !*居中*!*/
            /*text-align: right;*/
            /*text-align: left;*/
            /*text-align: justify;  !*两端对齐*!*/

            /*text-decoration: underline;*/
            /*text-decoration: overline;*/
            /*text-decoration: line-through;*/
            /*text-decoration: none;*/
            /*在html中 有很多标签渲染出来的样式效果是一样的*/
            font-size: 16px;
            text-indent: 32px;   /*缩进32px*/
        }
      a {
            text-decoration: none;  /*主要用于给a标签去掉自带的下划线  需要掌握*/
        }

背景图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        #d1 {
            height: 500px;
            background-color: red;
        }
        #d2 {
            height: 500px;
            background-color: green;
        }
        #d3 {
            height: 500px;
            background-image: url("222.png");
            background-attachment: fixed;      /*设置背景,滚动效果*/
        }
        #d4 {
            height: 500px;
            background-color: aqua;
        }
    </style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
</body>
</html>

边框

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>

        p {
            background-color: red;      /*背景框颜色*/
            border-width: 5px;          /*边框粗细*/
            border-style: solid;        /*边框属性样式*/
            border-color: green;        /*边框颜色*/
        }
        div {
            /*border-left- 5px;*/
            /*border-left-color: red;*/
            /*border-left-style: dotted;*/

            /*border-right- 10px;*/
            /*border-right-color: greenyellow;*/
            /*border-right-style: solid;*/

            /*border-top- 15px;*/
            /*border-top-color: deeppink;*/
            /*border-top-style: dashed;*/

            /*border-bottom- 10px;*/
            /*border-bottom-color: tomato;*/
            /*border-bottom-style: solid;*/
            border: 3px solid red;  /*三者位置可以随意写*/

        }
        #d1 {
            background-color: greenyellow;
            height: 400px;
            width: 400px;
            border-radius: 50%;  /*直接写50%即可 长宽一样就是圆 不一样就是椭圆*/
        }
    </style>
</head>
<body>
  <p>穷人  被diss到了  哭泣.png</p>
  <div>妈拉个巴子,妈拉个巴子,妈拉个巴子,妈拉个巴子</div>
  <div id="d1"></div>
</body>
</html>

display属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        #d1 {
            /*display: none;  !*隐藏标签不展示到前端页面并且原来的位置也不再占有了 但是还存在于文档上*!*/
            display: inline;  /*将标签设置为行内标签的特点*/
        }
        #d2 {
            display: inline;
        }
        #d1 {
            display: block;  /*将标签设置成块儿级标签的特点*/
        }
        #d2 {
            display: block;
        }
        #d1 {
            display: inline-block;
        }
        #d2 {
            display: inline-block;  /*标签即可以在一行显示又可以设置长宽*/
        }
    </style>
</head>
<body>
  <div style="display: none">div1</div>
  <div>div2</div>
  <div style="visibility: hidden">单纯的隐藏 位置还在</div>  
  <div>div4</div>
  <div id="d1" style="height: 100px; 100px;background-color: red">01</div>
  <div id="d2" style="height: 100px; 100px;background-color: greenyellow">02</div>
  <span id="d1" style="height: 100px; 100px;background-color: red">span</span>
  <span id="d2" style="height: 100px; 100px;background-color: greenyellow">span</span>

  <div id="d1" style="height: 100px; 100px;background-color: red">01</div>
  <div id="d2" style="height: 100px; 100px;background-color: greenyellow">02</div>
</body>
</html>

十三、盒子模型

  盒子模型就以快递盒为例

    快递盒与快递盒之间的距离(标签与标签之间的距离 margin外边距)

    盒子的厚度(标签的边框 border)

    盒子里面的物体到盒子的距离(内容到边框的距离 padding内边距)

    物体的大小(内容 content)

  如果你想要调整标签与标签之间的距离 你就可以调整margin Google浏览器会自带8px的margin,一般情况下我们在写页面的时候,上来就会先将body的margin去除

               

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            margin: 0;  /*上下左右全是0
            /*margin: 10px 20px;  !* 第一个上下 第二个左右*!*/
            /*margin: 10px 20px 30px;  !*第一个上  第二个左右  第三个下*!*/
            /*margin: 10px 20px 30px 40px;  !*上 右 下 左*!*/
        }
        /*p {*/
        /*    margin-left: 0;*/
        /*    margin-top: 0;*/
        /*    margin-right: 0;*/
        /*    margin-bottom: 0;*/
        /*}*/

        #d1 {
            margin-bottom: 50px;
        }


        #d2 {
            margin-top: 20px;  /*不叠加 只取大的*/
        }

        #dd {
            margin: 0 auto;  /*只能做到标签的水平居中*/
        }
        p {
            border: 3px solid red;
            /*padding-left: 10px;*/
            /*padding-top: 20px;*/
            /*padding-right: 20px;*/
            /*padding-bottom: 50px;*/

            /*padding: 10px;*/
            /*padding: 10px 20px;*/
            /*padding: 10px 20px 30px;*/
            /*padding: 10px 20px 30px 40px;*/  /*规律和margin一模一样*/
        }
    </style>
</head>
<body>
<!--    <p style="border: 1px solid red;" id="d1">ppp</p>-->
<!--    <p style="border: 1px solid orange;" id="d2">ppp</p>-->
<!--<div style="border: 3px solid red;height: 400px; 400px">-->
<!--    <div id='dd' style="border: 1px solid orange;height: 50px; 50px;background-color: blue;"></div>-->
<!--</div>-->

<p>ppp</p>

</body>
</html>

十四、浮动&清除浮动

浮动

  浮动的元素 没有块儿级一说 本身多大浮起来之后就只能占多大(只要涉及到页面布局一般都是用浮动来提前规划好)

  浮动是一把双刃剑,使用浮动时需要处理浮动带来的副作用:父标签塌陷问题

<style>
        body {
            margin: 0;       /*清除body自带的margin*/
        }
        #d1 {
            height: 200px;
            width: 200px;
            background-color: red;
            float: left;  /*浮动  浮到空中往左飘*/
        }
        #d2 {
            height: 200px;
            width: 200px;
            background-color: greenyellow;
            float: right;   /*浮动 浮到空中往右飘*/
        }
</style>

 清除浮动方法

  1、手动添加div标签,设置高度,将父标签的位置顶起来

  2、利用clear属性,清除左右两边的浮动。设置了clear属性标签,它的左边或右边或者左右两边不能有浮动的标签,会自动往下找一个位置,这样自然就将父标签定起来。

  3、通用清除浮动的方法。clearfix类属性方法

/* 方法1,不推荐*/
# d1{
    height:50px;
}
/* 方法2 */
#d1{
    clear: left/right/both;
}

/* 方法3,固定套路*/
.clearfix:after {
    content: '';
    display: block;
    clear:both;
}

十五、溢出属性

  溢出属性的作用:当子标签的内容超出父标签范围时的处理方式。

p{
    overflow: visible;/*默认,超出部分显示*/
    overflow: hidden; /* 设置超出部分,直接隐藏*/
    overflow: scroll; /* 超出部分,鼠标滚动显示*/
    overflow: auto; /* 自动设置滚动隐藏*/
}
ps: 和浏览器有关,样式结果可能稍微不同。

十六、定位&文档流

定位:

  • 静态

    所有的标签都是默认的static,无法改变位置

  • 行对定位

    相对于标签原来的位置移动relative

  • 绝对定位

    相对已经定位的父标签做移动(如果没有父标签那么就以body为参照),当你不知道页面其他标签的位置和参数,只给了你一个父标签的参数,当你基于该标签的做定位

  • 固定定位

    相对于浏览器窗口固定在某个位置  eg:右侧小广告

    <style>
        body {
            margin: 0;
        }
        #d1 {
            height: 100px;
            width: 100px;
            background-color: red;
            left: 50px;  /*从左往右   如果是负数 方向则相反*/
            top: 50px;  /*从上往下    如果是负数 方向则相反*/
            /*position: static;  !*默认是static无法修改位置*!*/
            position: relative;
            /*相对定位
            标签由static变为relative它的性质就从原来没有定位的标签变成了已经定位过的标签
            虽然你哪怕没有动 但是你的性质也已经改变了
            */
        }

        #d2 {
            height: 100px;
            width: 200px;
            background-color: red;
            position: relative;  /*已经定位过了*/
        }
        #d3 {
            height: 200px;
            width: 400px;
            background-color: yellowgreen;
            position: absolute;
            left: 200px;
            top: 100px;
        }

        #d4 {
            position: fixed;  /*写了fixed之后 定位就是依据浏览器窗口*/
            bottom: 10px;
            right: 20px;

            height: 50px;
            width: 100px;
            background-color: white;
            border: 3px solid black;
        }
    </style>
</head>
<body>
<!--    <div id="d1"></div>-->

<!--<div id="d2">-->
<!--    <div id="d3"></div>-->
<!--</div>-->

<div style="height: 500px;background-color: red"></div>
<div style="height: 500px;background-color: greenyellow"></div>
<div style="height: 500px;background-color: blue"></div>
<div id="d4">回到顶部</div>

</body>

补充:只要不是静态属性,都可以移动位置

  浏览器优先显示文本内容

验证浮动和定位是否脱离文档流

  浮动、相对定位、绝对定位、固定定位

# 不脱离文档流

  相对定位

# 脱离文档流

  浮动

  绝对定位

  固定定位

<!--<div style="height: 100px; 200px;background-color: red;position: relative;left: 500px"></div>-->
<!--<div style="height: 100px; 200px;background-color: greenyellow"></div>-->

<!--<div style="height: 100px; 200px;background-color: red;"></div>-->
<!--<div style="height: 100px; 200px;background-color: greenyellow;position: absolute;left: 500px"></div>-->
<!--当没有父标签做到位 就参照与body-->
<!--<div style="height: 100px; 200px;background-color: blue;"></div>-->

<div style="height: 100px; 200px;background-color: red;"></div>
<div style="height: 100px; 200px;background-color: greenyellow;position: fixed;bottom: 10px;right: 20px"></div>
<div style="height: 100px; 200px;background-color: blue;"></div>

十七、z-index模态框

  z-index属性用来设置页面第三个坐标(垂直于页面方向),表示标签离用户的远近,z-index值越大则越接近用户(z-index值是阿拉伯数字)。

  利用z-index的这个功能,可以做出模态框的效果。

eg:百度登陆页面 其实是三层结构
  1.最底部是正常内容(z=0)  最远的
  2.黑色的透明区(z=99)          中间层
  3.白色的注册区域(z=100)  离用户最近

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            margin: 0;
        }
        .cover {
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            background-color: rgba(0,0,0,0.5);
            z-index: 99;
        }
        .modal {
            background-color: white;
            height: 200px;
            width: 400px;
            position: fixed;
            left: 50%;
            top: 50%;
            z-index: 100;
            margin-left: -200px;
            margin-top: -100px;

        }
    </style>
</head>
<body>
<div>这是最底层的页面内容</div>
<div class="cover"></div>
<div class="modal">
    <h1>登陆页面</h1>
    <p>username:<input type="text"></p>
    <p>password:<input type="text"></p>
    <button>点我点我~</button>
</div>
</body>
</html>

十八、透明度

  # 它不单单可以修改颜色的透明度还同时修改字体的透明度

  rgba只能影响颜色 而opacity可以修改颜色和字体

  opacity,它不单单可以修改颜色的透明度还同时修改字体的透明度;范围[0~1]。

  opacity: 0.5;

十九、搭建简单博客园样式

搭建页面流程:

  • 先用div划分区域,再填写基本内容,最后调节样式
  • 书写html代码时,每个标签的属性要见名知其意。

HTML&CSS简单架构代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="blog.css">
</head>
<body>
    <div class="blog_left">
        <div class="blog_avatar">
            <img src="timg333.gif" alt="">
        </div>
        <div class="blog_title">
            <p>Alex</p>
        </div>
        <div class="blog_info">
            <p>技术博客,技术大拿!</p>
        </div>
        <div class="blog_link">
            <ul>
                <li><a href="">博客园简介</a></li>
                <li><a href="">联系作者</a></li>
                <li><a href="">微信&微博</a></li>
            </ul>
        </div>
        <div class="blog_items">
            <ul>
                <li>Python</li>
                <li>Linux</li>
                <li>Go</li>
            </ul>
        </div>
    </div>
    <div class="blog_right">
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
        <div class="article">
            <div class="blog_title1">
                <span class="title">Linux重启大法</span>
                <span class="date">2021/1/11</span>
            </div>
            <div class="blog_info1">
                <p>linux重启大法好,解决百分之99问题!</p>
            </div>
            <div class="blog_items1">
                <span>Python</span>
                <span>Linux</span>
            </div>
        </div>
    </div>

</body>
</html>
/*博客园简单样式*/

/*通用样式*/
body{
    margin: 0;
    background-color: antiquewhite;
}
a {
    text-decoration: none;
}
ul {
    list-style-type: none;
    padding: 0px;
}
/*左侧样式*/
.blog_left{
    float: left;
    width: 20%;
    height: 100%;
    position: fixed;
    background-color: #4e4e4e;
}
.blog_avatar{
    height: 200px;
    width: 200px;
    border-radius: 50%;
    border: 5px solid white;
    margin: 20px auto;
    overflow: hidden;
}
.blog_avatar img {
    width: 100%;
}

.blog_info,.blog_title{
    color: darkgray;
    font-size: 20px;
    text-align: center;
}
.blog_link ul,.blog_items ul{
    margin: 90px auto;
    font-size: 30px;
    text-align: center;
}
.blog_link a,.blog_items a{
    color: darkgray;
}

.blog_link a:hover,.blog_items a:hover{
    color: white;
}


/*右侧样式*/
.blog_right{
    float: right;
    width: 80%;
    height: 1000px;
    /*position: fixed;*/
}
.article {
    background-color: white;
    margin: 30px 30px 10px 10px;
    box-shadow: 6px 6px 6px rgba(0,0,0,0.5);
}
.title {
    font-size: 30px;
    /*margin-left: 14px;*/
}
.date {
    float: right;
    margin: 5px 10px;
}
.blog_title1{
    border-left: red 5px solid;
    text-indent: 1em;
}
.blog_info1{
    margin-left: 24px;
}
.blog_items1 span{
    margin:5px 20px;
}
原文地址:https://www.cnblogs.com/Tang-Yuan/p/14178232.html