三栏布局

  • 骨架demo:左右两栏,中间大栏
......
<style>
    html,body {
        height: 100%;
    }
    .left,.right {
        width: 200px;
        height: 100%;
        background-color: aqua;
    }
    .center {
        height: 100%;
        width: calc(100% - 400px);
        background-color: red;
    }


</style>
......
<body>
    <div class="left"></div>
    <div class="center"></div>
    <div class="right"></div>
    <script></script>
</body>

<!--效果:左右两侧固定,中间栏自适应-->

  • 把三栏拼凑在一起

<!--左栏向左浮动,右栏向右浮动,中间栏由于计算好了宽度,所以刚好见缝插针,插上来-->
......
.left {
        float: left;
    }
.right {
    float: left; 
}
......

<!--实际效果:

    - 中间栏把剩余的空间全部占满(调试工具查看得知),右栏被挤到窗口下面了,无法实现三栏合一

    - 使用浮动这种效果,影响的,永远是"后面的元素"

-->
  • 解决办法: 中间栏也浮动起来即可,完整代码如下
<!DOCTYPE html>
<html>
    <head>
        ......
        <style>
            html,body {
                height: 100%;
            }
            .left,.right {
                width: 200px;
                height: 100%;
                
            }
            .center {
                height: 100%;
                width: calc(100% - 400px);
                background-color: red;
                float: left; /*增加之处*/
            }
            .left {
                float: left;
                background-color: aqua;
            }
            .right {
                float: left; 
                background-color: aquamarine;
            }
        
        </style>
    </head>
    <body>
        <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
        <script></script>
    </body>
</html>

  • demo演示
<!--

    - 上下导航栏(固定高度),中间大块

    - 中间大块又分成三部分,左右栏(固定宽度),中间大块

-->

<!DOCTYPE html>
<html>
    <head>
        ......
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            html,body {
                height: 100%;
            }
            .top,.bottom {
                width: 100%;
                height: 50px;
                background-color: aqua;
            }
            .middle {
                width: 100%;
                height: calc(100% - 100px); /*自动计算上下高度*/
                background-color: red;
            }
            .left,.right {
                width: 200px;
                height: 100%;
                background-color: aquamarine;
            }
            .left {
                float: left;
            }
            .right {
                float: right;
            }
            .center {
                width: calc(100% - 400px); /*自动计算左右宽度*/
                height: 100%;
                background-color: chocolate;
                float: left;
            }
        </style>
    </head>
    <body>
        <div class="top"></div>
        <div class="middle">
            <div class="left"></div>
            <div class="center"></div>
            <div class="right"></div>
        </div>
        <div class="bottom"></div>
        <script></script>
    </body>
</html>


表单控件

  • 单选框

    • name属性值相同,位于同一组,保证单选效果

    • id 和 label 关联,当用户点击label的时候,等同于点击了单选框,十分方便

    • checked 设置了默认值,默认选项

<div class="container">
    <input type="radio" name="shopping" id="apple" checked>
    <label for="apple">苹果</label>
    <input type="radio" name="shopping" id="banana">
    <label for="banana">香蕉</label>
    <input type="radio" name="shopping" id="melon">
    <label for="melon">西瓜</label>
    <input type="radio" name="shopping" id="pear">
    <label for="pear">梨</label>
</div>
  • 复选框: 和 单选框类似
<div class="container" >
    <input type="checkbox" name="hobby">跳舞
    <input type="checkbox" name="hobby">唱歌
    <input type="checkbox" name="hobby" checked>旅行
    <input type="checkbox" name="hobby" checked>摄影
</div>
  • 上传文件
<div class="container">
    <!--最简单的样式:就有"上传文件,未选择任何文件"-->
    <input type="file"> 
</div>
  • 创建图形按钮替换原来的文本按钮(要放在form里面)
<form action="">
    <input type="image" src="img/btn.png">
</form>
  • hidden,隐藏在页面中,value值提交给后端
<input type="hidden" value="xxx">
  • 禁用/只读某些表单控件:disabled/readonly
<div class="container">
    <input type="radio" disabled>被禁用的单选框
    <button disabled>被禁用的按钮</button>
    <input type="text" disabled>
    <input type="text" value="只能读" readonly>
</div>

遮罩层的写法

