博客列表 >03 前端样式、链接、列表、元素定位、事件监听、二级网页菜单实战

03 前端样式、链接、列表、元素定位、事件监听、二级网页菜单实战

老黑
老黑原创
2020年06月15日 21:05:55707浏览

主要内容包括:
1-css样式、链接、列表、元素定位
2-事件监听、事件触发阶段、事件代理
3-网页菜单实战

1、css样式的种类

html是框架,css是样式。

序号 内容 描述
1 内嵌样式 通过元素内style直接定义方式解决。但这种只能正对独立的一个元素来定义
2 前置模式 将相同的类,或元素标签(不建议)这种放到一起来定义
3 style.css文件方式 将对应的样式定义放到一个独立的.css文件中,这样多个html中有对应的类等都可以调用。

等于第一个只适应用一个元素,第二个适用于同一文件中的多个元素,第三个则适用于多个文件中的多个元素。
第一种情况示例:

  1. <body>
  2. <h2 style="color:greenyellow;">这个世界值得珍惜</h2>
  3. <h3 style="color:red ">谁也不知道明天将会发生什么?</h3>
  4. </body>

第二种情况示例:

  1. <head>
  2. <style>
  3. .red{
  4. color: red;
  5. }
  6. </style>
  7. </head>
  8. <body>
  9. <h2 class="red";>这个世界值得珍惜</h2>
  10. <h3 class="red";>谁也不知道明天将会发生什么?</h3>
  11. </body>

第三种情况示例,又分两种,一种是@import方式(简写和url复杂写)。

  1. <head>
  2. <style>
  3. /* @import url("demo12.css"); */
  4. @import "demo12.css";
  5. </style>
  6. </head>
  7. <body>
  8. <h2 class="red";>这个世界值得珍惜</h2>
  9. <h3 class="red";>谁也不知道明天将会发生什么?</h3>
  10. </body>

另外一种是link方式。

  1. <head>
  2. <link rel="stylesheet" href="demo12.css">
  3. </head>
  4. <body>
  5. <h2 class="red";>有些东西是你永远无法知道的</h2>
  6. <h3 class="red";>有些东西是你知道了也毫无意义的</h3>
  7. </body>

2、链接

链接的功能有好多种,主要的有:
|序号 |描述 |
|———|——————————-|
|1 |跳转到一个网页|
|2 |跳转到一个网页可以打开的文件|
|3 |下载。其实就是跳转到一个网页无法直接打开的文件|
|4 |发送邮件|
|5 |拨打电话|
|6 |快速到一个锚点,例如bottom、top等|
示例如下

  1. <body>
  2. <!-- 打开一个网站 -->
  3. <a href="https://php.cn" target="_self">php中文网</a>
  4. <!-- 下载文件 -->
  5. <a href="http://127.0.0.1:5500/0612/demo1.zip" target="_blank">下载文件</a>
  6. <!-- 发邮件 -->
  7. <a href="mailto: 498668472@qq.com" target="_blank">请发邮件给我</a>
  8. <!-- 打电话 -->
  9. <a href="tel:189456***34" target="_blank">请给我打电话</a>
  10. <a href="#hello">跳转到锚点</a>
  11. <!-- 锚点。style中的margin参数是为了将上下间隔拉大 -->
  12. <h1 id="hello" style="margin-top: 1000px;">这里是很下面的文档</h1>
  13. </body>

3、列表

列表有三种形式,无序列表、有序列表、自定义列表(有序列表用的相对少一些)。

一个技巧:vs code中直接通过

ul>li*3>a 就可以自动生成三行link填充的列表。

a:无序列表

  1. <!-- 无序列表 -->
  2. <!-- ul+li -->
  3. <ul>
  4. <li><a href="">首页</a></li>
  5. <li><a href="">正在秒杀</a></li>
  6. <li><a href="">Plus</a></li>
  7. </ul>

