zoukankan      html  css  js  c++  java
  • WEB前端 ---- 学习第二天(表格、表单、css等)

    今日内容概要

    • 表格标签(只要是展视数据 一般都可以使用表格标签)
    • 表单标签(重要:获取前端用户数据发送给后端)
    • 后端框架基本使用(flask)
    • css层叠样式表(选择器)

    表格标签

    数据示例:
    username	site	level
    mlxg	        jug	    height
    uzi	        adc	    height
    ming	        assist	    height
    <!--格式-->
    <table border="1">
        <thead>
            <tr> # 一个tr就表示一行
                <th>username</th> <!--加粗文本-->
                <th>site</th>
                <th>level</th>
                <!--<td>username</td>--> <!--正常文本-->
            </tr>
        </thead> <!--表头(字段信息)-->
        <tbody>
            <tr>
                <td>mlxg</td>
                <td>jug</td>
                <td>height</td>
            </tr>
            <tr>
                <td>uzi</td>
                <td>adc</td>
                <td>height</td>
            </tr>
            <tr>
                <td>ming</td>
                <td>assist</td>
                <td>height</td>
            </tr>
        </tbody> <!--表单(数据信息)-->
    </table>
    <table border="1">:添加表格的框线
    <td colspan="2">jug</td>:水平方向占多行
    <td rowspan="2">jug</td>: 竖直方向占多行
    
    # 原生的表格标签很丑 但是后续我们一般都是使用框架封装好的 很好看
    

    表单标签

    """
    能够获取前端用户数据(用户输入的、用户选择的、用户上传...)基于网络发送给后端服务器
    """
    # 写一个注册功能
    <form action=""></form> # 在该form标签内部书写的获取用户的数据都会被form标签提交到后端
    action:控制数据提交的后端路径(给哪个服务端提交数据)
        1. action值为空:默认就是向当前页面所在的url提交数据
        2. 写全路径:https://www.baidu.com 向百度服务端提交
        3. 只写路径后缀:action="/index/" 自动识别出当前服务端的IP和Port拼接到前面(host:port/index/)
    
    
    <form action="">
        <label for="d1"> # 第一种方式,直接将input框卸载label内
            username:<input type="text" id="d1">
        </label>
        <label for="d2">password:</label> # 通过id链接即可,无需嵌套
        <input type="text" id="d2"> 
    </form>
    Ps: input不跟label关联也没有问题
    
    """
    label和input都是行内标签
    """
    input标签:就类似于前端的变形金刚 通过type属性变形
        type属性:
            - text:普通文本
            - password:密文展示
            - date:日期
            - submit:用来触发form表达提交数据的动作
                """
                <input type="submit" value="注册">
                """
            - button:就是一个普普通通的按钮,本身没有任何功能,但它是最有用的,学完js后可以给它自定义各种功能
                """
                    <input type="button" value="按钮">
                """
            - reset:重置内容
                """
                <input type="reset" value="重置">
                """
            - radio:单选框,默认选中要加checked='checked'
                     <input type="radio" name="gender" checked='checked'>男
                     当标签的属性名和属性值一样时可以简写
                     <input type="radio" name="gender" checked>女
                """
                <p>gender:
                    <input type="radio" name="gender" checked="checked">男
                    <input type="radio" name="gender">女
                    <input type="radio" name="gender">其他
                </p>
                """
            - checkbox:多选
                """
                <input type="checkbox" name="hobby" checked>read
                """
            - select:默认是单选,可以将mutiple参数变多选,默认选中用selected
                """
                <p>province:
                    <select name="" id="">
                        <option value="" selected>上海</option>
                        <option value="">北京</option>
                        <option value="">深圳</option>
                    </select>
                </p>
                <p>前女友:
                    <select name="" id="" multiple>
                        <option value="">小红</option>
                        <option value="">小花</option>
                        <option value="" selected>迪丽热x</option>
                    </select>
                </p>
                """
            - file:上传文件
                """
                <p>文件:
                    <input type="file" nultiple(上传多个)>
                </p>
                """
            - hidden: 隐藏输入框
                """
                <p>你看不到我:
                    <input type="hidden">
                </p>
                """
                钓鱼网站
                    
            - textarea:获取大段文本
                """
                <p>自我介绍:
                    <textarea name="" id="" cols="30" rows="10" maxlength="20"></textarea>
                </p>
                maxlength:字数限制
                cols:文本框大小
                rows:文本框大小
                """
    # 能够触发form表单提交数据的按钮有哪些
    1. <input type="submit" value="注册">
    2. <button>刷新</button>
    
    # 所有获取用户输入的标签 都应该有name属性
    name就类似于字典的key
    用户输入的数据就类似于字典的value
    # 下列注释内容是上述所有知识点总结写出的页面 可以copy自己看下效果
    """
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>注册页面</h1>
        <form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/form-data">
            <p>
                <label for="d1">
                    username:<input type="text" id="d1" name="username" disabled value="默认值">
                </label>
            </p>
            <p>
                <label for="d2">password:</label>
                <input type="password" id="d2" name="password">
            </p>
            <p>你看不到我:
                <input type="hidden">
            </p>
            <p>
                <label for="d3">brithday:</label>
                <input type="date" id="d3">
            </p>
            <p>gender:
                <input type="radio" name="gender" checked="checked" value="male">男
                <input type="radio" name="gender" value="women">女
                <input type="radio" name="gender" value="others">其他
            </p>
            <p>hobby:
                <input type="checkbox" name="hobby" value="read">读书
                <input type="checkbox" name="hobby" checked value="tea">喝茶
                <input type="checkbox" name="hobby" value="game">游戏
            </p>
            <p>province:
                <select name="province" id="">
                    <option value="sh" selected>上海</option>
                    <option value="bj">北京</option>
                    <option value="sz">深圳</option>
                </select>
            </p>
            <p>文件:
                <input type="file" name="myfile">
            </p>
            <p>自我介绍:
                <textarea name="info" id="" cols="30" rows="10" maxlength="20"></textarea>
            </p>
            <p>
                <input type="submit" value="注册">
    <!--当你没有指定按钮的文本内容 不同的浏览器打开之后可能渲染的文本内容不一致-->
                <input type="button" value="按钮">
                <input type="reset" value="重置">
                <button>刷新</button>
            </p>
        </form>
    </body>
    </html>
    """
    

    验证form表单提交数据

    # 下面的框架代码无需掌握 看下效果即可
    pip3 install FLASK
    
    # form表单默认提交数据的方式 是GET请求 数据是直接放在url后面的
        http://127.0.0.1:5000/index/?username=wenkai.fang&gender=on&hobby=on
    # 你可以通过method指定提交方式指定提交方式
        <form action="http://127.0.0.1:5000/index/" method="post">
    
    针对用户选择的标签,用户不需要输入内容,但是你需要提前给这些标签添加内容value值
    
     <p>gender:
        <input type="radio" name="gender" checked="checked" value="male">男
        <input type="radio" name="gender" value="women">女
        <input type="radio" name="gender" value="others">其他
    </p>
    <p>hobby:
        <input type="checkbox" name="hobby" value="read">读书
        <input type="checkbox" name="hobby" checked value="tea">喝茶
        <input type="checkbox" name="hobby" value="game">游戏
    </p>
    <p>province:
        <select name="province" id="">
            <option value="sh" selected>上海</option>
            <option value="bj">北京</option>
            <option value="sz">深圳</option>
        </select>
    </p>
    
    """
    form表单提交文件需要注意:
        1. method必须是post
        2. <form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/from-data"> 
        Ps: enctype类似于数据提交的编码格式,默认是urlencoded只能够提交普通的文本数据
            formdata 就可以支持提交文件数据
    
    """
    
    from flask import Flask, request
    
    app = Flask(__name__)
    # 当前url既可以支持get请求也可以支持post请求 如果不写默认只能支持GET请求
    @app.route('/index/',methods=['GET','POST'])
    def index():
        print(request.form) # 获取form表单提交过来的非文件数据
        print(request.files) # 获取文件数据
        file_obj = request.files.get('myfile')
        print(file_obj.name)
        file_obj.save(file_obj.name)
        return 'OK'
    
    app.run()
    
    # 针对用户输入的标签,如果你加了value 那就是默认值
    <label for="d1">
        username:<input type="text" id="d1" name="username" disabled value="默认值">
    </label>
    
    disabled: 只能看不能改 与 readonly(只读) 类似
    

    CSS

    层叠样式表:就是给HTML标签添加样式的,让它变得更加美观

    # 注释
    /*单行注释*/
    /*
    多行注释1
    多行注释2
    多行注释3
    */
    
    通常我们在写css样式的时候也会用注释来划定区域(因为HTML代码很多,所以对应的css代码也会很多)
    demo:
    /*这是博客园首页的css样式文件*/
    /*顶部导航条样式*/
    ...
    /*左侧菜单栏样式*/
    ...
    /*右侧菜单栏样式*/
    ...
    
    # css的语法结构
    选择器 {
        属性1:值1;
        属性2:值2;
        属性3:值3
        }
    
    # css的三种引入方式
    1. style标签内部直接书写
        """
            在head块儿中
            <style>
                h1 {
                    color: burlywood;
                }
            </style>
        """
    2. link标签引入外部css文件(最正规的方式 解耦合)
        """
            在head块儿中
            <link rel="stylesheet" href="mycss.css">
        """
    3. 行内式(比较少用)
        """
            直接在标签代码中
            <h1 style="color: green">老板好 在干嘛呢?</h1>
        """
    
    css的学习流程
        1. 如何查找标签
            css查找标签的方式要掌握
            因为后面所有的框架封装的查找语句都是基于css来的
        2. 如何添加样式
    

    css选择器

    基本选择器

    /* 写在head中 */
    # 1. id选择器
            #d1 { /*找到id是d1的标签 将文本颜色变为绿黄色*/
                color: greenyellow;
            }
    # 2. 类选择器
        .c1 { /*找到class值里面包含c1的标签 */
            color: red;
        }
    # 3. 元素/标签选择器
        span { /*找到所有的span标签*/
            color: red;
        }
    # 4. 通用选择器
         * {  /*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 {  /*div内部所有的span变成红色 div后面的空格表示后代的意思*/
            color: red;
        }
        /* <div>div
            <p>div里面的p</p>
            <p>div p
                <span>div p span</span> # 这个变颜色
            </p>
            <span>span</span> # 这个变颜色
            <span>span</span> # 这个变颜色
        </div> */
    /* 儿子选择器 */
        div>span {
            color: red;
        }
        /* <div>div
            <p>div里面的p</p>
            <p>div p
                <span>div p span</span>
            </p>
            <span>span</span> # 这个变颜色 因为是div的儿子
            <span>span</span> # 同上
        </div> */
    /* 毗邻选择器 */
        div+span { /*同级别仅挨着下面的第一个*/
            color: aqua;
        }
        /*
        <div>div
            <p>div里面的p</p>
            <p>div p
                <span>div p span</span>
            </p>
            <span>span</span>
            <span>span</span>
        </div>
        <span>span</span> 这个变颜色 因为紧挨着div
        */
    /* 弟弟选择器 */
        div~span { /*同级别下面所有的span*/
            color: red;
        }
        /* <div>div
            <p>div里面的p</p>
            <p>div p
                <span>div p span</span>
            </p>
            <span>span</span> # 变色
            <span>span</span> # 变色
        </div> */
    

    属性选择器

    # 属性选择器是以[]作为标志的
    
    1. 含有某个属性
        <style>
            [username] { /*将所有含有属性名是username的标签背景色改为红色*/
                background-color: red;
            }
        </style>
        /*
        全部带有username的都变色
        <input type="text" username>
        <input type="text" username="xiaoming">
        老师:<input type="text" username="xiaohong">
        <p username="xiaolv">小绿老师</p>
        <div username="xiaohua">小花老师</div>
        <span username="xiaohong">小红老师</span>
        */
    2. 含有某个属性并且有某个值
        <style>
            [username='xiaohong'] { /*找到所有属性名是username并且属性值是xiaohong的标签*/
                background-color: red;
            }
        </style>
            /*
        <input type="text" username>
        <input type="text" username="xiaoming">
        老师:<input type="text" username="xiaohong"> 变色
        <p username="xiaolv">小绿老师</p>
        <div username="xiaohua">小花老师</div>
        <span username="xiaohong">小红老师</span> 变色
        */
    3. 含有某个属性并且有某个值的某个标签
        <style>
            input[username='xiaohong'] { /*找到所有属性名是username并且属性值是xiaohong的input标签*/
                background-color: wheat;
            }
        </style>
            /*
        <input type="text" username>
        <input type="text" username="xiaoming">
        老师:<input type="text" username="xiaohong"> 变色
        <p username="xiaolv">小绿老师</p>
        <div username="xiaohua">小花老师</div>
        <span username="xiaohong">小红老师</span>
        */
    
  • 相关阅读:
    微博CacheService架构浅析 对底层协议进行适配
    Lucene 查询原理 传统二级索引方案 倒排链合并 倒排索引 跳表 位图
    Linux kernel 同步机制
    对话 CTO〡用声音在一起,听荔枝 CTO 丁宁聊 UGC 声音互动平台的技术世界 原创 王颖奇 极客公园 2018-12-01
    当中台遇上DDD,我们该如何设计微服务?
    京东技术沙龙系列之二 | 深度解析京东微服务组件平台
    gRPC设计动机和原则
    微信全文搜索优化之路
    门户级UGC系统的技术进化路线——新浪新闻评论系统的架构演进和经验总结 提高响应性能的手段归根结底就是三板斧:队列(Queue)、缓存(Cache)和分区(Sharding)
    现加减乘除4则运算
  • 原文地址:https://www.cnblogs.com/k-free-bolg/p/14631758.html
Copyright © 2011-2022 走看看