HTML/CSS/Javascript注册登陆界面全模版(表单验证/验证码生成/敏感词屏蔽/炫酷动画/账号信息储存)

作为前端初学者,我在自学过程中发现了许多自己难以解决的问题,而在搜索相关内容时由于许多资料过于分散,使用起来十分麻烦,所以我在完成相关内容编写后将其整理为一个模块来进行逐个分析。

示例源码:https://download.csdn.net/download/m0_51251253/13078306

本篇进行用户登陆与注册界面的整体构建,使用了HTML/CSS/Javascript以及少部分PHP,本文适用于:

•基本学会html/css,但没有深入学习者,对javascript有部分了解者

•熟练使用html/css,但对javascript了解不多者

•需要一个此类模块分析的学习者

•直接引用的小白

本文仅针对前端初学者,供实例分析所用,若有不合理之处请指出。

先放出效果图:
  在这里插入图片描述
登陆界面
  
注册界面

由于部分内容来自于其他博主的博客,各位在引用时请移步相关博客,这些我在下面对应位置会放出链接。

下面是本博客的内容目录

  • 1.界面设计

基本排版

载入透明背景动画

背景动态气泡

  • 2.表单验证

验证字符长度

确认密码

  • 3.敏感词屏蔽

正则表达式验证

禁止输入特殊字符

敏感词库

  • 4.随机验证码

验证码生成

验证输入

  • 5.简单的PHP账户信息储存验证

Esayweb提供模版

1.界面设计

基本排版

用户的登陆界面基本内容就是账号和密码的输入框以及一个确认按钮,所以我们首先编写以下内容:

这会产生两个对应的文本框和确认按钮以及忘记密码和注册的对应链接

<body id="indexboy"> <div class="back"><div class="container"> <h1 style="margin-top: 120px;">登录<a href="reg1.html" style="font-size:20px;color:rgba(200,200,200,1);text-decoration: none;"> &nbsp; &nbsp;转至「注册」</a> </h1><div> <p id="index">为了维护论坛内容和谐,您需要登陆后发言</p> </div> <div class="form"> <form name="myForm" action="server/login.php" method="post">					 <input style="margin-top:40px;" type="text" name="user" class="textarea" required placeholder=" 请输入您的工具站社区账号" onkeyup="this.value=this.value.replace(/[^\w]/g,'');"> <br><input style="margin-top:10px;font-size: 16px;" type="password" name="pass" class="textarea" required placeholder=" 请输入您的对应账号密码"> 		<br> <input style="margin-top:20px;" type="submit" value="确定登陆" onclick="return testForm()" class="layui-btn"><a style="font-size: 16px;color: white;text-decoration: none;" href="forgetpass.html">忘记密码?</a></form> </div> </div> </div> 

为了使界面美观,我们将其设置居中:

<style>body{text-align: center;}</style>

注册界面与此类似,只需改一下文字内容即可,这里就不再列出。

载入透明背景动画

在演示图中看到,登陆界面在进入时背景为黑色,在等待2秒后背景逐渐显现出来,完成此操作需要设计一个css动画。由于直接设置动画会使整个界面都变得透明,但我们需要的是黑色背景变得透明,而文本框主体不变,所以首先将body分为两层div,一个作为父级元素,一个作为子元素,父元素用来容纳背景,子元素用来容纳文本框:

` <div class="back">``  <div class="container">`//此处内容用来放置上面的文本框`  </div>`` </div>`

接下来定义这两层元素的样式,由于opaacity属性会使父元素与子元素一起改变透明度,所以背景使用ragb来修改透明度:

