<!DOCTYPE html> <!--这个是HTML5使用的开头声明.--> <html> <head> <title>html整体结构</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <!--禁止浏览器从本地计算机的缓存中访问页面内容问--> <meta http-equiv="Pragma" name="no-cache" /> <!--no-cache:不缓存--><!--no-store:缓存但不存档--> <meta http-equiv="Cache-Control" name="no-store" /> <!--防止别人在框架里调用自己的页面--> <meta http-equiv="window-target" content="_top" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="HandheldFriendly" content="true" /> <!--viewport:移动端设备视窗--> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <!--忽略页面中的数字识别为电话,忽略email识别,去除Android平台中对邮箱地址的识别--> <meta content="telephone=no" name="format-detection" /> <!--启用360浏览器的极速模式(webkit)--> <meta name="renderer" content="webkit"> <!--UC强制竖屏--> <meta name="screen-orientation" content="portrait"> <!--QQ强制竖屏--> <meta name="x5-orientation" content="portrait"> <!--windows phone 点击无高光--> <meta name="msapplication-tap-highlight" content="no"> <script type="text/javascript" src="js/style.js"></script> <link rel="stylesheet" href="css/style.css"/> </head> <body> <p>写页面我们最先要了解的就是整体结构,然后就是头部,中间部分,底部.</p> <p>meta标签里面的东西我已经大致写好注释了,你们可以自己恰当的去做选择.</p> <p>然后就是引入外部css,js文件了.</p> <p>从优化的角度,我建议是先引入js,再引入css.注意:JS文件普遍应该写到<span><pre></body></pre>前面</span></p> <p>浏览器是从第一行开始读取文件的,有顺序的来读取.如果JS写在head里面会容易出现“阻塞”问题.</p> <P>我们来先了解html中的div结构</P> <pre> <div> <div>1</div> <div>2</div> <div>3</div> </div> <ul> <li>4</li> <li>5</li> <li>6</li> </ul> </pre> <p>上面这个属于div嵌套(跟ul li写法一样),先下外面最大的父元素,再逐个写子元素.</p> <p>第二节现在我该给大家介绍下id,class选择器,包括HTML5新增的选择器</p> </body> </html>
第二步,我要介绍的是:选择器.
选择器:
权重顺序 “ !important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符”.
4个等级的定义如下:
第一等:代表内联样式,如: style=””,权值为1000.
第二等:代表ID选择器,如:#content,权值为100.
第三等:代表类,伪类和属性选择器,如.content,权值为10.
第四等:代表类型选择器和伪元素选择器,如div p,权值为1.
特别注意: !important这个尽量少使用.
id选择器:一般不是用来写样式用的,是提供给后端或JS来操作DOM的.
class选择器:通过定义类名来添加样式,近年来有专业的前端开始利用后端的面向对象思想来写前端页面,目的是:简洁,高效,复用性高.
1,在class里面实现class组合:class="c1 c2 c3 c4"(组合必须要不得大于4个)
2,在css样式表中,可以提高重复使用率,
.c1{height:100px} .c2{width:100%} /*一般情况下,所有页面布局多多少少都会存在相同情况:宽度,高度等是会重复出现的,那么一般新手是会一个一个去写,一个一个去定义.例如:*/ .div1{width:100%;height:100px;color:#000000;font-size:18px} .div2{width:100%;height:50px;color:#000000;font-size:16px}
为了减少重复,提高效率,我们可以写成下面的情况:
.div1,.div2{width:100%;color:#000000} .div1{height:100px;font-size:18px} .div2{height:50px;font-size:16px}
为了可以实现重复使用的,而不单单是写一个css,而是“哪里需要放哪里”.
3,模块化:这个本来是后端才会有的,现在前端也可以实现了.那么我们该如何去理解呢?
<div class="menu">...这里可能会出现多组div嵌套</div> <div class="list">...这里可能会出现多组div嵌套</div>
在css上我们就要这样来写:(就是以父元素开头,这样就不会出现跟其他模块冲突)
/*公同使用的样式:*/.menu div1,.menu div2,.list div1,.list div2{width:100%;color#000000} .menu div1{....} .menu div2{....} .list div1{....} .list div2{....}
下面来介绍下HTML5的新标签和新选择器---(只讲解我常用的)
article>h2{background:#239528;}/*h1是article的子元素*/ .title+p{background:#239528;}/*兄弟选择器*/ .title1 li:first-child{background:#239528;}/*第一个li元素*/ p:nth-of-type(2){color:#0066cc;}/*2是指父元素的第二个选择器*/ fieldset:nth-child(odd){background:#239528;} fieldset:nth-child(even){color:#0066cc;} ul li:last-child{background:#0066CC;color:#239528;}/*最后一个li元素*/
<h1>下面来介绍下HTML5的新标签和新选择器---(只讲解我常用的)</h1> <address> Written by <a href="#">Donald Duck</a>.<br> Visit us at:<br> Example.com<br> Box 564, Disneyland<br> USA </address> <article> <h2>Internet Explorer 9</h2> <p>Windows Internet Explorer 9(简称 IE9)于 2011 年 3 月 14 日发布.....</p> </article> <blockquote> <p class="title">This is a long quotation. This is a long quotationuotatiouotatio.</p> <p>This is a long quotation.</p> <p>This is a long quotation. This is a long quotation.</p> </blockquote> <figure> <figcaption>黄浦江上的的卢浦大桥</figcaption> <ul class="title1"> <li>黄浦江</li> <li>黄浦江黄浦江</li> <li>黄浦江黄浦江黄浦江</li> </ul> </figure> <div> <input list="cars" value="asd" /> <datalist id="cars"> <option value="BMW"> <option value="Ford"> <option value="Volvo"> </datalist> </div> <form> <fieldset> 身高: <input type="text" /> </fieldset> <fieldset> 体重: <input type="text" /> </fieldset> <fieldset> 姓名: <input type="text" /> </fieldset> <fieldset> 住址: <input type="text" /> </fieldset> </form> <details> <summary>Copyright 2011.</summary> <p>All pages and graphics on this web site are the property of W3School.</p> </details>
你可以复制上面的html来查看页面效果.
下面我来介绍下在移动端上该注意的去取浏览器默认样式---style.css
@charset "utf-8"; html{font-size: 62.5%;} body { /*禁止选择*/ -webkit-user-select:none; /*去掉a,img,input的遮罩层*/ -webkit-tap-highlight-color:rgba(0, 0, 0, 0); /*允许独立的滚动区域和触摸回弹*/ -webkit-overflow-scrolling:touch; /*跟上面的一样..写法是兼容问题的话.*/ -webkit-tap-highlight-color:transparent; -webkit-user-select:none; /*禁止系统默认菜单*/ -webkit-touch-callout:none; -webkit-box-sizing:border-box; } *{-ms-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:baseline} body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,form,fieldset,input,textarea,p,blockquote,th,td,button,article,aside,details,figcaption,figure,footer,header,nav,section{margin:0;padding:0} body,button,input,select,textarea,p,article,span{line-height:2rem} h1,h2,h3,h4,h5,h6{font-weight:normal;line-height:3rem} /*1rem=10px */ /*字体自适应*/ /*比如说你在320px分辨率时,设置字体大小为1.2rem时,现在在不同宽度都可以看上去一样大小实现自适应.*/ /*设计师是以iphone6为设计标准时,16px=100%,每个断点以2px递增页面最小的字体大小*/ h1{font-size:2.8rem;} h2{font-size:2.6rem;} h3{font-size:2.2rem;} @media only screen and (min-width:360px) and (max-width:374px){ /*三星大屏幕机最低宽度:note2-note3,S2-S4:14px*/ html{font-size:87.5% !important;} } @media only screen and (min-width:375px) and (max-width:430px) { /*Iphone6,Iphone6plus最低宽度:16px*/ html{font-size:100% !important;} } /*手机横屏:最低宽度480px:18px*/ @media only screen and (min-width:480px) and (max-width:740px){ html{font-size:112.5% !important;} } /*平板电脑:最低宽度768px:20px*/ @media only screen and (min-width:768px) { html{font-size:125% !important;} } html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {-webkit-text-size-adjust:none;}/*阻止旋转屏幕时自动调整字体大小*/ textarea{resize:none;-webkit-appearance:none;outline:none} a,img{-webkit-touch-callout:none;} /* 链接选中以及鼠标悬浮样式*/ a:active, a:hover { outline: 0; text-decoration: none; } /*取消标签的特殊字体样式*/ strong { font-weight: normal; } em , i{ font-style: normal; } /*取消按钮在inphone上的默认样式*/ button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance:button; cursor:pointer } input[type="checkbox"], input[type="radio"] { box-sizing:border-box; padding:0; -webkit-appearance:none; } input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height:auto } input[type="search"] { -webkit-box-sizing:content-box; box-sizing:content-box; -webkit-appearance:textfield } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance:none } input[type=button] { outline:0; -webkit-appearance:none } table { border-collapse:collapse; border-spacing:0 } audio, canvas, progress, video { display:inline-block; vertical-align:baseline } audio:not([controls]) { display:none; height:0 } input::-webkit-input-placeholder{color:#F0F0F0;} textarea::-webkit-input-placeholder{color:#F0F0F0;} input::-webkit-input-speech-button {display:none} /*android上input:focus时input不随软键盘升起而抬高的情况和点击时高亮*/ a:focus,input:focus{ -webkit-tap-highlight-color:rgba(0,0,0,0);/*这个是兼容2.3以下的系统*/ -webkit-user-modify:read-write-plaintext-only;/*这个兼容到4.0以上的系统*/ } table {border-collapse:collapse;border-spacing:0;} th {text-align:inherit;} fieldset,img {border:none;} abbr,acronym {border:none;font-variant:normal;} del{text-decoration:line-through;} ol,ul {list-style:none;} caption,th {text-align:left;} sub,sup {font-size:75%;line-height:0;position:relative;vertical-align:baseline;} sup {top:-0.5em;} sub {bottom:-0.25em;} ins,a,a:hover {text-decoration:none;} a:focus,*:focus {outline:none;} .clearfix:before,.clearfix:after {content:"";display:table;clear:both;overflow:hidden;} .clearfix {zoom:1;} .clear {clear:both;display:block;font-size:0;height:0;line-height:0;overflow:hidden;} .hide {display:none;} .block {display:block;} /*单行文本控制溢出和换行*/ .outL{white-space:normal;word-break:break-all;width:100px;} .outH{overflow:hidden;text-overflow:ellipsis;white-space:nowrap; width:100px;} /*多行文本溢出显示省略号(...)的方法------webkit-line-clamp:2;这里的数字代表多少行*/ .ellipsis{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;} /*布局*/ .fl{float:left;display:inline;} .fr{float:right;display:inline;} .cb{clear:both;} .cl{clear:left;} .cr{clear:rigth;} .rel{position:relative;} .abs{position:absolute;} .tac{text-align:center;} .tal{text-align:left;} .tar{text-align:right;} .dib{display:inline-block;} .vab{vertical-align:bottom;} .vam{vertical-align:middle;} .vat{vertical-align:top;} /*网格*/ .box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;text-align:center;padding:5px 0;} .grid,.wrap,.grid:after,.wrap:after,.grid:before,.wrap:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .grid{*zoom:1} .grid:before,.grid:after{display:table;content:"";line-height:0} .grid:after{clear:both} .grid{list-style-type:none;padding:0;margin:0} .grid>.grid{clear:none;float:left;margin:0 !important} .wrap{float:left;width:100%} /*网格*/ /*flex*/ .flex{display:-webkit-flex;display:flex;display:-webkit-box;-webkit-flex:1;flex:1;-webkit-box-flex:1;} .flexcontent{margin:5px 1px;-webkit-flex:1;flex:1;-webkit-box-flex:1;background:hotpink;} /*垂直方向*/ .col{display:-webkit-box;display:flex;display:-webkit-flex;height:100%;-webkit-box-orient:vertical;flex-direction:column} /*水平方向*/ .row{display:-webkit-flex;display:flex;display:-webkit-box;margin:auto;width:100%;height:auto;-webkit-flex-wrap:wrap;flex-wrap:wrap;flex-direction:wrap;-webkit-box-orient:horizontal;-webkit-box-lines:multiple} .flex1{-webkit-box-flex:1;-webkit-flex:1;flex:1} .flex2{-webkit-box-flex:2;-webkit-flex:2;flex:2} .flex3{-webkit-box-flex:3;-webkit-flex:3;flex:3} /*flex*/ /*容器*/ .wrapper{position:absolute;top:0;right:0;bottom:0;left:0;padding-bottom:60px;overflow:auto;-webkit-overflow-scrolling:touch;} /*头尾*/ header,footer{position:fixed;right:0;left:0;z-index:1;text-align:center;background:#CCCCCC;} header{top:0;height:44px;} footer{bottom:0;} /*ios上使用transform的时候的闪屏问题可以尝试使用 .transform{-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden;} */ /*宽度*/ .w100p{width:100%} .w20p{width:20%;} /*边距*/ .m5{margin:5px;} .p5{padding:5px;} .box{height:100%;text-align:center;} /* 页面背景图,需要注意问题: 1,该图片看设计师做的图片大小,不然做手机的怎么可能会在PC上浏览清晰呢? 2,利用好background-size:100% 100%;就可以让整个背景图都正确的展示到页面上. */ body{background:url(‘../img/back.jpg‘) no-repeat;background-size:100% 100%;} /*如果底部出现留白,不能占满屏幕时的解决方法: 添加 html,body{height:100%} */ /* 页面背景图 */ /* 手机断点 */ /*min-device-width或max-device-width指的是设备整个渲染区宽度(设备的实际最大或最小宽度), 用了它可能在某些安卓机无法调用到下面的样式,因为某部分安卓机的屏幕大小不一致.*/ /*iphone4等屏幕高度480px的解决方案*/ @media only screen and (max-device-height:480px) { } /*iphone5以上的屏幕高度解决方案*/ @media only screen and (min-device-height:481px) { } @media only screen and (min-width:360px) and (max-width:374px){ /*三星大屏幕机最低宽度:note2-note3,S2-S4*/ } @media only screen and (min-width:375px) and (max-width:430px) { /*Iphone6 plus,红米等大屏幕手机*/ } /*手机横屏:orientation:landscape*/ @media only screen and (min-width:480px) and (max-width:569px) and (orientation:landscape) { /*小米1,1s,iphone4,4s,5,5s等屏幕横屏宽度断点*/ } @media only screen and (min-width:570px) and (max-width:640px) and (orientation:landscape){ /*三星,红米等手机屏幕横屏宽度断点*/ } @media only screen and (min-width:641px) and (max-width:667px) and (orientation:landscape) { /*Iphone6横屏宽度断点*/ } @media only screen and (min-width:736px) and (max-width:767px) and (orientation:landscape){ /*Iphone6 plus横屏宽度断点*/ } @media all and (orientation:landscape) { /*这里是指所有屏幕横屏时*/ } /*平板和电脑:最小宽度768px*/ @media only screen and (min-width:768px) and (max-width: 959px) { } @media only screen and (min-width:960px) and (max-width:1024px) { } @media only screen and (min-width:1025px)and (max-width:1536px) { }
上面有足够的注释说明,做移动端页面就是这么烦,要考虑不同屏幕的布局,字体大小等情况.
现在该轮到最痛苦的一个知识点:JavaScript
1,先讲解使用次数最多的点击事件开始吧:
一般来说,我们新手写点击事件会类似于下面这样的情况:获取ID值,添加点击事件函数.
var show=document.getElementById("show"); show.onclick=function(){ show.className="hide"; }; var mask=document.getElementById("mask"); mask.onclick=function(){ var show=document.getElementById("show").className="show"; }; var back=document.getElementById("back"); back.onclick=function(){ var show=document.getElementById("show").className="hide"; };
教大家一个简单易懂的封装:
//这个是最基本的封装,简单易懂,有兴趣写出更高效的,我们可以联系沟通 function $(obj){return document.getElementById(obj)};//返回dom对象 //上面为封装,下面为调用 //$是函数名. show.onclick=function(){ show.className="hide"; }; mask.onclick=function(){ var show=document.getElementById("show").className="show"; }; back.onclick=function(){ var show=document.getElementById("show").className="hide"; };
如果不是用id而是打算用标签名,类名等,记住要添加[]这个来做标记索引.
document.getElementsByClassName()[索引:0开始]
document.getElementsByName()[索引:0开始]
document.getElementsByTagName()[索引:0开始]
下面是DOM简单基础:
.chat{ color:#00cc66; font-size:28px; background:#999999; }
改变元素样式3种方法:
<p id="con">Hello World!</p> <p id="p2">Hello Wind!</p> <p id="p3">welcome!</p>
document.getElementById("p2").className="chat"
改变样式在DOM里面最好的方法还是写className,会比你写style好!
单击改变事件:
<h1 onclick="change(this)">OK</h1>
function change(id) { id.innerHTML="Hello"; id.className="chat" }
toogle:点击改变,再点击返回.
<input type="button" value="显示" /> <div style="height:100px;background:#FF69B4;"></div>
有2种方式来实现toogle()这个方法:
var toggle = false;//记得在input上添加 onclick="toggles()",div上添加id="toggle" function toggles() { if (toggle == false) { document.getElementById("toggle").style.display = "none"; toggle = true; } else { document.getElementById("toggle").style.display = "block"; toggle = false; } }
第二种:
var onInput = document.getElementsByTagName("input")[0]; var oDiv = document.getElementsByTagName("div")[0]; onInput.onclick = function() { var style = oDiv.style; style.display = style.display == "none" ? "block" : "none"; onInput.className = style.display == "none" ? "open" : "" }
创建和追加节点元素:
.anthor{color:#26C6D9}
这个是专门处理DOM比较好的一个优化方案:
//在文档之外创建并更新一个文档片断,然后将它附加在原始列表上 //文档片断是一个轻量级的document对象,它被设计专用于更新、移动节点之类的任务 //使用容器存放临时变更,最后再一次性更新DOM var fragment = document.createDocumentFragment(); for (var i = 0; i < 10; i++) { var p = document.createElement("p"); var oTxt = document.createTextNode("段落" + i); p.appendChild(oTxt); fragment.appendChild(p); } var anthor = document.getElementById("anthor"); anthor.appendChild(fragment);
<div id="anthor">6789</div>
有时间我会找30个不一样的页面来给大家当作练习,这些页面主要是包括列表页面,纯数据页面,表单.
以基于angularjs框架和JS模板引擎来开发.