b:有序列表

  1. <!-- 有序列表 -->
  2. <!-- ol + li -->
  3. <h3>商品分类</h3>
  4. <ol start="1" type="i">
  5. <li><a href="">电脑 / 办公</a></li>
  6. <li><a href="">服装 / 男装 / 女装</a></li>
  7. <li><a href="">图书 / 文娱 / 教育</a></li>
  8. </ol>

c:自定义列表

  1. <!-- 自定义列表 -->
  2. <h3>联系我们</h3>
  3. <!-- dl + dt + dd -->
  4. <dl>
  5. <dt>电话:</dt>
  6. <dd><a href="tel:189456***34" target="_blank">189456***34</a></dd>
  7. <dd><a href="tel:0551-67744***" target="_blank">0551-67744***</a></dd>
  8. <dt>地址:</dt>
  9. <dd>魔界58弄46号(敲门要注意)</dd>
  10. </dl>

4、元素定位

a:有相对定位和绝对定位两种。

b:最大的是body。然后内部有相互嵌套和父子关系。

c:vh是一个相对展示页面的百分比。eg50%,可以理解为相对展示页面的50%。

  1. /* v: viewport, h:height */
  2. /* viewport: 视口, 可视窗口, 当前你的看到的窗口大小; */
  1. </head>
  2. <style>
  3. body{
  4. border:1px solid red;
  5. height: 50vh;
  6. }
  7. .box1{
  8. border:1px solid blue;
  9. height: 20vh;
  10. width: 20vh;
  11. top:20px;
  12. left:20px;
  13. position: absolute;
  14. }
  15. .box2{
  16. border:1px solid green;
  17. height: 40px;
  18. width: 40px;
  19. top:20px;
  20. left:20px;
  21. position: absolute;
  22. }
  23. </style>
  24. <body>
  25. <div class="box1">
  26. <div class="box2"></div>
  27. </div>
  28. </body>

5、事件、事件监听

事件有三种触发货监听模式

js要注意结束的:号,否则有些运行不了

展示结果是在浏览器的inspect->console中。

  1. body>
  2. <!-- 1. (内嵌的)事件属性 -->
  3. <button onclick="console.log(this.innerText)">神奇</button>
  4. <button>战争</button>
  5. <button>和平</button>
  6. <script>
  7. //2.对象属性方式添加事件,只有最后一次是有效的,同名事件彼此覆盖
  8. document.querySelectorAll("button")[1].onclick = function() {
  9. console.log("第一次点击‘战争’");
  10. };
  11. document.querySelectorAll("button")[1].onclick = function() {
  12. console.log("第二次点击‘战争’");
  13. };
  14. // 3. 事件监听器
  15. // btn.addEventListener(事件类型, 事件方法);
  16. const btn = document.querySelectorAll("button")[2];
  17. btn.addEventListener("click",function() {
  18. console.log("这是人类第一次开始和平");
  19. });
  20. btn.addEventListener("click",function() {
  21. console.log("这是人类第二次开始和平");
  22. });
  23. </script>

6、事件触发阶段

类似一个套娃,可以由内而外,也可以由外而内。

由内而外的时候addEventListener的默认参数就是false。反之由外而内则是true。

注意点:这个地方因为是选择的单一元素,因此用querySelector,最后没有all。

  1. <body>
  2. <div>
  3. <li><a href="">看到妖怪就赶快跑</a></li>
  4. </div>
  5. </body>
  6. <script>
  7. const a = document.querySelector("a");
  8. const li = document.querySelector("li");
  9. const div = document.querySelector("div");
  10. const body = document.body;
  11. // 事件冒泡: 由内向外
  12. a.addEventListener("click",showTagName);
  13. li.addEventListener("click",showTagName);
  14. div.addEventListener("click",showTagName);
  15. body.addEventListener("click",showTagName);
  16. // 事件捕获: 由外向内
  17. a.addEventListener("click", showTagName, true);
  18. li.addEventListener("click", showTagName, true);
  19. div.addEventListener("click", showTagName, true);
  20. body.addEventListener("click", showTagName, true);
  21. function showTagName() {
  22. alert(this.tagName);
  23. }
  24. </script>

7、事件代理