<style type="text/css">
    #overlay {
        background: rgba(0,0,0,0.6);
        width: 100%; /*如何有高度,设立positon即有高度!如何铺满全屏,所有的边距为0即可!*/
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }
</style>
......
<div id="box"> <!--外层盒子-->
    <button @click="isShow=true">显示</button> 
    <div id="overlay" v-show="isShow" @click="isShow=false"> <!--遮罩层-->
        <div id="center" @click.stop> 
            <div>用户名: <input type="text" /></div>
            <div>密码: <input type="password" /></div>
            <div>
                <button>登录</button>
            </div>
        </div>
    </div>
</div>
......

容器居中的另一种写法

......
<style>
    .container {
        width: 200px;
        height: 200px;
        background-color: aqua;
        position: fixed;
        margin: auto; /*加上这些组合,才会居中*/
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
    }
    
</style>
.....
<body>
    <div class="container"></div>
    ......
</body>
  • 容器居中,之前的写法是这样:指定上,左50%,再向左上移动,扣除响应的外边距
......
<style>
    .container {
        width: 200px;
        height: 200px;
        background-color: aqua;
        position: absolute;
        top: 50%;
        left: 50%;
        margin-left: -100px;
        margin-top: -100px;
    } 
</style>
......
<body>
    <div class="container"></div>
</body>
  • 小结:实现容器居中,利用position-fixed/absolute 都可以做出来!

下拉框 select-option


<!--

- select

    - size: 规定下拉框要显示多少个列表项

    - multiple: 表示允许用户多选

- option

    - selected: 表示被选中

    - value: 表示提交后端的值
-->

......
<body>
    <div class="container">
        <select name="" size="3" multiple>
            <option value="">111</option>
            <option value="">222</option>
            <option value="">333</option>
            <option value="" selected>444</option>
        </select>
    </div>
    <script></script>
</body>
......

多行文件标签 textarea

  • 最最原始的样子(可以随意拉拽)
......
<body>
    <div class="container">
        <textarea></textarea>
    </div>
    <script></script>
</body>
......
......
<textarea rows="" cols=""></textarea> <!--一般不会这样写,通过css控制文本框的宽/高-->
......
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        textarea { /*通过css控制文本框的大小*/
            width: 300px;
            height: 300px;
        }
    </style>
</head>
<body>
    <div class="container">
                        <!--提示信息-->
        <textarea placeholder="请输入你的建议..."></textarea>
    </div>
    <script></script>
</body>

<!--

- 如果要输入默认值,直接把文本写在标签里面即可,没有什么value属性

    - <textarea>默认文本</textarea>

-->

  • 注意事项: textarea如果用回车间隔开,那么有个小bug,用户输入文本的时候,前面有一堆回车...
......
<div class="container">
    <textarea placeholder="请输入你的建议..."> <!--有很多回车-->
        
    </textarea>
</div>
  • 正确写法
......
<div class="container">
    <textarea placeholder="请输入你的建议">...</textarea> <!--正确格式,不要加回车-->
</div>
  • 通过css resize 控制文本框的拉拽样式
......

    <style>
        textarea {
            width: 300px;
            height: 300px;
            /* resize: none; */ /*固定宽高*/
            /* resize: vertical; */ /*垂直方向允许拉拽*/
            /* resize: horizontal; */ /*水平方向允许拉拽*/
            resize: both; /*默认效果,宽/高都可以拉拽*/
        }
    </style>
......
<body>
    <div class="container">
        <textarea placeholder="请输入你的建议..."></textarea>
    </div>
    <script></script>
</body>

字段集: fieldset 标签

......
<body>
    <fieldset>
        <legend>性别:</legend>
        <input type="radio" name="aaa">男
        <input type="radio" name="aaa">女
    </fieldset>
    <script></script>
</body>

<!--

- fieldset搭配 legend 使用

- legend 表示'缺口'

- 注意不要把我们的内容放入 legend,这是一个误区!!!

-->
  • 可以对 fieldset 和 legend 运用样式
......
<head>
    ......
    <style>
        fieldset {
            width: 500px; /*设置高度/宽度/边框*/
            height: 300px;
            border: 1px solid red;
        }
        
        legend {
            border: 1px solid blue; /*设置边框/文本对齐方式*/
            text-align: center;
        }
    </style>
</head>
<body>
    <fieldset>
        <legend>性别:</legend>
        <input type="radio" name="aaa">男
        <input type="radio" name="aaa">女
    </fieldset>
    <script></script>
</body>