//设置想要显示的背景图片body{background-image: url(../images/2.jpg);background-size: 100%;}//设置父元素(黑色背景)并设置一个渐变动画.back{width: 100%;height: 100%;margin-top: 0;padding: 0 0;position: fixed;opacity: 1;background: linear-gradient(to bottom right,#000000, #434343);background: -webkit-linear-gradient(to bottom right,#50a3a2,#53e3a6);-webkit-animation:lighten 4s ;-webkit-animation-fill-mode: forwards;-webkit-animation-delay: 2s;animation: lighten 3s;animation-fill-mode: forwards;animation-delay: 2s;}//使随着时间推移黑色背景透明度逐渐降低@keyframes lighten{0%{background:linear-gradient(to bottom right,rgba(0,0,0,1), rgba(67,67,67,1)) ;}5%{background:linear-gradient(to bottom right,rgba(0,0,0,0.95), rgba(67,67,67,0.95)) ;}10%{background:linear-gradient(to bottom right,rgba(0,0,0,0.9), rgba(67,67,67,0.9)) ;}15%{background:linear-gradient(to bottom right,rgba(0,0,0,0.85), rgba(67,67,67,0.85)) ;}20%{background:linear-gradient(to bottom right,rgba(0,0,0,0.8), rgba(67,67,67,0.8)) ;}25%{background:linear-gradient(to bottom right,rgba(0,0,0,0.75), rgba(67,67,67,0.75)) ;}30%{background:linear-gradient(to bottom right,rgba(0,0,0,0.7), rgba(67,67,67,0.7)) ;}35%{background:linear-gradient(to bottom right,rgba(0,0,0,0.65), rgba(67,67,67,0.65)) ;}40%{background:linear-gradient(to bottom right,rgba(0,0,0,0.6), rgba(67,67,67,0.6)) ;}45%{background:linear-gradient(to bottom right,rgba(0,0,0,0.55), rgba(67,67,67,0.55)) ;}50%{background:linear-gradient(to bottom right,rgba(0,0,0,0.5), rgba(67,67,67,0.5)) ;}55%{background:linear-gradient(to bottom right,rgba(0,0,0,0.45), rgba(67,67,67,0.45)) ;}60%{background:linear-gradient(to bottom right,rgba(0,0,0,0.4), rgba(67,67,67,0.4)) ;}65%{background:linear-gradient(to bottom right,rgba(0,0,0,0.35), rgba(67,67,67,0.35)) ;}70%{background:linear-gradient(to bottom right,rgba(0,0,0,0.3), rgba(67,67,67,0.3)) ;}75%{background:linear-gradient(to bottom right,rgba(0,0,0,0.25), rgba(67,67,67,0.25)) ;}80%{background:linear-gradient(to bottom right,rgba(0,0,0,0.2), rgba(67,67,67,0.2)) ;}85%{background:linear-gradient(to bottom right,rgba(0,0,0,0.15), rgba(67,67,67,0.15)) ;}90%{background:linear-gradient(to bottom right,rgba(0,0,0,0.1), rgba(67,67,67,0.1)) ;}95%{background:linear-gradient(to bottom right,rgba(0,0,0,0.05), rgba(67,67,67,0.05)) ;}100%{background:linear-gradient(to bottom right,rgba(0,0,0,0), rgba(67,67,67,0)) ;}}@-webkit-keyframes lighten{0%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,1),rgba(83,227,166,1));}10%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.9),rgba(83,227,166,0.9));}20%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.8),rgba(83,227,166,0.8));}30%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.7),rgba(83,227,166,0.7));}40%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.6),rgba(83,227,166,0.6));}50%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.5),rgba(83,227,166,0.5));}60%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.4),rgba(83,227,166,0.4));}70%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.3),rgba(83,227,166,0.3));}80%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.2),rgba(83,227,166,0.2));}90%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.1),rgba(83,227,166,0.1));}95%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0.05),rgba(83,227,166,0.05));}100%{background: -webkit-linear-gradient(to bottom right,rgba(80,163,162,0),rgba(83,227,166,0));}}//设置文本框样式不变.container{opacity: 1;-webkit-animation-fill-mode:backwards;animation-fill-mode: backwards;}

以上即可实现进入界面后出现效果图中的渐变效果

背景动态气泡

这是注册界面的效果,利用无序列表的样式实现动态效果。

其利用了无序列表的背景颜色实现多彩气泡

  • 本样式引用自 https://blog.csdn.net/qq_38959715/article/details/80819194?utm_source=app

更多请转至原博客

html代码如下:

