标签
- 自闭合标签:<meta charset="UTF-8"/> # 末尾一般会有一个'/',不加也可以 - 非自闭合标签: <title></title>
html 头部信息 --- 除了 title/图标,其他都是不可见的
- 指明网页的编码方式(以下两句效果一样) <meta charset="UTF-8"> <meta http-equiv="content-type",content="text/html; charset=utf-8"> - "自动刷新"和'自动跳转' <meta http-equiv="Refresh" Content="5"> # 5s 后自动刷新网页 <meta http-equiv="Refresh" content="3;url=http://www.baidu.com"> # 3s后自动跳转到百度 - 关键词:方便搜索引擎 <meta name="keywords" content="开源,OSC,开源软件,开源硬件,开源网站,开源社区,java开源,perl开源,python开源,ruby开源,php开源,开源项目,开源代码"> - link 的两种用途 - 指明CSS路径: <link rel="stylesheet" href="...."> - 指明<title>图标路径: <link rel="shortcut icon" href="GREEN.ico">
html 块级元素(独自占一行) 和 行内元素(有多少内容,就占多少),通过CSS是可以进行互相转换的
# chrome 检查元素,区别很明显 - 块级元素:div h1 p (一整行) - 行内元素:span a select (有多少内容就占多少空间)
html 特殊字符
- 查询网址: 包含各种各样的特殊符号,需要自取 https://www.cnblogs.com/web-d/archive/2010/04/16/1713298.html - 说明 - 输入'<', html可以正常显示 - 输入"<a", html就不会显示了(被解释成了标签),要显示怎么办? --- <a
p和a标签注意事项
- <p> 标签 默认的<p>标签直接独占两行(一行文字,另一行的空白) # html <p>内容一</p> # 都占两行 <p>内容二</p> <p>内容三</p> - <a> 标签 - 链接属性 <a href="http://www.baidu.com">百度</a> # 原窗口打开 <a href="http://www.baidu.com" target="_blank">百度</a> # 新窗口打开 - 定位'锚点' --- 与 id 属性配合 <body> <h1>测试页面</h1> <a href="#i1">跳转到一</a> <a href="#i2">跳转到二</a> <a href="#i3">跳转到三</a> <div style="height:500px" id="i1">一一一一一一一一</div> <div style="height:500px" id="i2">二二二二二二二二二</div> <div style="height:500px" id="i3">三三三三三三三三三</div> </body> - 实战中,<a>经常被改造成'按钮'
input 系列
- 单选框:radio(实现'单选'效果,name属性值必须一致) <body> <h1>测试页面</h1> <div style="border: 1px solid red"> <p>username:<input type="text"></p> <p>password:<input type="password"></p> <p> sex: # 如果name属性值不一致,则出现'多选'的效果 <br> male <input type="radio" name="gender"> <br> female <input type="radio" name="gender"> </p> </div> </body> - 复选框:checkbox <h1>测试页面</h1> <div style="border: 1px solid red"> ...... <p> loving: # 复选框 <br> Football <input type="checkbox"> <br> Basketball <input type="checkbox"> <br> Tennis <input type="checkbox"> </p> </div> - 下拉框(单选): select-option <h1>测试页面</h1> <div style="border: 1px solid red"> ...... <p> City: <select> # 单选效果 <option>Beijing</option> <option>Shanghai</option> <option>Guangzhou</option> </select> </p> </div> # 并列单选效果(原来的基础上,再来一次即可) <h1>测试页面</h1> ...... <p> City: <select> <option>Beijing</option> <option>Shanghai</option> <option>Guangzhou</option> </select> <select> <option>Tianhe Area</option> <option>Haidian Area</option> <option>Huangpu Area</option> </select> </p> - 下拉框(复选):multiple <p> City: <select multiple size="2"> # 复选,size属性指定显示的个数 <option>Beijing</option> <option>Shanghai</option> <option>Guangzhou</option> </select> <select> <option>Tianhe Area</option> <option>Haidian Area</option> <option>Huangpu Area</option> </select> </p> - 小标题效果:optgroup-label <p> City: <select> <optgroup label="AAA"> # AAA小标题 <option>Beijing</option> <option>Shanghai</option> </optgroup> <optgroup label="BBB"> # BBB小标题 <option>Guangzhou</option> </optgroup> </select> ...... </p>
- 文件 <input type="file"> - 按钮 <input type="submit" value="submit"> # 表单提交 <input type="button" value="button"> # 配合js才有效果 <input type="reset" value="reset"> # 清空表单内容
input系列小结
- text - password - eamil - radio - checkbox - file - submit - button - reset
最最重要的html标签小结
- input 系列 - select 下拉框(搭配option,optgroup) - textarea - form
重要标签注意事项
- input 输入的内容,后端如何获取 --- name 属性值 - 搜狗搜索的提交地址: https://www.sogou.com/web?query=aclas # 示例代码(在django中,也是通过'name值'获取用户提交的内容) <div style="border: 1px solid green"> <form action="https://www.sogou.com/web" method="get"> <p> 搜索内容:<input type="text" name="query"> # name='query' </p> <p> <input type="submit" value="提交"> </p> </form> </div> - django示例 # test.html <div style="border: 1px solid green"> <form action="/app01/test/" method="get"> <p> 提交内容:<input type="text" name="query"> </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): print(request.GET) # <QueryDict: {'query': ['aclas']}> print(request.GET.get('query')) # aclas print(request.POST) # <QueryDict: {}> return render(request,'test.html') - radio 提交演示 - 基础版 # test.hml <div style="border: 2px solid purple"> <form action="/app01/test/" method="get"> <p> 提交内容:<input type="text" name="query"> </p> <p> male:<input type="radio" name="sex"> # name属性值保持一致 female:<input type="radio" name="sex"> </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): print(request.GET) # <QueryDict: {'query': ['aclas'], 'sex': ['on']}> print(request.GET.get('sex')) # on print(request.POST) # <QueryDict: {}> return render(request,'test.html') - 只是依赖'name属性',无法达到目的 - 改进版:增加 value 属性 # test.html <div style="border: 2px solid purple"> <form action="/app01/test/" method="get"> <p> 提交内容:<input type="text" name="query"> </p> <p> male:<input type="radio" name="sex" value="1"> # 值设置为 1 female:<input type="radio" name="sex" value="2"> # 值设置为 2 </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): print(request.GET) print(request.GET.get('sex')) print(request.POST) return render(request,'test.html') ''' <QueryDict: {'query': ['aclas'], 'sex': ['1']}> 1 <QueryDict: {}> <QueryDict: {'query': ['aclas'], 'sex': ['2']}> 2 <QueryDict: {}> ''' - checkbox 复选框 - 基础版: # test.html <div style="border: 2px solid purple"> <form action="/app01/test/" method="get"> ...... <p> Loving: Football:<input type="checkbox" value="1"> Basketball:<input type="checkbox" value="2"> Tennis:<input type="checkbox" value="3"> </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): # 获取不到'复选框的值' print(request.GET) # <QueryDict: {'query': ['aclas'], 'sex': ['1']}> print(request.POST) # <QueryDict: {}> return render(request,'test.html') - 改进版:增加 name 属性 # test.html <p> Loving: # 增加 name 属性 Football:<input type="checkbox" name="favor" value="1"> Basketball:<input type="checkbox" name="favor" value="2"> Tennis:<input type="checkbox" name="favor" value="3"> </p> # views def test(request): print(request.GET) # <QueryDict: {'query': ['aclas'], 'sex': ['1'], 'favor': ['2', '3']}> print(request.POST) # <QueryDict: {}> return render(request,'test.html') - 上传文件: - 基础版: # test.html <div style="border: 2px solid purple"> <form action="/app01/test/" method="get"> ...... <p> 上传: <input type="file" name="upload"> </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): # 只有文件名,文件并没有上传 print(request.GET) # <QueryDict: {'query': ['aclas'], ...... 'upload': ['cookies.txt']}> print(request.POST) return render(request,'test.html') - 改进版:<form> 增加 enctype="multipart/form-data",method='post'(后端要作修改) # test.html <div style="border: 2px solid purple"> # method='post' enctype="multipart/form-data" <form action="/app01/test/" method="post" enctype="multipart/form-data"> ...... <p> 上传: <input type="file" name="upload"> </p> <p> <input type="submit" value="提交"> </p> </form> </div> # views def test(request): print(request.GET) # <QueryDict: {}> print(request.POST) # <QueryDict: {'query': ['aclas'], 'sex': ['1'], 'favor': ['1', '2']}> if request.method == 'POST': print(request.FILES) # <MultiValueDict: {'upload': [<InMemoryUploadedFile: my_test.py (text/x-python)>]}> file_obj = request.FILES.get('upload') print(file_obj.name, file_obj.size) # my_test.py 204 f = open(file_obj.name, 'wb') # 生成文件对象 for chunk in file_obj.chunks(): # 遍历'文件块 --- chunks' f.write(chunk) f.close() return HttpResponse('Upload Sucess!!!') else: return render(request,'test.html') - 下拉框 # test.html <p> 城市: <select name="city"> # name属性,传给后端 <option value="1">北京</option> # value值用于区分 <option value="2">上海</option> <option value="3">广州</option> </select> </p> # views def test(request): print(request.GET) # <QueryDict: {}> print(request.POST) # <QueryDict: {'query': ['aclas'], ...... 'city': ['2']}> return render(request, 'test.html') - 多文本 # test.html <p> <textarea name="many_text" cols="30" rows="10"></textarea> </p> # views def test(request): print(request.GET) # <QueryDict: {}> print(request.POST) # <QueryDict: {'query': ['aclas'], ...... 'many_text': ['123213123\r\n13212321\r\n123213']}> return render(request, 'test.html')
- 小结: name是必须的,value 在'选框'中需要,file 在form中要加额外的东东 - input - name 属性 - text - password - radio(name值要一致) - checkbox(name值要一致) - file - enctype="multipart/form-data" - select - textarea - value 属性 - radio - checkbox - option
- label:标签,与其他元素搭配实现对应元素的'便捷功能'(label for='关联元素的id') - 实例: ...... <body> <h1>测试页面</h1> <div style="border: 1px solid red"> <p> 用户名: <input type="text"> // 点击用户名是没有效果的,必须点击 input 框,下同 密码: <input type="password"> </p> <p> <label for="username">用户名: // 点击用户名有效果,直接跳到 input 框,下同 <input type="text" id="username"> </label> <label for="pwd">密码: <input type="password" id="pwd"> </label> </p> </div> </body> </html> - 三种列表 - ul:无序列表 - li - ol:有序列表 - li - dl:列表 - dt:小标题 - dd:内容 - 实例: ...... <body> <h1>测试页面</h1> <div style="border: 1px solid red"> <ul> <li>aaa</li> <li>bbb</li> <li>ccc</li> </ul> <ol> <li>aaa</li> <li>bbb</li> <li>ccc</li> </ol> <dl> <dt>AAA</dt> <dd>aaa</dd> <dd>bbb</dd> <dt>CCC</dt> <dd>ccc</dd> </dl> </div> </body> </html> - table:表格 - 结构: table,thead,tbody <body> <h1>测试页面</h1> <div style="border: 1px solid red"> <table> <thead></thead> <tbody></tbody> </table> </div> </body> - tr 表示'行',td 表示'列',th 表示 '头部的列' <div style="border: 1px solid red"> <table> <thead> <tr> # 这么写,显得头部和body一样,区别不明显 <td>第一列</td> <td>第二列</td> <td>第三列</td> </tr> </thead> <tbody> <tr> <td>第一列</td> <td>第二列</td> <td>第三列</td> </tr> </tbody> </table> </div> - 纠正头部的'列' <div style="border: 1px solid red"> <table> <thead> <tr> <th>第一列</th> # 会有加粗效果 <th>第二列</th> <th>第三列</th> </tr> </thead> <tbody> <tr> <td>第一列</td> <td>第二列</td> <td>第三列</td> </tr> </tbody> </table> </div> - 添加边框效果 <table border="1"> # 这种写法是'过时'的写法 ...... </table>
- 表格的合并(行的合并,列的合并) - 测试实例: 四列五行 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> </head> <body> <h1>测试页面</h1> <div> <table border="1"> <thead> <tr> <th>第一列</th> <th>第二列</th> <th>第三列</th> <th>第四列</th> </tr> </thead> <tbody> <tr> <td>第一个</td> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> <tr> <td>第一个</td> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> <tr> <td>第一个</td> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> <tr> <td>第一个</td> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> </tbody> </table> </div> </body> </html> - 行的合并,colspan // 把表头的前两个单元格合并 <table border="1"> <thead> <tr> <th colspan="2">第一列</th> <th>第二列</th> <th>第三列</th> <!--<th>第四列</th>--> // 第四列就得删除了,不删会凸出来 </tr> </thead> <tbody> - 列的合并,rowspan // 表体的第一个单元格,和下面一个单元格合并 <tbody> <tr> <td rowspan="2">第一个</td> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> <tr> <!--<td>第一个</td>--> <td>第二个</td> <td>第三个</td> <td>第四个</td> </tr> - 合并的套路就是,合并多少格,相应的就要删掉多少格
- fieldset:类似登录表单 - 元素:fieldset,legend - 实例: ...... <h1>测试页面</h1> <div> <fieldset> <legend>Login</legend> <label for="username"> <p>用户名: <input type="text" id="username"></p> </label> <label for="pwd"> <p>密码: <input type="password" id="pwd"></p> </label> </fieldset> </div> </body> </html> - iframe:加载别的网页(跨域问题)
HTML 小结
- 分类 - 块级元素 - 行类元素 - 特殊符号 - p,br,h - input 系列 - form - action - method -enctype: 文件上传专属 - select,textarea - ul/ol/dl - table - iframe,fieldset - div,span
引入CSS的三种方式
- 标签引入 style(优先级最高) - <head>引入 style(优先级中) - <head>引入 <link>,即外部文件(优先级最低)
CSS 选择器
- 层级选择器: 使用'空格'一层一层找下来 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> <style> // 相互之间使用'空格'隔开 div div p .c3{ background-color:red; } </style> </head> <body> <h1>测试页面</h1> <div class="c2"> <div></div> <div> <p> <span>00</span> <a class="c3">uu</a> // 红色背景效果 </p> </div> </div> </body> </html> - 组合选择器: 使用'逗号'隔开,批量选择 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> <style> // 使用'逗号'隔开 .c1,.c2,.c3{ color:greenyellow; } </style> </head> <body> <h1>测试页面</h1> <div class="c1">1</div> <div class="c2">2</div> <div class="c3">3</div> </body> </html>
- 三个基本的css属性 <style> .c1{ color:red; # 字体颜色 background-color: #00a8c6; # 背景色 font-size: 32px; # 字体大小 } </style> - 颜色的三种写法 <style> background-color:#FF69B4; background-color:rgb(25,180,10); background-color:red; </style> - 高度 和 宽度 - height:没有 100% 属性 - width: 有 100% 属性 - 基础实例 ...... <style> .c2{ height:160px; width:500px } </style> </head> <body> <h1>测试页面</h1> <div class="c2">第二个</div> # 利用 chrome 检查,可以看出这块区域的大小,即高度和宽度 </body> - 相对父元素所占百分比 <body> <h1>测试页面</h1> <div class="c1">king水电费</div> <div style="width:500px"> <div style="width:20%;background-color:greenyellow">123456</div> # 只占20%的宽度(相对父元素的500px,从左往右) <div style="width:80%;background-color:pink">789101</div> # # 只占80%的宽度(相对父元素的500px,从左往右) </div> </body> - 这里如果想把20%和80%占满整个div,可以都添加 float:left 即可实现效果
CSS背景图片的处理
- background-image: url('blue.png') - 实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> <style> .img{ # 如果没有'高度'和'宽度',图片存在,但是无法显示 # 由于设定了宽度和高度,图片会一直重复,填充满整个div width:100%; height:800px; background-image: url('blue.png') } </style> </head> <body> <h1>测试页面</h1> <div class="img"></div> </body> </html> -此时,不想让图片重复填充,怎么破 --- background-repeat:no-repeat <style> .img{ width:100%; height:800px; background-repeat:no-repeat; # 图片不再重复,只有一张 background-image: url('blue.png') } </style> - 当我们定义了'宽度','高度',以及图片背景,并且图片不重复,这时图片是'死的' '宽度'和'高度'的限制,使图片只能固定显示那一块区域,此时若想让这块区域 显示图片的其他部分,怎么破? 定义 background-position(定义x,定义y) 可以使用chrome的'检查',使用鼠标滚轮确定'x,y的像素' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> <style> .img2{ width:100px; height:50px; background-repeat: no-repeat; background-image: url('blue.png'); background-position:-307px -140px; # chrome 调试显示美女图片的'眼睛' } </style> </head> <body> <h1>测试页面</h1> <div class="img2"></div> </body> </html> - background 可以把属性值全部写在一起(个人不推荐这么写...) <style> background: #00FF00 url(bgimage.gif) no-repeat fixed top; </style>
border
- 含义:边框 - 赋值: <!DOCTYPE html> <html lang="en"> <head> ...... </head> <body> <h1>测试页面</h1> <div style="border: 4px solid red"> # 边框大小 实线(虚线) 颜色 xxxx </div> </body> </html> - 由此延伸出'border-left,border-right,border-top,border-bottom'等等属性
display 展示
- 基础示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="...."> <link rel="shortcut icon" href="GREEN.ico"> <style> .div1{ display: none; # chrome 勾选,再取消,看看效果 } </style> </head> <body> <h1>测试页面</h1> <div style="border: 4px solid red" class="div1"> xxxx </div> </body> </html> - 效果:整个<div>块消失(在京东首页的'登录'导航条测试,'内容'和'位置'一起消失...) 与 display 属性类似的,还有一个属性 visibility ('内容'消失,但是'位置'还在,京东首页测试很明显) - display:block : 把元素效果渲染成'块级元素'效果 - 原实例 <!DOCTYPE html> <html lang="en"> <head> ...... </head> <body> <h1>测试页面</h1> <div style="border: 4px solid red" class="div1"> <p style="background-color:green"> # 整个段落都是呈现'绿色' 123456789 <br> <span style="background-color:purple">456789</span> # 456789显示紫色(内容多少,就占多少空间),被包裹在绿色中 </p> </div> </body> </html> - 此时,我想把'紫色'占满'一行'怎木破 --- 把<span>提升为'块级元素'即可:display:none ...... <p style="background-color:green"> 123456789 <br> # 新增属性 <span style="background-color:purple;display: block">456789</span> </p> </div> </body> </html> - display:inline 就是把'块级元素'变成'内联元素',不再作示例 - 小结: - block的特性:块级元素,可以设置'width'和'height' - inline的特性:内联元素,不换行 - display:inline-block,具有'小结'的所有特性('折叠菜单'效果的运用) <!DOCTYPE html> <html lang="en"> <head> ...... </head> <body> <span style="background-color:red;height:50px;width:200px">123456789</span> # 内联元素,是无法设置'width'和'height' <span style="display:inline-block;background-color:green;height:50px;width:100px">987654321</span> # 可以设置了 </body> </html>
cursor: 渲染'鼠标'的形状
- 基础示例 style> .div1{ cursor:pointer; } </style> ...... <body> <a href="http://www.baidu.com" target="_blank">百度</a> # 鼠标默认小手 <div class="div1"> 123 # 也会变成小手 </div> </body> - 鼠标的样式 - cursor:help; 鼠标帮助样式 - cursor:wait; 鼠标等待样式 - cursor:move; 鼠标移动样式 - cursor:crosshair;鼠标十字架样式
CSS边距 --- margin(外边距)/padding(内边距)
- 测试代码 <body> <div style="height: 70px;border: 1px solid red;"> <div style="height: 30px;background-color: greenyellow"></div> </div> </body> - 刷新网页,右键'内div',chrome增加'margin-top:17px',可以看到,greenyellow颜色块不再位于顶部,而是与顶部有距离了 - 刷新网页,右键'内div',勾掉"margin-top",chrome增加'padding-top:17px',可以看到,greenyellow颜色块区域越来大(原区域块实际没有变化的,只是被撑开了,仔细看chrome) - 实例 <div style="height: 100px;border: 1px solid red;background-color:#ddd"> <div style="margin-top:30px;margin-left: 100px;"> # 若删除 style,input框默认样式就是位于'左上角',而且挤在一起 <input type="text"> <input type="text"> # 这里可以增加'padding',使中间的input框看起来比较'大条' <input type="text"> </div> </div> - 小结 - margin(外边距):元素本身不会增加 - padding(内边距):元素本身会增加
浮动:堆叠挤在一起
- 基础实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> # 20%的颜色块和80%的颜色块不会'叠加'在一起 # 因为都是'块级'元素,各占一行 <div style="width: 500px;border: 1px solid red"> <div style="width: 20%;background-color: green">aaa</div> <div style="width: 80%;background-color: purple">bbb</div> </div> </body> </html> - 浮动效果:挤压在一起,从而两个颜色块占据100%的空间 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="width: 500px;border: 1px solid red"> <div style="width: 20%;background-color: green;float: left">aaa</div> <div style="width: 80%;background-color: purple;float: left">bbb</div> </div> </body> </html> - 注意:如果'purple块'此时 width 设置成'90%',就'浮动'不起来,没有堆叠效果了,因为父div的空间不够 - 实例3:clear:both,把浮动后的元素,拉回到'父元素' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="width: 500px;border: 1px solid red"> # 浮动以后,子元素会脱离父元素 <div style="width: 20%;background-color: green;float: left">aaa</div> <div style="width: 30%;background-color: purple;float: left">bbb</div> # 拉回来 <div style="clear: both"></div> </div> </body> </html> --- 小结: - 所谓'浮动',就是'堆叠'效果,标签会浮起来,但是会脱离父元素,需要拉回来 - 漂起来的时候要注意'宽度'的限制,超过'宽度'就无法浮动
position
- 博文地址 https://www.cnblogs.com/canuseethat/archive/2010/09/16/1827804.html - 三个值 - fixed:固定窗口,鼠标滚动对其无影响 - relative:搭配 absolute 使用的 - absolute:固定窗口,鼠标滚动对其有影响 - 基础实例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="height: 1000px;background-color: #ddd"></div> <div style="position: fixed">返回顶部</div> # 无效果(因为没有指定显示的位置) </body> </html> - 实例2:增加显示的位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="height: 1000px;background-color: #ddd"></div> # 靠右边200px,并且一直在底部 <div style="position: fixed;right: 200px;bottom: 0">返回顶部</div> </body> </html> - 实例3:把'fixed'换成'absolute',结果就是开始固定,鼠标一滚,位置马上变了... <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="height: 1000px;background-color: #ddd"></div> # 变更之处 <div style="position: absolute;right: 200px;bottom: 0">返回顶部</div> </body> </html> - 实例4:relative放在'父元素'作'关联' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="height: 500px;width:400px;border: 1px solid red;position: relative"> # 位于父元素的右下角显示 123456789 <div style="position: absolute;bottom: 0;right: 0">123456789</div> </div> </body> </html> - 实例5:干扰的'父元素',实际是没有影响的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div style="height: 500px;width:400px;border: 1px solid red;position: relative"> <div style="height: 200px"> # 无效果,123会继续向上找'relative' <div style="position: absolute;bottom: 0;right: 0">123456789</div> </div> </div> </body> </html>
img 标签本身就有 width 和 height 属性
- 经过测试,它的效果和css效果一样 <body> <h1>测试页面</h1> # 两个效果一样的 <img src="mid-autumnday.jpg" alt="中秋图片" width="50px" height="50px"> <br> <img src="mid-autumnday.jpg" alt="中秋图片" style="height: 50px;width: 50px"> </body> - 注意: <img>自带的'width'和'height'可以限制图片的大小,而div中'width'和'height'是无法限制img的
模态框练习
- 基础实例(一个按钮,一个'模态框区域',一个'div区域') <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .modal{ width: 400px; height: 300px; background-color: #dddddd; position: fixed; top: 50%; left: 50%; } </style> </head> <body> <h1>测试页面</h1> <input type="button" value="添加"> <div class="modal"></div> <div style="height: 2000px"></div> </body> </html> - 改进实例(让模态框显示在页面中间) ...... <style> .modal{ ...... left: 50%; margin-left: -200px; # 新增外边距 margin-top: -150px; } </style> - 添加'遮罩层' <style> .modal{ width: 400px; height: 300px; background-color: #dddddd; position: fixed; top: 50%; left: 50%; margin-left: -200px; margin-top: -150px; } .shadow{ # 占满整个屏幕 position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: black; } </style> <body> <h1>测试页面</h1> <input type="button" value="添加"> <div class="shadow"></div> # 添加遮罩层 <div class="modal"> <input type="text"> # 新增测试框 <input type="text"> <input type="text"> </div> <div style="height: 2000px"></div> </body> -指明元素的堆叠顺序, 并修改'遮罩层'的'不透明度' .modal{ ...... margin-top: -150px; z-index: 10; # 比较大,所以在遮罩层上面 } .shadow{ ...... background-color: black; opacity: 0.4; # 不透明度 z-index: 9; # 相对小,所以在模态框下面 } ..... <div class="modal"> <input type="text"> # 新增测试框 <input type="text"> <input type="text"> </div> - 注意,这里的 background-color 和 opacity 可以简写 .shadow{ ...... background-color: rgba(0,0,0,.6); # 颜色和不透明度 z-index: 9; }
写网页的基本布局
<!DOCTYPE html> <html lang="en"> <head> ...... </head> <body> <div class="pg-header"></div> # 头部 <div class="pg-body"></div> # 中间内容 <div class="pg-footer"></div> # 尾部 </body> </html>
-
基础示例
导航条的处理
```python
<!DOCTYPE html>
Title <body> <div class="pg-header"> <div class="w"> <a href="">标题一</a> <a href="">标题二</a> <a href="">标题三</a> <a href="">标题四</a> </div> </div> <div class="pg-body"></div> <div class="pg-footer"></div> </body>
-
刷新网页,查看效果(比如要把'标题二'在右边显示,'浮动'即可)
-
下面,使用'
### 效果:- 文本框 + 的实现 ```python - 最初的样子 <!DOCTYPE html> <html lang="en"> <head> ...... </head> <body> <div> <span>-</span> <input type="text"> <span>+</span> </div> </body> </html> - 删除input边框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .inp{ border: 0; # 删除边框 } </style> </head> <body> <div> <span>-</span> <input type="text" class="inp"> <span>+</span> </div> </body> </html> - 最外层div添加边框(由于块级元素边框太长,变成内联元素) ...... <div style="border: 1px solid #dddddd;display: inline-block"> # 添加边框,变成内联元素 <span>-</span> <input type="text" class="inp"> <span>+</span> </div> - 添加input左右的边框(或者添加span的边框也可以) ...... <style> .inp{ border: 0; border-right: 1px solid #dddddd; # 添加左右边框 border-left: 1px solid #dddddd; } </style> - 局部细节的优化 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .inp{ border: 0; border-right: 1px solid #dddddd; border-left: 1px solid #dddddd; height: 25px; margin: 0; # 删除input自带的边距 padding: 0; float: left; # 删除 inline-block带来的3px边距 } .sp{ display: inline-block; height: 25px; width: 25px; line-height: 25px; text-align: center; float: left; } </style> </head> <body> <div style="border: 1px solid #dddddd;display: inline-block"> <span class="sp">-</span> <input type="text" class="inp"> <span class="sp">+</span> </div> </body> </html> - 小结: - inline-block:自带 3px 的边距(span,a 标签也有类似的自带效果) - html标签的默认样式是可以通过css改造的 - img标签的边框:IE会显示出来,记得去除 - 实例(IE打开的话,有一种蓝色的边框) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> </style> </head> <body> <a href=""> <img src="mid-autumnday.jpg" alt=""> </a> </body> </html> - 解决办法,删除边框即可 <style> img{ border: 0; } </style>
html标签 默认值补充
- 示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> </style> </head> <body> 输入框默认值:<input type="`text`" value="123"> # value 大文本框默认值: <textarea>123</textarea> # 标签之间直接写内容 <!--单选框默认值--> 男:<input type="radio" name="sex" checked> # checked 女:<input type="radio" name="sex"> <!--复选框默认值--> 篮球:<input type="checkbox" name="like" checked> # checked 足球:<input type="checkbox" name="like" checked> 网球:<input type="checkbox" name="like" > 乒乓球:<input type="checkbox" name="like" > <!--下拉框默认值--> <select> <option value="1">北京</option> <option value="2" selected>上海</option> # selected <option value="3">广州</option> </select> </body> </html> - 默认值小结,就4个: - value='xxx' # input系列 - 标签之间填内容 # textarea - checked # 单/复选框 - selected # 下拉框
CSS小结及补充
- 最高优先级: !important # 文本颜色示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1{ color: red; } .c2{ color: blue; } </style> </head> <body> <div class="c1 c2">测试内容</div> # 应用了两个样式,c2优先级高,所以字体呈现蓝色 </body> </html> - 强制优选红色字体 ...... <style> .c1{ color: red !important; # 强制优先样式 } .c2{ color: blue; } </style> ...... - 属性选择器(针对'自定义属性') <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1[alex='a']{ # 满足 class = c1 并且 alex='a' 的标签应用样式 color: red; } </style> </head> <body> <div class="c1" alex="a">测试内容1</div> # 红色字体 <div class="c1" alex="b">测试内容2</div> <div class="c1">测试内容3</div> <div class="c1" alex="a">测试内容4</div> # 红色字体 </body> </html> - 定义 width 需要注意的问题: - 使用%时,外层容器记得定义'适合的宽度' - 示例:整页显示的时候,是没有问题的,但是缩小问题就来了,内容太多导致挤到外面了 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .pg-body-left{ width: 20%; background-color: red; float: left; } .pg-body-right{ width: 80%; background-color: purple; float: left; } </style> </head> <body> <div class="pg-body"> <div class="pg-body-left"> 111111111111111111111111111111111111111111111111111111111111111555555555555 </div> <div class="pg-body-right"> 222222222222222222222222222222222222222222222222222222222222222222222 </div> </div> </body> </html> - 解决办法:外层容器定义'适合的宽度' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .pg-body{ width: 980px; # 定义适合的宽度 margin: 0 auto; # 去除边距并居中 } .pg-body-left{ ...... } .pg-body-right{ ....... } </style> </head> <body> <div class="pg-body"> <div class="pg-body-left"> 111111111111111111111111111111111111111111111111111111111111111555555555555 </div> <div class="pg-body-right"> 222222222222222222222222222222222222222222222222222222222222222222222 </div> </div> </body> </html> - position练习示例:固定顶部的导航条 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .pg-header{ position: fixed; # 固定死,永远在顶部显示 top: 0; left: 0; right: 0; background-color: blue; height: 70px; } .pg-body{ margin-top: 100px; # 如果没有边距,'老男孩'会被覆盖 height: 1500px; } </style> </head> <body> <div class="pg-header"> 导航一 </div> <div class="pg-body"> 老男孩 </div> </body> </html>
input+icon
- 基础示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .icon-pwd{ display: inline-block; # 变成块级,才能设置高度和宽度 height: 30px; width: 30px; background-image: url("pwd.png"); } </style> </head> <body> <input> <span class="icon-pwd"></span> </body> </html> - 现在,实现把'小图标'放入'input框'效果(利用position) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .icon-pwd{ display: inline-block; height: 30px; width: 30px; background-image: url("pwd.png"); position: absolute; # 定义位置 right: 0; top: 0; } </style> </head> <body> <div style="width: 230px;position: relative"> # 父容器包裹起来 <input style="width: 230px"> # 设置成和父元素一样的宽度 <span class="icon-pwd"></span> # 应用position样式 </div> </body> </html> - 修复小问题,此时用户若输入很长的数据,数据会跨过图标 我们把input拆成200px的宽度和30px的内边距,就很完美了 注意:用户输入的数据是不会到'内边距的' <body> <div style="width: 230px;position: relative"> <input style="width: 200px;padding-right: 30px"> # 拆分宽度并设置内边距 <span class="icon-pwd"></span> </div> </body> - 小结: - input框+图标的原理就是上述这么做的 - 实战中,我们使用'font-awesome'插件来做
跑马灯示例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> <style> #d1 { display: inline-block; background-color: purple; } </style> </head> <body> <div id="d1"> 欢迎光临 </div> <script> // setInterval(匿名函数,事件) setInterval(function () { var divObj = document.querySelector('#d1'); # 获取元素对象 var divText = divObj.innerText; # 获取文本内容 var a = divText.charAt(0); # 获取指定的字符 var sub = divText.substring(1,divText.length); # 获取剩下的字符串 var new_str = sub+a; # 拼接成新字符串并赋值 divObj.innerText = new_str; },1000) </script> </body> </html>
js 序列化
JSON.string(obj) // 序列化:把对象(字典)转换成字符串 JSON.parse(str) // 反序列化:把字符串转换为对象(字典) var a = {"k1":123,"k2":456} var b = JSON.stringify(a) >>>'{"k1":123,"k2":456}' var c = JSON.parse(b) >>>{k1: 123, k2: 456}
- 转义(url的编码与解码) - 编码 encodeURI(url) - 解码 decodeURI(enUrl) <script> var url = 'http://www.baidu.com?q=王宝强'; // alert(url); http://www.baidu.com?q=王宝强 var enUrl = encodeURI(url); // alert(enUrl); http://www.baidu.com?q=%E7%8E%8B%E5%AE%9D%E5%BC%BA var deUrl = decodeURI(enUrl) // alert(deUrl) http://www.baidu.com?q=王宝强 </script>
js时间
# 声明时间对象,该对象自动包含当前时间 var now = new Date(); >>>Wed Nov 03 2021 21:18:25 GMT+0800 (中国标准时间) # 时间推后示例 now.setMinutes(now.getMinutes()+2) >>>>Wed Nov 03 2021 21:20:25 GMT+0800 (中国标准时间)
循环
- 遍历数组 <script> var list1 = ['alex','Jim Green','Kate Green','LiLei']; /*for(var i=0;i<list1.length;i++){ console.log(i); }*/ for(var index in list1){ console.log(index) } </script> - 遍历字典 <script> var dict1 = {'k1':1,'k2':2,'k3':3} for(var key in dict1){ console.log(key,dict1[key]) } </script>
定义js函数的三种方式
- 普通函数 <script> function mytest(arg) { console.log(arg); }; mytest(123); </script> - 匿名函数 <script> var a = function (arg) { alert(arg) } a(123) </script> - 注意,该匿名函数如果不赋值给变量a,IDE会自动提示'语法错误' 也就是说,'匿名函数'是不能单独定义的 - 当变量a被赋值为'匿名函数'以后,可以把变量a理解为'函数对象' 那么,该'函数对象'如何执行呢?当然是加'()',若有参,再传参 - 计时器示例 <script> # setInterval(匿名函数,时间) setInterval(function () { console.log(123) },1000) </script> - 自执行函数:(带有形参的函数)(实参),函数无需被调用,而是立即被指定,闭包运用比较多 ( function (arg) { alert(arg) } )(123);
js 的函数作用域
- js中,无'块级作用域',以下示例中,变量name依旧可以正常打印出来 <script> function mytest() { if(true){ var name = 'JimGreen' } alert(name) } mytest() # JimGreen </script> - 注意,若想声明'块级作用域',使用'let'关键字 <script> function mytest() { if(true){ let name = 'JimGreen' # 修改之处 } alert(name) # 没有输出任何东东 } mytest() </script> - js以函数做为'作用域',外部无法访问函数内的变量 <script> function mytest() { var name = 'Jim Green' } mytest() alert(name) # 没有输出任何东东 </script> - JavaScript的作用域链 - 由于JavaScript中的每个函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链 - 其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常。 <script> name = 'Jim Green'; function mytest() { var name = 'Kate Green'; function inner() { var name = 'Li Lei'; console.log(name) # Li Lei }; inner(); } mytest(); </script>
闭包(函数的嵌套)的典型用法,自执行函数(插件中经常这么干)
<script> (function(){ var msg = 'Hello'; function test1(){ console.log(msg + ' in test1 method') } test1(); })(); # 自执行函数一 (function(){ var msg = 'Hello'; function test2(){ console.log(msg + ' in test2 method') } test2(); })() # 自执行函数二 </script> - 都定义了 msg 变量,但是函数之间互相独立,不受影响
js 面向对象(没有'class'声明这种东东)
<script> function Person(name,age) { this.name = name; this.age = age; this.func = function(arg){ console.log(arg); }; } var obj = new Person('JimGreen',18); console.log(obj.name,obj.age); obj.func('King...') </script> - 上述示例中,创建的每一个对象,均包含相同的 func 匿名函数,造成内存的浪费,可以封装到'原型'中解决 <script> function Person(name,age) { # 声明类 this.name = name; this.age = age; } Person.prototype = { # 封装到原型 func:function(arg){ console.log(arg); } }; p = new Person('Jim Green',18); # 创建对象 // p.prototype.func('King....'); # 这种写法是错的,直接调用即可 p.func('King...'); # 调用封装到'原型'的方法 </script> - 把封装在'原型'的函数修改成'箭头函数',删除'function'关键字,变成'=>'即可,一样的效果 <script> function Person(name,age) { this.name = name; this.age = age; } Person.prototype = { func:(arg)=>{ console.log(arg); } }; p = new Person('Jim Green',18); // p.prototype.func('King....'); p.func('King...'); </script>
jQuery 须掌握的知识点(参考中文文档)
- 选择器 - 基本(所有) - 层级(所有) - 其他(了解) - 筛选 - 查找 children([expr]) find(e|o|e) next([expr]) nextAll([expr]) parent([expr]) prev([expr]) prevAll([expr]) - 其他(了解) - 属性 - prop - 其他(了解) - CSS - css(name|pro|[,val|fn]) - scrollTop([val]) - 其他(了解) - 文档处理 - append(content|fn) - empty() - remove([expr]) - 其他(了解)
列表
- 有序列表 - <ol> 里面只可以放置<li> - <li> 里面可以随意放置标签 - type 的取值: 1,a,A,i,I start 的取值只能是数字 - 示例 <body> <ol type="A" start="27"> <li>内容一</li> <li>内容二</li> <li>内容三</li> </ol> </body> ''' AA.内容一 AB.内容二 AC.内容三 ''' - 无序列表 - 示例,none用得最多 <body> <ul type="none"> <li>内容一</li> <li>内容二</li> <li>内容三</li> </ul> </body> - 自定义列表:多应用于'图文混排'(单独一组,分多个排列) <body> <dl> <dt>我是图片</dt> <dd>我是文字</dd> </dl> <dl> <dt>我是图片</dt> <dd>我是文字</dd> </dl> <dl> <dt>我是图片</dt> <dd>我是文字</dd> </dl> </body>
图片
- 显示图片路径的三种方式 <body> <img src="desktop.png"> # 直接写(http协议) <img src="./desktop.png"> # 当前路径下面的图片(http协议) <img src="D:\Test_Demo\test_demoes\tools\desktop.png"> # file协议 </body> - 绝对路径在实际开发中,几乎用不到(一般用于测试环境) - 相对路径(常用) - 路径的符号标识 - '.' 表示:当前路径 - '../'表示:上一级路径
DOM 学习
- DOM查找 - 直接查找 - 间接查找 - 节点/元素的区别(以 children 和 childNodes 为例) - 节点:包含所有,元素+特殊符号(比如回车,空格) - 元素:就是html元素,比如<a> - 示例 <body> <div id="d1"> <a href="">百度</a> <a href="">新浪</a> <a href="">腾讯</a> </div> </body> >>>d1 = document.querySelector('#d1') >>>d1.children HTMLCollection(3)?[a, a, a] >>>d1.children[0].innerText '百度' >>>d1.childNodes NodeList(7)?[text, a, text, a, text, a, text] # text这里指'回车' - 获取元素的文本 - input框:通过 value 属性 <body> <input type="text" id="i1"> </body> >>>i1 = document.querySelector('#i1') <input type=?"text" id=?"i1">? >>>i1.value # input无任何值,返回空字符串 '' >>>i1.value # 手动填入内容'666' '666' >>>i1.value = 888 # 动态设置input框的内容 888 - <a>:通过 innerText/innerHtml - innerText: 只输入里面的文本,若遇到元素,就跳过元素 - innerHtml:文本+元素 - 示例1:二者一样 <body> <div> <a href="" id="a1">百度</a> </div> </body> >>>a1 = document.querySelector('#a1') <a href id=?"a1">?百度?</a>? >>>a1.innerText '百度' >>>a1.innerHTML '百度' - 示例2:区别 <body> <div> <a href="" id="a1">百<span>000</span>度</a> </div> </body> >>>a1 = document.querySelector('#a1') <a href id=?"a1">?"百"<span>?000?</span>?"度"</a>? >>>a1.innerText # 只输出文本 '百000度' >>>a1.innerHTML # 输出文本+元素 '百<span>000</span>度' - 实例演示:鼠标点击 input框,文字的消失与回归 - 事件 - 焦点事件:onfocus - 离开焦点事件:onblur <body> <input type="text" id="i1" value="请输入搜索关键字" onfocus="Focus();" onblur="Blur();"> <script> function Focus() { console.log('鼠标焦点事件') # 鼠标点进 input }; function Blur() { console.log('鼠标离开焦点事件') # 鼠标离开 input } </script> </body> - 最终效果:保证用户输入一些字符串,离开input框后,字符串得以保留(不被清空) <body> <input type="text" id="i1" value="请输入搜索关键字" onfocus="Focus();" onblur="Blur();"> <script> function Focus() { var i1 = document.querySelector('#i1'); if(i1.value == '请输入搜索关键字'){ i1.value = ''; } }; function Blur() { var i1 = document.querySelector('#i1'); if(i1.value.trim().length == 0){ i1.value = '请输入搜索关键字'; } } </script> </body>
图片的属性
- alt:图片挂掉后的提示 - title:鼠标移动到图片后的描述(图片挂掉与否,均显示) - 图片宽/高属性设置注意事项(现在一般通过css实现) - 若强行设置宽/高,图片可能变形 - 若单独设置宽,或者单独设置高,则等比例缩放,图片不会变形
class样式的操作
- className - classList - add() - remove() - 基础示例说明 <body> <div class="c1 c2 c3" id="d1">123456</div> </body> >>>d1 = document.querySelector('#d1') <div class=?"c1 c2 c3" id=?"d1">?123456?</div>? >>>d1.className # 输出 class值 'c1 c2 c3' >>>d1.classList # 输出 class值列表 DOMTokenList(3)?['c1', 'c2', 'c3', value: 'c1 c2 c3'] >>>d1.classList.add('c4') # 增加class值 >>>d1.classList DOMTokenList(4)?['c1', 'c2', 'c3', 'c4', value: 'c1 c2 c3 c4'] >>>d1.classList.remove('c4') # 删除class值 >>>d1.className 'c1 c2 c3' - 应用示例:模态框练习 - 环境类似这样 <html> <head> <style> </style> </head> <body> <div style="height: 2000px;background-color: #dddddd"> # 背景幕布 <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> </html> - 遮罩层的创建:覆盖全屏 <style> .shadow { position: fixed; top: 0; left: 0; bottom: 0; right: 0; # 占满全屏 background: rgba(0,0,0,.6); # 设置背景色,不透明度 z-index: 1000; # 层级数 } </style> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> - 模态框(弹框)的创建:位于屏幕中间 <style> .shadow { ...... z-index: 1000; } .modal { height: 200px; width: 400px; background-color: white; # 定义基本的样式 position: fixed; # 固定位置,控制上,左方向,调整左边距,上边距一半即可 top:50%; left: 50%; margin-left: -200px; margin-top: -100px; z-index: 1001; } </style> </head> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> - 最后一步,创建隐藏样式 .hide { display: none !important; } - 实际场景,用户访问页面,只看到背景幕布还有按钮,点击按钮,遮罩层和模态框均显示 模态框上再设置一个按钮,用户一点,遮罩层和模态框均消失 <!DOCTYPE html> <html> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我弹框" onclick="showModal();"> </div> <div id="shadow" class="shadow hide"></div> <div id="modal" class="modal hide"> # 把<a>当作按钮使用,删除原本的'链接效果' <a href="javascript:void (0)" onclick="hideModal();">点我消失</a> </div> <script> function showModal() { var shadow = document.querySelector('#shadow'); var modal = document.querySelector('#modal'); shadow.classList.remove('hide'); # 删除 hide,显示模态框 modal.classList.remove('hide'); } function hideModal() { var shadow = document.querySelector('#shadow'); var modal = document.querySelector('#modal'); shadow.classList.add('hide'); # 增加hide,隐藏模态框 modal.classList.add('hide'); } </script> </body> </html>
表格
- <table> 表示表格 - tr 表示'行' - td 表示'单元格'(支持嵌套标签,比如<p>) - 快速创建表格:包含两行两列,table>tr*2>td*2 - 单位:百分比,是相对父元素而言 - <body>的宽度是100%,但是高度是0,它的高度是依赖 内容 撑起来的 相当于,建高楼,地基(宽度)已打好,至于建多高,全靠你自己
通过js改变元素的样式
<body> <input type="text" style="background-color: red" id="i1"> </body> >>>var i1 = document.querySelector('#i1') >>>i1.style.backgroundColor = 'green' # 修改背景色 'green'
获取/设置/删除 属性
- getAttribute/setAttribute/removeAttribute - demo <body> <input type="text" style="background-color: red" id="i1" name="JimGreen" age="18"> </body> >>>var i1 = document.querySelector('#i1') >>>i1.getAttribute('name') 'JimGreen' >>>i1.getAttribute('age') # 获取 '18' >>>i1.setAttribute('age','20') # 设置 >>>i1.getAttribute('age') '20' >>>i1.removeAttribute('age') # 删除 <input type="text" style="background-color: red" id="i1" name="JimGreen"> - 练习Demo: 全选/取消全选/反选 - 勾选/取消勾选 选框Demo >>>cb = document.querySelector('#cb') >>>cb.setAttribute('checked','checked') # 勾选 >>>cb.removeAttribute('checked') # 取消勾选 - 环境搭建 <body> <table border="1" id="tb"> # 四行四列 <thead> <tr> <td>内容一</td> <td>内容二</td> <td>内容三</td> <td>序号</td> </tr> </thead> <tbody> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> </tbody> </table> <div class="d1"> <input type="button" value="全选" onclick="selectAll()"> # 绑定事件 <input type="button" value="取消全选" onclick="cancleAll()"> <input type="button" value="反选" onclick="reverseAll()"> </div> </body> - 利用 children/lastElementChild/firstElementChild 实现'选中'状态 >>>var tb = document.querySelector('#tb') >>>tb.children[1].children[0].lastElementChild.firstElementChild.setAttribute('checked','checked') # 选中状态 - 实现'全选' <body> <table border="1" id="tb"> <thead> <tr> <td>内容一</td> <td>内容二</td> <td>内容三</td> <td>序号</td> </tr> </thead> <tbody> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> <tr> <td>11</td> <td>22</td> <td>33</td> <td><input type="checkbox"></td> </tr> </tbody> </table> <div class="d1"> <input type="button" value="全选" onclick="selectAll()"> # 全选绑定事件 <input type="button" value="取消全选" onclick="cancleAll()"> <input type="button" value="反选" onclick="reverseAll()"> </div> <script> function selectAll() { var tb = document.querySelector('#tb') # 获取表格元素 var trs = tb.children[1].children # 获取 tr 数组 for(var i=0;i<trs.length;i++){ # 遍历 var tr = trs[i] tr.lastElementChild.firstElementChild.setAttribute('checked','checked') } } </script> </body> - 同理,实现'取消全选' function cancleAll() { var tb = document.querySelector('#tb') var trs = tb.children[1].children for(var i=0;i<trs.length;i++){ var tr = trs[i] # 变更之处 tr.lastElementChild.firstElementChild.removeAttribute('checked') } } - 实现'反选' function reverseAll(){ var tb = document.querySelector('#tb') var trs = tb.children[1].children for(var i=0;i<trs.length;i++){ var tr = trs[i] var ck = tr.lastElementChild.firstElementChild if(ck.checked){ ck.checked = false; # 这一步不能忽略,否则不生效 ck.removeAttribute('checked') }else{ ck.checked = true; # 同理,不能忽略 ck.setAttribute('checked','checked') } } } - bug分析:上述效果,单独调试一个'功能按钮'的时候,没有问题,但是联动的话,有些效果就无法实现,现在纠正 <script> function selectAll() { var tb = document.querySelector('#tb') var trs = tb.children[1].children for(var i=0;i<trs.length;i++){ var tr = trs[i] var ck = tr.lastElementChild.firstElementChild // ck.setAttribute('checked','checked'); # 这句换成以下代码,实现按钮之间的'联动' if(ck.checked){ ck.setAttribute('checked','checked') }else{ ck.checked = true; ck.setAttribute('checked','checked') } } } function cancleAll() { # 不再是取消'全选',而是取消'选择' var tb = document.querySelector('#tb') var trs = tb.children[1].children for(var i=0;i<trs.length;i++){ var tr = trs[i] var ck = tr.lastElementChild.firstElementChild // ck.removeAttribute('checked'); # # 这句换成以下代码,实现按钮之间的'联动' if(ck.checked){ ck.checked = false; ck.removeAttribute('checked'); }else{ ck.checked = false; ck.removeAttribute('checked'); } } } function reverseAll(){ # 逻辑保持不变 var tb = document.querySelector('#tb') var trs = tb.children[1].children for(var i=0;i<trs.length;i++){ var tr = trs[i] var ck = tr.lastElementChild.firstElementChild if(ck.checked){ ck.checked = false; ck.removeAttribute('checked') }else{ ck.checked = true; ck.setAttribute('checked','checked') } } } </script>
class样式的操作
- className - classList - add() - remove() - 基础示例说明 <body> <div class="c1 c2 c3" id="d1">123456</div> </body> >>>d1 = document.querySelector('#d1') <div class=?"c1 c2 c3" id=?"d1">?123456?</div>? >>>d1.className # 输出 class值 'c1 c2 c3' >>>d1.classList # 输出 class值列表 DOMTokenList(3)?['c1', 'c2', 'c3', value: 'c1 c2 c3'] >>>d1.classList.add('c4') # 增加class值 >>>d1.classList DOMTokenList(4)?['c1', 'c2', 'c3', 'c4', value: 'c1 c2 c3 c4'] >>>d1.classList.remove('c4') # 删除class值 >>>d1.className 'c1 c2 c3' - 应用示例:模态框练习 - 环境类似这样 <html> <head> <style> </style> </head> <body> <div style="height: 2000px;background-color: #dddddd"> # 背景幕布 <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> </html> - 遮罩层的创建:覆盖全屏 <style> .shadow { position: fixed; top: 0; left: 0; bottom: 0; right: 0; # 占满全屏 background: rgba(0,0,0,.6); # 设置背景色,不透明度 z-index: 1000; # 层级数 } </style> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> - 模态框(弹框)的创建:位于屏幕中间 <style> .shadow { ...... z-index: 1000; } .modal { height: 200px; width: 400px; background-color: white; # 定义基本的样式 position: fixed; # 固定位置,控制上,左方向,调整左边距,上边距一半即可 top:50%; left: 50%; margin-left: -200px; margin-top: -100px; z-index: 1001; } </style> </head> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我"> </div> <div id="shadow" class="shadow"></div> <div id="modal" class="modal"></div> </body> - 最后一步,创建隐藏样式 .hide { display: none !important; } - 实际场景,用户访问页面,只看到背景幕布还有按钮,点击按钮,遮罩层和模态框均显示 模态框上再设置一个按钮,用户一点,遮罩层和模态框均消失 <!DOCTYPE html> <html> <body> <div style="height: 2000px;background-color: #dddddd"> <input type="button" value="点我弹框" onclick="showModal();"> </div> <div id="shadow" class="shadow hide"></div> <div id="modal" class="modal hide"> # 把<a>当作按钮使用,删除原本的'链接效果' <a href="javascript:void (0)" onclick="hideModal();">点我消失</a> </div> <script> function showModal() { var shadow = document.querySelector('#shadow'); var modal = document.querySelector('#modal'); shadow.classList.remove('hide'); # 删除 hide,显示模态框 modal.classList.remove('hide'); } function hideModal() { var shadow = document.querySelector('#shadow'); var modal = document.querySelector('#modal'); shadow.classList.add('hide'); # 增加hide,隐藏模态框 modal.classList.add('hide'); } </script> </body> </html>
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://example.com/article/html5/
许可协议:署名-非商业性使用 4.0 国际许可协议