通过上一级(父级)来代理对下一级的操作。

例如下面这第一种,其实就相当于直接操作:

  1. <body>
  2. <ul>
  3. <li>外星人一级</li>
  4. <li>外星人二级</li>
  5. <li>外星人三级</li>
  6. <li>外星人四级</li>
  7. <li>外星人五级</li>
  8. <li>外星人六级</li>
  9. <li>外星人七级</li>
  10. <li>外星人八级</li>
  11. <li>外星人九级</li>
  12. <li>外星人十级</li>
  13. </ul>
  14. </body>
  15. <script>
  16. const lis = document.querySelectorAll("li");
  17. lis.forEach(function (li) {
  18. li.addEventListener("click", function () {
  19. console.log(li.innerText);
  20. });
  21. });
  22. </script>

下面这种情况则是通过ul来代理对li的操作,就是事件代理。

其中的ev为事件对象(估计用了下ed,也可以)。

ev.target: 返回的是当前正在触发事件的元素
ev.currentTarget: 返回的是事件绑定者

  1. <script>
  2. document.querySelector("ul").addEventListener("click", function(ed){
  3. console.log(ed.target);
  4. console.log(ed.currentTarget);
  5. });
  6. </script>

8、网页菜单实战

将几个功能做了结合:样式 + 链接 + 列表 + 事件监听 + 事件委托。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. a {
  14. color:#bbb;
  15. text-decoration: none;
  16. }
  17. #nav {
  18. background-color: black;
  19. height: 50px;
  20. line-height: 50px;
  21. }
  22. li {
  23. list-style: none;
  24. margin: 0 10px;
  25. float: left;
  26. }
  27. #nav > li > a:hover {
  28. color: white;
  29. }
  30. #nav > li {
  31. position: relative;
  32. }
  33. #nav > li > ul{
  34. position:absolute;
  35. top: 50px;
  36. width: 180px;
  37. border: 1px solid #aaa;
  38. border-top: none;
  39. }
  40. #nav > li > ul > li a{
  41. display: inline-block;
  42. height: 50px;
  43. color: #444;
  44. }
  45. ul.sub li:hover{
  46. background-color: #eee;
  47. }
  48. #nav > li > ul{
  49. display: none;
  50. }
  51. </style>
  52. </head>
  53. <body>
  54. <ul id="nav">
  55. <li><a href="">首页</a></li>
  56. <li>
  57. <a href="">神仙</a>
  58. <ul>
  59. <li><a href="">一级</a></li>
  60. <li><a href="">二级</a></li>
  61. <li><a href="">三级</a></li>
  62. <li><a href="">四级</a></li>
  63. <li><a href="">五级</a></li>
  64. <li><a href="">六级</a></li>
  65. </ul>
  66. </li>
  67. <li>
  68. <a href="">妖怪</a>
  69. <ul>
  70. <li><a href="">一妖</a></li>
  71. <li><a href="">二妖</a></li>
  72. <li><a href="">三妖</a></li>
  73. </ul>
  74. </li>
  75. <li><a href="">转化</a></li>
  76. <li><a href="">我的</a></li>
  77. </ul>
  78. </body>
  79. <script>
  80. //显示子菜单、关闭子菜单
  81. const navs = document.querySelectorAll("#nav > li");
  82. navs.forEach(function(nav){
  83. nav.addEventListener("mouseover", showSubMenu);
  84. nav.addEventListener("mouseout", closeSubMenu);
  85. });
  86. //显示子菜单的function
  87. function showSubMenu(ed){
  88. console.log(ed.target);
  89. if (ed.target.nextElementSibling !== null){
  90. ed.target.nextElementSibling.style.display = "block";
  91. }
  92. }
  93. //关闭子菜单的function
  94. function closeSubMenu(ed){
  95. if (ed.target.nodeName === "A" && ed.target.nextElementSibling !== null){
  96. ed.target.nextElementSibling.style.display = "none";
  97. }
  98. }
  99. </script>
  100. </html>
上一条:作业 03下一条:导航栏下拉菜单实战
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议