<div class="wrap"><div class="container"><h1 style="color: white; margin: 0; text-align: center">账 号 注 册</h1><h4 style="color: white; margin-top: 20px; text-align: center">在工具站-社区交流创建一个账户</h4><form name="myForm" action="server/reg.php" method="post"><label><input type="text" name="username" required placeholder="您的用户名(2~7个字符)" onkeyup="this.value=this.value.replace(/\s+/g,'')"/></label><b><p id="formwarn1" class="formwarn"></p></b><label><input type="text" name="user" required placeholder="您的账号(6~12个字符)" onkeyup="this.value=this.value.replace(/[^\w]/g,'');"/></label><b><p id="formwarn2" class="formwarn"></p></b><label><input type="password" name="pass" required placeholder="设置您的密码(6~20个字符,可以包含特殊符号)" /></label><b><p id="formwarn3" class="formwarn"></p></b><label><input type="password" name="passed" required placeholder="确认您的密码" /></label><b><p id="formwarn4" class="formwarn"></p></b><div><th><font size='4'>验 证 码</th><th>   <input type = "text" id = "myCode" required placeholder="请输入下方验证码,点击可刷新" style="height:40px;width:250px"/>   <b><p id="formwarn5" class="formwarn"></p></b>          <input class="flower" type="button" id="code" onclick="createCode()" style="height:40px;width:80px" title='点击更换验证码' />              </th></div><input type="submit" onclick="return testForm()" value="点此注册"/><p style="margin-top: 0;" class="change_link" style="text-align: center"><span class="text">已 有 账 户 ?</span><a href="index.html" class="to_login"> 点 此 登 陆 </a></p></form></div><ul><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul></div>

想要多几个气泡就在ul里添加新的li元素

若添加了li请注意在css中添加相应的选择器来进行动画设置

css部分如下:

