• 【简单的留言墙】HTML+CSS+JavaScript


                                                               目标:做一个简单的留言墙

                                            

    1.首先我们用HTML的一些标签,初步构造区域 样式。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>留言墙title>
    6. <style>
    7. /* ...... */
    8. <style>
    9. head>
    10. <body>
    11. <h1>留言墙h1>
    12. <p>输入内容后,点击提交即可p>
    13. <div>
    14. <span>谁:span>
    15. <input type="text">
    16. div>
    17. <div>
    18. <span>对谁:span>
    19. <input type="text">
    20. div>
    21. <div>
    22. <span>说:span>
    23. <input type="text">
    24. div>
    25. <div>
    26. <button>提交button>
    27. div>
    28. <div>
    29. <button>撤销button>
    30. div>
    31. body>
    32. html>

                                                                                  

    2.上面操作已经初步完成布局,接下来在style标签中书写CSS代码,利用各种选择器设置。使文字居中,并且改变文字颜色。

    1. <style>
    2. /* 各种选择器 类选择器 ID选择器 伪类选择器 后代选择器 子选择器 并集选择器 */
    3. h1 {
    4. /* 使h1标签中的文字样式居中 */
    5. text-align: center;
    6. }
    7. p {
    8. /* 使p标签中的文字样式居中 */
    9. text-align: center;
    10. /* 改变文字颜色 */
    11. color: darkgray;
    12. }
    13. style>

    3.文字已经居中,但是下面的输入框,按钮等还没居中,由于他们都被设置在div标签中,接下来可以对所有在div标签中的属性使用弹性布局设置这些元素的水平排列方式

    1. <style>
    2. h1 {
    3. /* 使h1标签中的文字样式居中 */
    4. text-align: center;
    5. }
    6. p {
    7. /* 使p标签中的文字样式居中 */
    8. text-align: center;
    9. color: darkgray;
    10. }
    11. div {
    12. /* 开启弹性布局 */
    13. display: flex;
    14. /* 设置元素水平方向排列问题 居中排列 */
    15. justify-content: center;
    16. /* 设置每个div标签中元素外边框距离 即元素与元素之间的距离 */
    17. /* 15px auto 意思为 该元素的上下外边框为15像素 左右自适应排布 */
    18. margin: 15px auto;
    19. }
    20. style>

     

    4.位置居中问题已经解决,但是会发现输入框及文字排列还并不整齐。这是因为我们并未对span标签里的文字及input标签设置各自宽度及高度,一旦设置就会各自居左排布。

    1. <style>
    2. h1 {
    3. /* 使h1标签中的文字样式居中 */
    4. text-align: center;
    5. }
    6. p {
    7. /* 使p标签中的文字样式居中 */
    8. text-align: center;
    9. color: darkgray;
    10. }
    11. div {
    12. /* 开启弹性布局 */
    13. display: flex;
    14. /* 设置元素水平方向排列问题 居中排列 */
    15. justify-content: center;
    16. /* 设置每个div标签中元素外边框距离 即元素与元素之间的距离 */
    17. /* 15px auto 意思为 该元素的上下外边框为15像素 左右自适应排布 */
    18. margin: 15px auto;
    19. }
    20. span {
    21. /* 设置宽度 */
    22. width: 100px;
    23. /* 设置高度 */
    24. height: 25px;
    25. }
    26. input {
    27. /* 宽度 */
    28. width: 200px;
    29. height: 25px;
    30. }
    31. style>

          

    5. 设置button按钮的宽度,文字颜色,按钮颜色

    1. <style>
    2. h1 {
    3. /* 使h1标签中的文字样式居中 */
    4. text-align: center;
    5. }
    6. p {
    7. /* 使p标签中的文字样式居中 */
    8. text-align: center;
    9. color: darkgray;
    10. }
    11. div {
    12. /* 开启弹性布局 */
    13. display: flex;
    14. /* 设置元素水平方向排列问题 居中排列 */
    15. justify-content: center;
    16. /* 设置每个div标签中元素外边框距离 即元素与元素之间的距离 */
    17. /* 15px auto 意思为 该元素的上下外边框为15像素 左右自适应排布 */
    18. margin: 15px auto;
    19. }
    20. span {
    21. /* 设置宽度 */
    22. width: 100px;
    23. /* 设置高度 */
    24. height: 25px;
    25. }
    26. input {
    27. /* 宽度 */
    28. width: 200px;
    29. height: 25px;
    30. }
    31. button {
    32. /* 文字颜色 */
    33. color: white;
    34. /* 背景颜色 */
    35. background-color: orange;
    36. /* 按钮宽度 */
    37. width: 300px;
    38. /* 边框颜色 去掉黑边框 */
    39. border: none;
    40. /* 设置按钮高度 */
    41. height: 30px;
    42. }
    43. style>

           

     6.基本布局已经完成,但还存在几个问题

    6.1 点击按钮无反应,使用伪类选择器进行设置

    1. <style>
    2. h1 {
    3. /* 使h1标签中的文字样式居中 */
    4. text-align: center;
    5. }
    6. p {
    7. /* 使p标签中的文字样式居中 */
    8. text-align: center;
    9. color: darkgray;
    10. }
    11. div {
    12. /* 开启弹性布局 */
    13. display: flex;
    14. /* 设置元素水平方向排列问题 居中排列 */
    15. justify-content: center;
    16. /* 设置每个div标签中元素外边框距离 即元素与元素之间的距离 */
    17. /* 15px auto 意思为 该元素的上下外边框为15像素 左右自适应排布 */
    18. margin: 15px auto;
    19. }
    20. span {
    21. /* 设置宽度 */
    22. width: 100px;
    23. /* 设置高度 */
    24. height: 25px;
    25. }
    26. input {
    27. /* 宽度 */
    28. width: 200px;
    29. height: 25px;
    30. }
    31. button {
    32. /* 文字颜色 */
    33. color: white;
    34. /* 背景颜色 */
    35. background-color: orange;
    36. /* 按钮宽度 */
    37. width: 300px;
    38. /* 边框颜色 去掉黑边框 */
    39. border: none;
    40. /* 设置按钮高度 */
    41. height: 30px;
    42. }
    43. /* 伪类选择器 设置按钮按下时的变化 */
    44. button:active {
    45. background-color: darkorange;
    46. }
    47. style>

    6.2.输入框有黑边框问题 还有光标显示位置太靠左。

    以下代码有所省略,突出了重点,还是利用CSS选择器设置属性。

    1. input {
    2. /* 宽度 */
    3. width: 200px;
    4. /* 设置高度 */
    5. height: 25px;
    6. /* 消除输入框黑框 */
    7. outline: none;
    8. /* 光标位置 */
    9. padding-left: 5px ;
    10. }

    6.3.通过网页中的检查查看发现我们所设置的输入框元素的宽度应该是30px,而这里却显示29.91px,显然有问题。原因是与浏览器的自动设置有关,为防止这些细节出错,最好再加上一段代码。

    1. /* *通配符 */
    2. * {
    3. margin: 0;
    4. padding: 0;
    5. box-sizing: border-box;
    6. }

     最终宽度成功设置为25。

    6.4.设置高度,使整体高居中度。

    1. h1 {
    2. /* 使h1标签中的文字样式居中 */
    3. text-align: center;
    4. /* 设置外边框 上为100高度 下为20高度 左右自适应 */
    5. margin: 100px 20px auto;
    6. }
    7. p {
    8. /* 使p标签中的文字样式居中 */
    9. text-align: center;
    10. color: darkgray;
    11. /* 设置外边框 */
    12. /* 设置外边框 上为20高度 下为20高度 左右自适应 */
    13. margin: 20px 20px auto;
    14. }

    6.5.设置背景图片,及整体高度 宽度 100% 即跟随浏览器大小的变化而变化。

    1. html body {
    2. width: 100%;
    3. background-image: url("背景.png");
    4. /* 图片全覆盖且不重复 */
    5. background-repeat: no-repeat;
    6. background-size: cover;
    7. height: 100%;
    8. }

    7. 接下来用到 JavaScript 进行行为交互。

    1. <script>
    2. //querySelector('选择器字符串') api
    3. //获取选择器元素
    4. let body = document.querySelector('body');
    5. //获取input选择器元素
    6. let inputs = document.querySelectorAll('input');
    7. //获取提交选择器元素
    8. let submit = document.querySelector('#submit');
    9. //点击提交操作
    10. submit.onclick = function () {
    11. //获取输入框里的信息
    12. let a = inputs[0].value;
    13. let b = inputs[1].value;
    14. let c = inputs[2].value;
    15. //三个输入框右空时,
    16. if(a=='' || b=='' || c=='') {
    17. //提示内容不能为空
    18. alert("内容不能为空");
    19. return;
    20. }
    21. /* 构造新的div 即目的是将留言设置在新的构造的div标签中,并加入到目前页面中呈现*/
    22. let newDiv = document.createElement('div');
    23. //为新构造的div标签起个类名
    24. newDiv.className = 'rows';
    25. //获取时间
    26. let myDate = new Date();
    27. let myTime=myDate.toLocaleString( );
    28. //设置新构造的div标签的内容
    29. newDiv.innerHTML = a + '对' + b + '说' + c +' '+ myTime;
    30. //将新的div标签加入到当前页面HTML中
    31. body.appendChild(newDiv);
    32. //提交成功后输入框清空效果
    33. for(let input of inputs) {
    34. input.value = '';
    35. }
    36. //撤销按钮 为了区分两个按钮元素 可以设置类名或ID名 再写类选择器 或 ID选择器 再调用
    37. //获取撤销选择器元素 #revoke ID选择器
    38. let revoke = document.querySelector('#revoke');
    39. //点击撤销后的动作
    40. revoke.onclick = function () {
    41. //获取所有新添加的DIV,因为上面设置了类名,所以这里获取类名
    42. let rev = document.querySelectorAll('.rows');
    43. if(rev==null || rev.length==0) {
    44. return;
    45. }
    46. //删除最新添加的div
    47. body.removeChild(rev[rev.length-1]);
    48. }
    49. }
    50. script>

    8.完整代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>留言墙title>
    6. <style>
    7. /* 各种选择器 类选择器 ID选择器 伪类选择器 后代选择器 子选择器 并集选择器 */
    8. html body {
    9. width: 100%;
    10. background-image: url("背景.png");
    11. background-repeat: no-repeat;
    12. background-size: cover;
    13. height: 100%;
    14. }
    15. /* *通配符 */
    16. * {
    17. margin: 0;
    18. padding: 0;
    19. box-sizing: border-box;
    20. }
    21. h1 {
    22. /* 使h1标签中的文字样式居中 */
    23. text-align: center;
    24. /* 设置外边框 上为100高度 下为20高度 左右自适应 */
    25. margin: 100px 20px auto;
    26. }
    27. p {
    28. /* 使p标签中的文字样式居中 */
    29. text-align: center;
    30. color: darkgray;
    31. /* 设置外边框 */
    32. /* 设置外边框 上为20高度 下为20高度 左右自适应 */
    33. margin: 20px 20px auto;
    34. }
    35. div {
    36. /* 开启弹性布局 */
    37. display: flex;
    38. /* 设置元素水平方向排列问题 居中排列 */
    39. justify-content: center;
    40. /* 设置每个div标签中元素外边框距离 即元素与元素之间的距离 */
    41. /* 15px auto 意思为 该元素的上下外边框为15像素 左右自适应排布 */
    42. margin: 15px auto;
    43. }
    44. span {
    45. /* 设置宽度 */
    46. width: 100px;
    47. /* 设置高度 */
    48. height: 25px;
    49. }
    50. input {
    51. /* 宽度 */
    52. width: 200px;
    53. /* 设置高度 */
    54. height: 25px;
    55. /* 消除输入框黑框 */
    56. outline: none;
    57. /* 光标位置 */
    58. padding-left: 5px ;
    59. }
    60. button {
    61. /* 文字颜色 */
    62. color: white;
    63. /* 背景颜色 */
    64. background-color: orange;
    65. /* 按钮宽度 */
    66. width: 300px;
    67. /* 边框颜色 去掉黑边框 */
    68. border: none;
    69. /* 设置按钮高度 */
    70. height: 30px;
    71. }
    72. /* 伪类选择器 设置按钮按下时的变化 */
    73. button:active {
    74. background-color: darkorange;
    75. }
    76. style>
    77. head>
    78. <body>
    79. <h1>留言墙h1>
    80. <p>输入内容后,点击提交即可p>
    81. <div>
    82. <span>谁:span>
    83. <input type="text">
    84. div>
    85. <div>
    86. <span>对谁:span>
    87. <input type="text">
    88. div>
    89. <div>
    90. <span>说:span>
    91. <input type="text">
    92. div>
    93. <div>
    94. <button id="submit">提交button>
    95. div>
    96. <div>
    97. <button id="revoke">撤销button>
    98. div>
    99. <script>
    100. //querySelector('选择器字符串') api
    101. //获取选择器元素
    102. let body = document.querySelector('body');
    103. //获取input选择器元素
    104. let inputs = document.querySelectorAll('input');
    105. //获取提交选择器元素
    106. let submit = document.querySelector('#submit');
    107. //点击提交操作
    108. submit.onclick = function () {
    109. //获取输入框里的信息
    110. let a = inputs[0].value;
    111. let b = inputs[1].value;
    112. let c = inputs[2].value;
    113. //三个输入框右空时,
    114. if(a=='' || b=='' || c=='') {
    115. //提示内容不能为空
    116. alert("内容不能为空");
    117. return;
    118. }
    119. /* 构造新的div 即目的是将留言设置在新的构造的div标签中,并加入到目前页面中呈现*/
    120. let newDiv = document.createElement('div');
    121. //为新构造的div标签起个类名
    122. newDiv.className = 'rows';
    123. //获取时间
    124. let myDate = new Date();
    125. let myTime=myDate.toLocaleString( );
    126. //设置新构造的div标签的内容
    127. newDiv.innerHTML = a + '对' + b + '说' + c +' '+ myTime;
    128. //将新的div标签加入到当前页面HTML中
    129. body.appendChild(newDiv);
    130. //提交成功后输入框清空效果
    131. for(let input of inputs) {
    132. input.value = '';
    133. }
    134. //撤销按钮 为了区分两个按钮元素 可以设置类名或ID名 再写类选择器 或 ID选择器 再调用
    135. //获取撤销选择器元素 #revoke ID选择器
    136. let revoke = document.querySelector('#revoke');
    137. //点击撤销后的动作
    138. revoke.onclick = function () {
    139. //获取所有新添加的DIV,因为上面设置了类名,所以这里获取类名
    140. let rev = document.querySelectorAll('.rows');
    141. if(rev==null || rev.length==0) {
    142. return;
    143. }
    144. //删除最新添加的div
    145. body.removeChild(rev[rev.length-1]);
    146. }
    147. }
    148. script>
    149. body>
    150. html>

                                                  

  • 相关阅读:
    分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测
    Linux进程控制(一)
    13个小众有趣的网站,只有程序员才看得懂
    Java架构师分布式搜索数据迁移
    java毕业设计对外汉语教学辅助平台Mybatis+系统+数据库+调试部署
    前端面试宝典
    Android问题笔记 - NoSuchmethodException: could not find Fragment constructor
    vue中node-sass下载失败Failed at the node-sass@7.0.1 postinstall script.解决方法
    Linux--进程间通信
    grep命令用法
  • 原文地址:https://blog.csdn.net/m0_73381672/article/details/133520167