* {box-sizing: border-box;}body {margin: 0;padding: 0;font: 16px/20px microsft yahei;background-image: url(../images/2.jpg);background-size: 100%;}.wrap {width: 100%;height: 100%;margin-top: 0;padding: 0 0;position: fixed;//使文本框固定不动opacity: 0.75;background: linear-gradient(to bottom right,#000000, #434343);//背景颜色background: -webkit-linear-gradient(to bottom right,#50a3a2,#53e3a6);}.container {width: 60%;margin: 0 auto;}.container h1 {text-align: center;color: #FFFFFF;font-weight: 500;}.container input {width: 320px;display: block;height: 36px;border: 0;outline: 0;padding: 6px 10px;line-height: 24px;margin: 15px auto;-webkit-transition: all 0s ease-in 0.1ms;-moz-transition: all 0s ease-in 0.1ms;transition: all 0s ease-in 0.1ms;}.container input[type="text"] , .container input[type="password"]  {background-color: #FFFFFF;font-size: 16px;color: #50a3a2;}.container input[type='submit'] {font-size: 16px;letter-spacing: 2px;color: #666666;background-color: #FFFFFF;}.container input:focus {width: 400px;}.container input[type='submit']:hover {cursor: pointer;width: 400px;}.to_login{color: #a7c4c9;}.text{color: #e2dfe4;}.wrap ul {position: absolute;top: 0;left: 0;width: 100%;height: 100%;color: red;z-index: -20;}//气泡颜色设置只需修改下方background-color即可.wrap ul li {list-style-type: none;display: block;position: absolute;bottom: -120px;width: 15px;height: 15px;z-index: -8;border-radius: 50%;background-color:rgba(2, 255, 255, 0.3);animotion: square 25s infinite;//-webkit-animation: square 25s infinite;}.wrap ul li:nth-child(1) {left: 0;background-color: rgba(170,120,200,0.3);animation-duration: 10s;-moz-animation-duration: 10s;-o-animation-duration: 10s;-webkit-animation-duration: 10s;}.wrap ul li:nth-child(2) {width: 40px;height: 40px;left: 10%;background-color: rgba(150,150,40,0.3);animation-duration: 15s;-moz-animation-duration: 15s;-o-animation-duration: 15s;-webkit-animation-duration: 11s;}.wrap ul li:nth-child(3) {left: 20%;width: 25px;height: 25px;background-color: rgba(40,150,150,0.3);animation-duration: 12s;-moz-animation-duration: 12s;-o-animation-duration: 12s;-webkit-animation-duration: 12s;}.wrap ul li:nth-child(4) {width: 50px;height: 50px;left: 30%;background-color: rgba(150,40,150,0.3);-webkit-animation-delay: 3s;-moz-animation-delay: 3s;-o-animation-delay: 3s;animation-delay: 3s;animation-duration: 12s;-moz-animation-duration: 12s;-o-animation-duration: 12s;-webkit-animation-duration: 12s;}.wrap ul li:nth-child(5) {width: 60px;height: 60px;left: 40%;background-color: rgba(255,255,2,0.3);animation-duration: 10s;-moz-animation-duration: 10s;-o-animation-duration: 10s;-webkit-animation-duration: 10s;}.wrap ul li:nth-child(6) {width: 75px;height: 75px;left: 50%;background-color: rgba(255,2,255,0.3);-webkit-animation-delay: 7s;-moz-animation-delay: 7s;-o-animation-delay: 7s;animation-delay: 7s;}.wrap ul li:nth-child(7) {left: 60%;width: 30px;height: 30px;background-color: rgba(100,200,255,0.3);animation-duration: 8s;-moz-animation-duration: 8s;-o-animation-duration: 8s;-webkit-animation-duration: 8s;}.wrap ul li:nth-child(8) {width: 90px;height: 90px;left: 70%;background-color: rgba(134,165,150,0.3);-webkit-animation-delay: 4s;-moz-animation-delay: 4s;-o-animation-delay: 4s;animation-delay: 4s;}.wrap ul li:nth-child(9) {width: 50px;height: 50px;left: 80%;background-color: rgba(120,80,43,0.3);animation-duration: 20s;-moz-animation-duration: 20s;-o-animation-duration: 20s;-webkit-animation-duration: 20s;}.wrap ul li:nth-child(10) {width: 75px;height: 75px;left: 90%;background-color: rgba(78,200,150,0.3);-webkit-animation-delay: 6s;-moz-animation-delay: 6s;-o-animation-delay: 6s;animation-delay: 6s;animation-duration: 30s;-moz-animation-duration: 30s;-o-animation-duration: 30s;-webkit-animation-duration: 30s;}@keyframes square {0% {-webkit-transform: translateY(0);transform: translateY(0)}100% {bottom: 400px;-webkit-transform: translateY(-500);transform: translateY(-500)}}@-webkit-keyframes square {0% {-webkit-transform: translateY(0);transform: translateY(0)}100% {bottom: 400px;-webkit-transform: translateY(-500);transform: translateY(-500)}}

2.表单验证

表单验证首先需要用到js获取到表单的数据,用以下代码实现

html部分:

<form name="myForm"><input type="text" name="user" value="请输入用户名"><input type="text" name="pass" value="请输入密码"><input type="text" name="passed" value="请确认密码"><input type="submit" onclick="return testForm()" value="点此提交"></form>

用name属性定义了文本框,而我们在提取文本框中内容时就用name做定位,而在提交表单时按下按钮就会先返回一个js函数用来检验表单内容,以下为js部分:


var str1 = document.forms["myForm"]["user"].value;var str2 = document.forms["myForm"]["pass"].value;var str3 = document.forms["myForm"]["passed"].value;

这样就取得了表单内容,假如对字符串长度有要求,比如规定密码必须长于6个字符,那么接下来就需要继续获取表单内容字符串长度:


var len1 =str1.length;var len2 =str2.length;

获取表单内容结束,接下来定义用于检验表单的函数。

验证字符长度

上面我们已经获取到了字符串的长度,只需要一个if条件即可验证长度:

function testForm(){if (len1<6||len1>12){document.getElementById("formwarn1").innerHTML="账号长度不符合要求,请重试";return false;}if (len2<6||len2>20){document.getElementById("formwarn2").innerHTML="密码长度不符合要求,请重试";return false;}  }

formwarn1和formwarn2是用于在检验出内容不符合要求后输出警告语句,只需要将一个定义了对应id的p元素放置在需要输出警告的地方,如下:

<input style="margin-top:40px;" type="text" name="user" class="textarea" required placeholder=" 请输入您的工具站社区账号"> <b><p style="color: red;" class="formwarn" id="formwarn1"></p></b>	<br> 

而return false即使内容错误后停留在当前页面,不进行表单上传。

确认密码

前面已经获取了密码和确认密码中的字符,同样只需要一个if验证:

  if (str2!=str3){//获取html内容信息var text1 = document.getElementById("formwarn1");var text2 = document.getElementById("formwarn2");var text3 = document.getElementById("formwarn3");var text4 = document.getElementById("formwarn4");text4.innerHTML="两次密码不一致,请重试";text4.style.color="red";text2.innerHTML="";text3.innerHTML="";text1.innerHTML="";return false;}

之所以将其他的text输出为空是为了同时只显示一个警告文本,使界面更简洁

3.敏感词屏蔽

正则表达式验证

该处js的正则表达式主要用到test(),march()方法。

test()方法可以在搜索到内容后返回true,否则返回false。

而march()可搜索内容后并返回相应内容文本,否则返回null。注意,marc的参数是表达式以下为js代码:

  var testwords = /在此处输入屏蔽词,词语之间用"|"分隔/g.test(str1);var outwords = str1.(/在此处输入屏蔽词,词语之间用"|"分隔/g);if (testwords){var warn=document.getElementById("formwarn1");warn.innerHTML='"'+outwords+'"'+"属违禁词汇,请您修改后提交";   //输出检测出的违禁词汇warn.style.cssText="color:red;"; //使警告文本变为红色text2.innerHTML="";text3.innerHTML="";text4.innerHTML="";text5.innerHTML="";return false;    }

禁止输入特殊字符

有两种方法,一种直接在用户键盘输入时禁止,一种输入后检测。

第一种直接在html上加入onkeyup属性,下面代码禁止中文及特殊字符输入:

<input type="text" name="user" required placeholder="您的账号(6~12个字符)" onkeyup="this.value=this.value.replace(/[^\w]/g,'');"/>

下面代码禁止空格和特殊字符:

<input type="text" name="username" required placeholder="您的用户名(2~7个字符)" onkeyup="this.value=this.value.replace(/\s+/g,'')"/>

第二种在js代码中用正则表达式检验,定义一个特殊字符的搜索模式:

//禁止输入中文var lan = /[\u4E00-\u9FA5\uF900-\uFA2D]/;if (lan.test(str1)){text1.innerHTML="";text2.innerHTML="账号仅能输入数字和字母,请修改后重试";text3.innerHTML="";text4.innerHTML="";text5.innerHTML="";return false;}//禁止输入特殊字符var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]");if (pattern.test(str0)){text1.innerHTML="不得含有特殊字符,请修改后重试";text2.innerHTML="";text3.innerHTML="";text4.innerHTML="";text5.innerHTML="";return false;}

敏感词库

词库来自于网络,已一并放在源文件中。

4.随机验证码

验证码生成

验证码实现原理是通过点击按钮生成一串随机数字字母,因此先创建一个按钮:

<div><th><font size='4'>验 证 码</th><th>   <input type = "text" id = "myCode" required placeholder="请输入下方验证码,点击可刷新" style="height:40px;width:250px"/>   <b><p id="formwarn5" class="formwarn"></p></b>          //验证码区域<input class="flower" type="button" id="code" onclick="createCode()" style="height:40px;width:80px" title='点击更换验证码' />              </th></div>

然后获取按钮的value值并从随机数中为它赋值:

//创建验证码var code ; //在全局定义验证码              function createCode(){ code = "";    var codeLength = 6;//验证码的长度,可自行设置var checkCode = document.getElementById("code");    var random = new Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R',   'S','T','U','V','W','X','Y','Z');//随机数,可增加更多字符   for(var i = 0; i < codeLength; i++) {//循环操作   var index = Math.floor(Math.random()*36);//取得随机数的索引(0~35)   code += random[index];//根据索引取得随机数加到code上   }   checkCode.value = code;//把code值赋给验证码   } 

这样在每次点击验证码按钮时就会刷新验证码,若需载入页面时就显示验证码,可以加一个body的属性:

<body onload="createCode()">//验证码按钮</body>

为了让验证码看不清,可以加个动态字效:

.flower{background-image: -webkit-linear-gradient(left,blue,#66ffff 10%,#cc00ff 20%,#CC00CC 30%, #CCCCFF 40%, #00FFFF 50%,#CCCCFF 60%,#CC00CC 70%,#CC00FF 80%,#66FFFF 90%,blue 100%);-webkit-text-fill-color: transparent;/* 将字体设置成透明色 */-webkit-background-clip: text;/* 裁剪背景图,使文字作为裁剪区域向外裁剪 */-webkit-background-size: 200% 100%; -webkit-animation: masked-animation 4s linear infinite;font-size: 15px;}@keyframes masked-animation {0% {background-position: 0  0;}100% {background-position: -100%  0;}}

输入验证

与表单验证,唯一不同的是生成的随机code是局部变量,无法在全局获取,所以要获取一次按钮被赋予的value值:

code = document.getElementById("code").value;//获得生成的验证码值var str4 = document.forms["myForm"]["myCode"].value;//获得用户输入的验证码//校验if (str4!=code){text1.innerHTML="";text2.innerHTML="";text3.innerHTML="";text4.innerHTML="";text5.innerHTML="验证码错误,请重试";return false;}

5.简单的PHP账户信息储存验证

此处使用Easyweb提供的用户登陆示例

本示例适用于PHP初学者或未学习PHP者,旨在提供一个简洁易懂可直接引用的例子,由于本人还未学习PHP,故仅引用示例,更多请访问Esayweb实例。

表单填写完成后,由form的action属性定义其数据传送目标,示例为reg.php:

<?phperror_reporting(0);try{//将发送来的数据保存起来$user = $_POST["user"];$pass = $_POST["pass"];$passed = $_POST["passed"];//这种方法也可以用于确认方法if($pass!=$passed)	{echo'<script>alert("注册失败","两次输入的密码不同,请重试。");</script>';return;}//连接至储存数据的文件$path = "../data/users.json";if(!file_exists($path) or filesize($path)==false){$mfile = fopen($path, "w");fwrite($mfile,"{}");$content = "{}";fclose($mfile);}$file = fopen($path, "r+");$content = fread($file,filesize($path));//检验账户数据是否存在$data = json_decode($content,true);if(array_key_exists($user,$data)){showMsg("无法注册","服务器中已存在此账户,你可以尝试<a href='../index.html'>登录</a>。");}else{$mfile = fopen($path, "w");$data[$user] = $pass;fwrite($mfile,json_encode($data));fclose($mfile);showMsg("注册成功","现在可以尝试<a href='../index.html'>登录</a>。");}fclose($file);}catch(Exception $e){showMsg("出错了","错误信息:".$e->getMessage()."。");}function showMsg($title,$msg){$file = fopen("../alert.html","r");echo (str_replace("MSG",$msg,str_replace("TITLE",$title,fread($file,filesize("../alert.html")))));fclose($file);}?>

以上基本完成了一个用户登陆注册页面的模块,可以实现相关基本功能,若有更多我会在此后进行补充。

第一次发博客,有些排版做的不好影响阅读,敬请各位谅解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620373.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

小程序如何写一个优美的tab选项卡

小程序如何写一个优美的tab选项卡&#xff1f; 最近有位朋友刚学小程序&#xff0c;于是乎给我传了他写的一个tab选项卡&#xff0c;昨天晚上恰有空闲&#xff0c;于是改了一下 写选项卡的方法有很多&#xff0c;方法也特别简单&#xff0c;本文就介绍一下就客户体验而言如何让…

css html5布局方式_创建新HTML5 / CSS3单页布局–艺术主题

css html5布局方式 HTML5/CSS3 single page layout – Art theme. Today I will like to product new great masterpiece – new template with codename: ‘Art theme’. This will nice HTML5 template with nice gray colors. Hope that you will like new styles and you w…

android popWindow组件微信式实现(较完整版)

效果 PopWinLayout package com.coral3.common_module.components;import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import a…

前端学习第四周

目录 一.position定位1.1定位的用法&#xff08;写法&#xff09;1.2relative相对定位1.2.1特性1.2.2实际案例 1.3absolute绝对定位1.3.1特性1.3.2实际案例 1.4fixed&#xff1a;固定定位1.4.1特性1.4.2实际案例 1.5sticky粘性定位1.5.1特性1.5.2实际案例 1.6z-index定位层级1.…

Web前端4

一、relative相对定位 position定位 1.position特性 css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则决定了该元素的最终位置。 2.position取值 static(默认) relative absolute fixed sticky relative相对定位 1.如果没有定位偏移量&am…

Flutter 城市/通讯录列表字母索引联动效果实现

前言 在像通讯录&#xff0c;联系人列表&#xff0c;城市选择列表等数据量比较多的长列表页面中&#xff0c;我们经常会留意到产品设计会在页面的右侧区域提供一个竖向的字母索引列表&#xff0c;供用户点击选择快速定位到长列表中的指定索引位置&#xff0c;以便于用户快速定位…

快给你的Vue项目添加一个编辑图片组件吧

一款功能极其强大的图片编辑插件 tui.image-editor 快速体验 首选在你的前端项目中安装&#xff1a; npm i tui-image-editor // or yarn add tui-image-editor现在你就去新建一个.vue文件&#xff0c;复制进去下面这段代码&#xff1a; <template><div id"t…

QTableWidget表格控件的用法(非常详细)

QTableWidget表格控件的用法&#xff08;非常详细&#xff09; [1] QTableWidget表格控件的用法&#xff08;非常详细&#xff09;[2] QTableWidget详解1.常用API设置自动调整行高和列宽设置表格内容是否可编辑设置行表头、列表头是否显示 2.添加子项3.右键弹出菜单4.设置风格5…

如果你觉得自己对 CSS 变量不熟悉,那么可以补充这个!

作者&#xff1a; Ahmad Shadeed 译者&#xff1a;前端小智 来源&#xff1a;ishadeed 点赞再看&#xff0c;养成习惯 本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收录&#xff0c;更多往期高赞文章的分类&#xff0c;也整理了很多我的文档&#xff0c;和教程资…

VMware中配置NAT方式上网 by.zyw

VMware中配置NAT方式上网 by.zyw 看了本站上众大神的VMware配置NAT方式上网的文章后&#xff0c;发现在本人电脑上并不能完全设置成功&#xff0c;在自己摸索后&#xff0c;虚拟机配置NAT方式上网成功&#xff0c;下列个人实际操作经验&#xff1a; NAT模式介绍&#xff1a; …

在线文档 - Google 文档的数据协议设计

在线文档 - Google 文档的数据协议设计 Google 文档作为 G Suite 重要的产品套件之一&#xff0c;作为优秀的在线协作文档而经常被开发者所讨论&#xff0c;在 Google 文档背后&#xff0c;有着一整套优秀的相关架构设计支撑&#xff0c;数据协议设计就是其中之一&#xff0c;非…

数仓--------简单了解

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测

分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测…

Prima Cartoonizer v3.1.4一键生成专属动漫头像,

不少小伙伴都想获取一个自己的专属动漫头像&#xff0c;但是要请画师帮忙画一张又不便宜。 今天小编就带来一款可以将图像一键转动漫效果的软件&#xff0c;内含了近40种不同的动漫模板&#xff0c;还有各种卡通眼睛、眼镜及漫画常用的贴图工具 满足你的各种漫画头像制作需求…

高中信息技术教资考试模拟卷(22下)

2022 年下半年全国教师资格考试模考卷一 &#xff08;高中信息技术&#xff09; 一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09; 1.2006 年 10 月 25 日&#xff0c;深圳警方成功解救出一名被网络骗子孙某…

RHCE——八、DNS域名解析服务器

RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…

string类中的一些问题

前言&#xff1a;C中的string类是继承C语言的字符数组的字符串来实现的&#xff0c;其中包含许多C的字符串的相关知识的同时&#xff0c;也蕴含很多的类与对象的相关知识&#xff0c;在面试中&#xff0c;面试官总喜欢让学生自己来模拟实现string类&#xff0c;最主要是实现str…

select语句详细解释

SELECT 语句的基本格式为&#xff1a; SELECT 要查询的列名 FROM 表名字 WHERE 限制条件; SELECT 语句常常会有 WHERE 限制条件&#xff0c;用于达到更加精确的查询。WHERE 限制条件可以有数学符号 ( < > > <) select name,age from employee where salary>3500…

go中select语句

在golang语言中&#xff0c;select语句 就是用来监听和channel有关的IO操作&#xff0c;当IO操作发生时&#xff0c;触发相应的case动作。有了 select语句&#xff0c;可以实现 main主线程 与 goroutine线程 之间的互动。 select {case <-ch1 : // 检测有没有数据可读//…

SQL SELECT语句

SQL语句是由简单地英语单词构成的。这些单词称为关键字&#xff0c;每个SQL语句都是由一个或多个关键字构成的。最经常使用的SQL语句大概就是SELECT语句了&#xff0c;它的用途是从一个或多个表中检索信息 SELECT 语句用于从数据中选取数据。 结果被存储在一个结果表中&#…