PHP基础KooTeam

/*var_dump($a)查看数据类型+变量/*echogettype($a)查看数据类型+/*array(1,2,3)数组/*object对象class/*resource资源类型define("NAME","张三");常量echoNAME;defined("NAME")检查常量返回bool$age=30;变量isset();检查变量返回bool

echo_FILE_;获取路径echo_LINE_;获取行数echoPHP_VERSION;php版本echoPHP_OS;

$a=100;十进制$a=-100;$=0100;八进制$=0xff;十六进制

标量:整型0false浮点型0.0false布尔型false字符串"""0"false

复合型:"对象和数组array[]false

特殊类型:资源true和nullfalse

1.强制转换形成新的类型$a="100abc";$b=(int)$a;var_dump($b);2.强制转换在原来改变$a="100abc";setType($a,"integer");var_dump($a);3.强制转换形成新的类型$a="100abc";$b=intval($a);var_dump($b);

强制转换整型:(int)(integer)(bool)(boolean)(float)(double)(real)(string)数组(array)对象(object)读法Oj

$_POST在数组里显示$_GET显示$_REQUEST;不管getpost都接受读绿快print_r($_POST)全局数组

$_FILES上传数据$_COOKIE$_SESSION

$_SERVER$_ENA

REMOTE_ADDR获取ipDOCUMENT_ROOT获取管理路径SCRIPT_FILENAME文件路径

运算符算数运算符+-*/%++--比较运算符=====!=<>!==<><=>=:逻辑运算符&&||!andorxor位运算符&|^~<<>>>>>赋值运算符=+=-=*=/=%=其他运算符..=

科学计数法1.2e+41.2剩余10的4次反

$b=(int)$a;不改变原来的数据,形成新的数据setType($a,"integer");把原来的数据改变$b=intval($a);不改变原来的数据,形成新的数据

字符串转换整型只会转换字母前的数,否则转换0e字母转科学计数法

$a=10;$b=$a++;//$b=10$a=11;$c=$b--;//$c=10$b=9&d=--$c;//&d=9&c=9$e=++$d;//$e=10$d=10//10+8$f=$e-----$e;//$e=8$f=2$g=$f+++++$f;//$f=4$g=6//2+4

"100abc"==100true先转换整型再比较"100abc"===100false===比较全等<>不等同!=$a=false;$a$b=100:$b=1000如果a为真执行俩边数据否则执行后面的echo$b;

&&俩个位trueand||其中一个为true就是trueor!起反xorandorxor一般在连接数据库那样情况用

位运算32位&按二进制俩个为1时是1否则是0|其中一个为1时就是1^不同为1,相同为0~一元运算符取反11111111111111111111111111110000<<二进制向左移动n个右边就补上n个0前面是0补0是1补1某平台不同>>二进制右边移动n个左边就补上n个0前面是0补0是1补1某平台不同>>>全部补0

逻辑&&||和位运算&|一样用但是短路&&一个false就不再计&前面false一样计后面

$a+=1等于$a=$a+1

.连接字符串来使用不可以垃圾整型等可以连接变量.=和+=类似

遇到优先级用无限括号字符串是整数%一般数在0-10分支结构if...elseswitch(变量)...case参数:..break;..defaulttry...catchif()...elseif()...else还有嵌入式if

单个值使用switch方便breakb绿跳出循环同时匹配多个值break12退出多循环default默认与else相同continue本次循环停止,后面的继续在while会死循环continue12退出多循环case1:case2:echo"111";同if(n==1||n==2)

循环结构while(){}do{}...while(){}for(;;){}

}echo$a;数变888传地址

echo"function_exists(fun)";检测函数存在存在true否则falsestatic静态共享第一次初始化

变量区分大小学函数其他不区分

实参可以比形参多

比形可以实参多但是会警告可以忽略在调用加@@fun()

functionfun($a){$args=func_get_args();//接收任意参数为数组echocount($args);//输出参数的个数echo$args[4];//输出参数的第几个0-开始}fun(0,1,2,3,4)

functionfun($a){$sum=0;$args=func_get_args();for($i=0;$i1){$r=$a*fun($a-1);}else{$r=$a;}return$r;}fun(3);//3x2x1

";

functionfun($a){$sum=0;$i=0;if($i<=$a){$sum=$a+fun($a-1);}return$sum;}echofun(100);>

内部函数不可以直接调用内部函数但是可以在函数调用不同的外函数

重用函数

避免函数名相同include_once("demo.php");计文件名拷贝require_once("demo.php");完全拷贝到

字符串定义双引号""单引号''反引号``定界符双引号""1.可以在里面执行标量.标量.${num}2.可以使用转义字符"thisisa\"string"\test"3.可以用''单引号单引号''1.不能在单引号执行变量2.只能使用部分转义字符\'\\反引号``1.在反引号使用的是服务器的命令

定界符<<<1.可以在里面执行标量2.可以使用转义字符3.可以使用任何多的双引号""$str=<<<

1·函数的功能介绍2·需要几个参数,一每个参数的类型,那些参数是必需的,那些参数是可选的。3.函数返回值,返回值的类型

输出函数echo()print()有返回值10布尔型die()输出并退出程序printf()sprintf()可以保存才输出变量print_r()输出数组var_dump()输出类型

echo"sss","sss"$num=100.001;printf("%s---%d"---%b---%x--%o--%c---%X---%f---%.2f,$num,$num)按格式输出字符串整型二进制十六进制八进制安编码大写浮点型保留小数printf("%'#20s",$num)一共20位补

ltrim()做掉字符串左空格rtrmin()做掉字符串右空格trim()去掉字符左右右空格strrev()将字符串反转新成新的变量新的要赋值变量strtolower()小写strtoupper()大写strlen($str)查看长度ucfirst()将第一个字符改大写ucwords()将字符串中的每个单词改为大写explode(stringseparator,stringstring,[,intlimit])使用一个字符串分割别一个字符串implode()用一组较小的字符串创建一个大字符串join另一个名substr(stringstring,intstart[,intlength])取得部分字符串strstr(string,string)别名strchr()返回字符串中某字符串开始处至结束的字符串strpos(string,char,[intoffset])寻找字符中某字符最先出现的位置从0开始strrpos()寻找字符中某字符最后出现的位置strrchr()返回最后出现的字符到结束的字符串str_pad(stringstr,intlength,stringadd,)字符串的填补函数STR_PAD_LEFT左STR_PAD_RIGHT右STR_PAD_BOTH俩边

$ex=explode("",$str,2)2分多print_r($ex);

$arr=array("hello","ss")implode(",",$arr)

><==按字节进行字符串比较strcmp();<1>-1=0strcasecmp();<1>-1=0按照自然排序法进行字符串比较strnatcmp()按照字符串的模糊比较soundex()读音相不同similar_text(string,string,[$similar%])相同的数目

if(soundex($st)==soundex($stt)){echo"==";}else{echo"!=";}echosimilar_text($st,$stt,$similar);echo$similar."%";

str_replace(string,string,string)替换可以是arraysstr_replace(array,string,string)str_replace(array,array,string)str_replace(要替换的,替换成,那个字符串)

stripslashes();去掉引号addslashes()

请输入:htmlentities()处理标签
htmlspecialchars()<center>

strip_tags()删除标签strip_tags("string","")过滤

处理URL对URL字符串的解析parse_str()parse_url();

URL编码处理函数rawurlencode()要编码的字符串rawurldecode()要解码的字符串urlencode()要编码的字符串urldecode()要解码的字符串

'bar','baz'=>'boom','cow'=>'milk','php'=>'hypertextprocessor');

数组是一个可以存储一组或一系列数值的变量.1.可以存储任何类型的数据(多数类型);2.长度可以变长

下标:可以视为资料内容在些数组中的识别名称

$数组变量名[索引值]=资料内容$arr[0]=12arr["name"]="zhangsan";$arr[]=10;$arr[]=100;

$arr[0][0]二维数组索引第一的数组中的第一个$arr=array(array(array(),array()),array(array(),array()))三维数组

$数组变量名=array(资料内容,资料内容...)$arr=array(1,"abc",2);$arr=array("one"=>1,100=>"abc",2);

$arr[0]=100;$arr[1]=110;以上个数组索引值是几就继续$arr=null;for($i=0;i<100;i++){$arr=0;}

$person["name"]="Koo"

$arr=array(1,2,“one”,3.333,true);$arr=array("age"=>1,2,“one”,3.333,true);"age"=>1指定下标$arr[name]="Koo"

数组遍历$arr=array(1,2,3,4,5,6);//只能索引数组自定义索引麻烦输出for($i=0;$i";}

foreach(as)循环结构$value){echo"\$arr[".$key."]=".$value."
";}>$value){foreach($valueas$k=>$v){echo"\$arr[".$key."][".$k."]=".$v." ";}echo"
";}>while()list()each()";//0和key是下标echo"值".$a[1]."---".$a["value"]."
";//1和value是值echo"\$arr[".$a["key"]."]"."=".$a["value"]." ";}>

array_sum()数组相加array_merge(数组,数组)合并数组array_merge_recursive()array_diff()相差什么返回什么array_diff_assoc()vlue相同但key不同一样输出array_intersect()相同的返回array_intersect_assoc()value和key相同才输出

PHP面向对象oop什么是类电脑配置单,桌子图纸,椅子图纸,人类什么是对象电脑教室(20台电脑,20桌子,20个椅子,一个投影,6灯,一个白板,一台IBM,手机,20个学员);类和对象之间的关系什么是成员属性什么是成员方法类里面{成员属性前面有个修饰var成员方法}

class人类{成员属性:姓名,性别,年龄,身高,体重;成员方法:可以说话,工作,学习,吃饭,使用电脑]

命名文件要和类名有关person.phpperson_class.php

phone->reviceMessage($Message);}functionreviceMessage($Message){echo"接信息是$Message
";}}$p1=newPerson();$p2=newPerson();>

实例化对象$对象名称=new类名称()

初始化静态段在内存占一个被数据共同用于的栈内存空间小访问速度快长度不变的数据类型int....堆内存空间大访问速度慢大的类型空间不定长的类型string对象代码段语言的结构函数信息$p1->name="John";$p2->name="Koo";$p1->run();在一个类中可以把另一个类当属性$phone1=newPhone();$phone1->xinghao="sm-9100";$phone2=newPhone();$phone2->xinghao="sm-7100";$p1->phone=$phone1;

$p1->phone->sendMessage($p2,"hello");

整合phone->reviceMessage($Message);}functionreviceMessage($Message){echo"
接信息是$Message
";}}$p1=newPerson();$p2=newPerson();$p1->name="John";$p2->name="Koo";$p1->run();$phone1=newPhone();$phone2=newPhone();$phone1->xinghao="sm-9100";$phone2->xinghao="sm-7100";$p1->phone=$phone1;$p2->phone=$phone2;$p1->phone->sendMessage($p2,"hello");>

$对象名称->成员属性;$对象名称->成员方法;特殊的引用$this使用functionrun(){echo"MyName:".$this->name;echo"
我在说话";}

//构造方法functionPerson(){//创建对象自动调用最先}构造方法特点:名称是和类名相同,对象一产生的时候,就自动调用的方法去初始化成员属性functionPerson($name,$age,$sex){//php4的$this->name=$name;$this->age=$age;$this->sex=$sex;}$p1=newPerson("John",20,"男");在创建对象的时候就赋值//PHP5的构造方法function__construct(){}

先找PHP5的构造方法,找到就执行php5的,就不在执行php4的了找不到,在执行php4的

function__destruct(){//析构方法结束前调用最后创建的对象先开始echo$this->name."bye
";}

加@可以屏蔽警告

封装性就是将对象内部的属性或方法封装在自己对象的内部,在对象内部可以被使用和访问,但在对象的外部或是在其他对象里不能使用的封装的成员private$age;p来vartiprivatefunctioneat(){echo"
吃饭";}

__set()__get()__isset()__unset()在某一时刻自动调用的方法privatefunction__get($proName){return$this->$proName;}echo"
".$p1->name."
";

publicfunction__set($proName,$value){if($proName=="age"){if($value<0||$value>150)return;}$this->$proName=$value;}$p1->age=33;

isset(变量)判断变量是否存在存在返回1不在返回空privatefunction__isset($proName){//访问对象中的私有属性returnisset($this->$proName);}if(isset($p1->age)){echo"属性存在
";}else{echo"属性不存在
";}

unset(变量)清除变量function__unset($proName){unset($this->$proName);}unset($p1->age);

类的继承继承就是对原有的扩展单继承classStudentextendsPerson{var$school;functionstudy(){}}私有的方法继承的不能使用私有属性也是但是重新创建了属性使用才正常使用

类方法的重载同类中方法名和参数个数相同不存在没有这个概念参数个数不同就有现在说重载是指子类的覆写function__construct($name,$age,$sex,$school){parent::__construct($name,$age,$sex);$this->school=$school;}functionrun(){parent::run();//调用继承父类的方法echo$this->school."
";}

访问类型privateprotectedpublicprotected在本类和子类可以访问子类不能低于父类的访问权限方法

finalstaticconstdefine()常量

final:只能用来定义类和方法作用:使用final定义的类不能被继承使用final定义的方法不能覆盖重载

静态的方法Person::run();

__toString()__clone()__call()__autoload()

__toString打印对象信息classPerson{*function__toString(){$str="";$str=$this->name.$this->age.$this->sex;return$str;}}$p1=newPerson("John",22,"man");echo$p1."
";

__clone对象克隆$p2=$p1;//是把对象赋值与p2共同管理一个对象$p2=clone$p1;//克隆一个新的对象function__clone(){$this->name="JohnBak".$that->name;//this指clone副本的that指原本}$p2=clone$p1;//克隆一个新的对象__call()调用不存在的函数时调用function__call($funName,$argus){//需要俩个参数一个传入函数名一个传入的参数是数组形式echo$funName."函数";print_r($argus);echo"参数,不存在
";}$p1->fun("数组");//调用不存在函数__autoload()自动加载类php写在外部的function__autoload($className){//需要一个参数include_once($className."_class.php");}

对象的串行化函数serialize()unserialize()俩个过程:串行化,就是把对象转为二进制的字符串,serialize()反串行化,把二进制字符串转化为对象unserialize()

第一种:对象在网络中传输的时候第二种:将对象写入文件或者写数据库时$p1=newPerson("John",22,"man");echo$p1."
";$str=serialize($p1);$file=fopen("tmp.txt","w");fwrite($file,$str);fclose($file);run();>定义在对象类中系列化休眠function__sleep(){//serialize部分$arr=array("name","sex");return$arr;}定义在对象类中系列化唤醒function__wakeup(){//唤醒并且修改$this->name="wakeup";$this->age="999";}

接口:相当于一个规范不可以实例化对象要被子类继承并且覆写全部方法不全部就是抽象类可以用abstract修饰才能实现接口子类可以有多个接口实现接口时使用implements==extends可以使用抽象类去实现接口的部分方法;interface接口extends接口{}class子类implements父类,父类2{}class子类extends父类implements父类,父类2{}interfaceDemo{所有的成员属性必须是常量;所以的方法都是抽象的不用abstract修饰所有的成员都是必须是public}

多态的应用弱类型类直接对象调用不好像java子类父类类型转换interfacePCI{functionstart();functionstop();}classNetCardimplementsPCI{functionstart(){echc"start";}functionstop(echc"stop";);}classViewCardimplementsPCI{functionstart(){echc"start";}functionstop(echc"stop";);}classmainBoard{functionusePCI($pci){$pci->start();$pci->stop();}}classPerson{functioninstall(){$nc=newNetCard();$vc=newViewCard();$pci=$nc;$pci=$vc;$pci->start();$pci->stop();}}$p=newPerson();$p->install();

preg_replace()替换preg_replace("/\d/","MM",$str,1)默认全部-11preg_replace("/\d/e","md5(MM)",$str)e当表达式

str="currentdateandtimeis".date("Y-m-dh:ia").",wearelearningphp";echopreg_replace("/(\d{4}-\d{2}-\d{2})(\d{2}:\d{2})([ap]m)/","\\1\\2\\3",$str);

preg_split()分割是个数组arr=preg_split("/[:,\s]/",$str);

.任意字符一个.+或者.*0个多个可以没有.*

文件打开模式参数r只读打开文件必须存在指针开头r+读写打开文件必须存在指针开头w写文件打开将文件清空不存创建指针开头w+读写打开文件将文件清空不存创建指针开头a写打开追加不存创建指针结尾a+读写打开追加不存创建指针结尾

x读打开存在false不存在创建文件指针开头只能本地x+读写打开存在false不存在创建文件指针开头只能本地

b只能win创建二进制文件t只能win\n转换\r\n跨平台文件

$file=fopen成功返回文件相当true不返回boolfalse

if(!$file){echo'error';exit();}直接ordie('openerror');

fwrite写入文件for[]fwrite($file,'内容','int只写多少个');

fclose($file)ordie('closeerror')关闭关闭成功truefalse

PHР文件系统(文件操作)1·写入文件2.写入数据库php对文件系统的操作是基于Unix系统,或者linux文件一般处理函数fopen();

少打$循环死机$i++只一个递增死循环

9.2文件系统处理

fwrite别名fputs()fread($file,filesize($filename));读取全部fgets($file,intLength)返回文件一行长度读取一行循环读取指针往下fgetc($file)读取一个字符指针往下返回内容结尾返回falsefilesize($filename)获得文件大小feof($file)feof判断是否到文件末尾{";}fclose($file)ordie('closeError');>}

{';}fclose($file)ordie('closeError');>}

file($filename);返回一个数组每一行一个元素不用打开关闭文件";}>

readfile();直接输出到浏览器里面读入一个文件并写入到输出缓冲里面不方便控制直接dom不用打开关闭看内容还可以

file_exists($filename)判断文件存在返回bool

{";$num+=1;$second=fopen($filename,'w');fwrite($second,$num);fclose($second);}

counts($filename);>}

9.3文件系统处理

php不能自己现在用的路径过.+<\/title>/",$data,$arr);echo$arr[0][0];foreach($arr[0])as$h3){echo$h3.'
';}fclose($file);>

file_get_contents($filename)可以本地网络不用打开关闭都封装好了file_put_contents($filename,'内容');写入内容不用打开关闭都封装好了返回内容长度清空替换

防止多个人同时操作文件flock();锁成功truefalse枷锁$file=fopen('test.txt','r');flock($file,[conts]);LOCK_SH:共享锁定,读文件的时候使用LOCK_EX:独占锁定,写入文件的时候使用LOCK_UN:释放锁定LOCK_NB:附加锁定

读完lock_un释放文件第三个才可以读取

die('推出并且输出')

{}

俩人操作写文件大家都锁定多重锁定error防止多锁定加附加锁等一个人释放了才可以LOCK_EX+LOCK_NB{}

9.4文件系统处理文件指针ftell()返回文件指针位置fseek()设置指针位置返回boolfseek(文件指针,移动的字节数,起始位置)fseek($file,30,SEEK_CUR)读30字符(相当跳过30字符)当前ftell查看还可以是-5反读起始位置SEEK_CUR当前位置SEEK_SET开头SEEK_END结尾rewind()移动指针到文件开头组合fread(file,设置指针){";echoftell($file);//ftell获得文件指针位置//SEEK_CUR当前位置//SEEK_SET开头//SEEK_END结尾//fseek移动文件指针-1|多少字符位置fseek($file,20,SEEK_SET);//returnboolecho"
".ftell($file);//rewind指针文件开头rewind($file);echo"
".ftell($file);if(!flock($file,LOCK_UN)){die("无法释放文件锁");}fclose($file)ordie("文件关闭失败");//file()file_get_contents()readfile()//echofile_get_contents($filename);>}

都不要打开关闭文件copy("c:\\curentFilename","c:\\targetFilename")复制returnboolunlink("c:\\targetFilename")删除returnboolrename("demo.txt","hello.txt")重新命名returnbool

需要打开关闭$fp=fopen()返回文件的指针ftruncate($fp,int多少Char)截取文件内容returnbool源文件改变只能保留截取文件内容

{}

file_exists()文件存在filesize()文件大小filetype()文件类型

is_dir()是否目录

is_file()是否是文件is_link()是否是链接文件is_executable()是否可执行文件is_readable()是否可读写文件is_writable()是否可以写文件{';if(is_file($filename))echo"是文件"."
";if(is_link($filename))echo"是链接文件"."
";if(is_executable($filename))echo"可执行文件"."
";if(is_readable($filename))echo"可读文件"."
";if(is_writable($filename))echo"可写文件"."
";echo"filesize:".filesize($filename)."
";echo"filetype:".filetype($filename)."
";

echo"fileCreateTime:".date("Y年m月j日",filectime($filename))."
";echo"fileXiuGaiTime:".date("Y年m月j日",filemtime($filename))."
";echo"fileFanWenTime:".date("Y年m月j日",fileatime($filename))."
";}else{echo"文件不存在";}>}

在win修改不太明显linux下还是改文件权限改grouprwxchmod($filename,0644)returnbool权限chown($filename,501)returnbool所有者chgrp($filename,503)returnbool所有组fileowner($filename)文件所有者0管理员返回idfilegroup($filename)文件所有组0管理员返回id

继续再重来{//chmod($filename,0777);//权限修改//chown($filename,501);//所有者修改//chgrp($filename,503);//所有组修改echofileowner($filename)."
";//return所有者uidechofilegroup($filename)."
";//return所以组id}9.6文件处理之目录操作9.7文件处理之目录操作目录操作遍历目录循环遍历函数遍历打开文件fopen()fread()fclose()打开目录opendir(目标路径);returnboolfase+e_wangine警告信息@opendir()@屏蔽警告readdir(目录引用句柄)文件目录都读取但不目录下面的目录和文件returnbool指针目录里面目录下个读取一个目录文件循环读取指针向下没有返回false到底特殊俩个目录.当前..上级目录不输出或先读取跳过if判断...rewinddir()指针目录开始closedir()

在读一次目录指针下面二次不执行rewinddir目录指针开头

{";readdir($dirHandle)."
";while(($file=readdir($dirHandle))!==false){//if(is_dir($file)){if(is_dir("data".DIRECTORY_SEPARATOR.$file)){echo"目录:".$file."
";}else{echo"文件:".$file."文件大小:".filesize("data".DIRECTORY_SEPARATOR.$file)."
";}}rewinddir($dirHandle);echo"
二次读取
";while(($file=readdir($dirHandle))!==false){if($file!='.'&&$file!='..'){if(is_dir("data".DIRECTORY_SEPARATOR.$file)){echo"目录:".$file."
";}else{echo"文件:".$file."文件大小:".filesize("data".DIRECTORY_SEPARATOR.$file)."
";}}}

closedir($dirHandle);>}

$d=dir(目标目录str)返回目录对象oop模式对象下面的方法路径$d->path引用句柄$d->handle读取内容$d->read()同readdirreturn文件失败false读取一个文件目录指针向下循环读取关闭$d->close();{path."
";echo"句柄指针".$d->handle."
";//$->read();.//$->read();..while(($file=$d->read())!==false){//readdir()if($file!='.'&&$file!='..'){echo"文件目录:".$file."
";}}$d->close();//closedir()>}

优化如果文件存在提示覆盖或者跳过echobreak

C:\Users\Administrator\Desktop\video_1010.1文件上传

文件上传文件下载1.表单提交2.对文件的操作

表单必须要改的:

1.method="post"2.enctype="multipart/form-data"form服务器才自动是上传常规文件带文件大小$_post...看不到数据提交数据不是设置enctype并没上传只是路径str刷新$_files[][]看提交文件数据全局postgetrequest都看到支持多个上传input:hiddenname="max_file_size"value=10000控制上传文件大小1k字节安全可以篡改表面限制下服务器限制php.ini不加是路径地址

$_files会显示上传位置C:\Users\Administrator\AppData\Local\Temp\php6584.tmp缓存系统自动clean

php.inifile_upload=on是否应许文件上传upload_max_filesize=2M服务器限制上传大小post_max_size=8Mpost数据大小

$_getpostrequestfiles

html{上传文件User:
Passwd:


}server{";//getpostecho$_REQUEST['pwd'];//getpost//var_dump($_REQUEST);//全部字符串fileset属性不显示print_r($_FILES);//formenctype="multipart/form-data"input:file显示详细>}10.2文件上传

$_FILES标准的MIME类型texttext/html.html.htm...text/plain.txt.logimageimage/gif.gifimage/jpeg.jpeg.jpgimage/png.pngaudioaudio/x-midimid.mid.midiaudio/w-wav.wavvideovideo/quicktime.qt.movvideo/mpeg.mpegapplicationapplication/pdf.pdfapplication/msword.doc.dotapplication/vnd.ms-excel.xlsapplication/vnd.ms-powerpoint.pptapplication/zip.zipapplication/rar.rarapplication/xml.xml.xslapplication/mshelp.hlp.chmapplication/octet-stream.ext.bin.com.dll.classmultipartmessage

控制上传类型

注意可执行文件权限安全临时文件不能执行rwxrw-安全目录都是随机字符串临时目录cpoy到自己指定目录也行了专门函数move_uploaded_file()移动上传文件returnboolmove_uploaded_file(目标路径,现在路径可同时改名)move_uploaded_file(.$_FILES['upfile']['tmp_name'],'upload/'.time().$_FILES['upfile']['name'])改名随机安全成功显示大小sizeb/512*1024byte/512*1024tokbecho"size:".($_FILES['upfile']['size']/512*1024)."kb
";

$_files[myfile][error]>0才执行移动switch1.上传的文件超过了php.iniupload_max_fileszie2.上传的文件超过了html表单中max_file_size3.文件部分上传不完整4.没有文件上传论坛discuz->

判断上传文件在不在临时目录下is_uploaded_file($_FILES['upfile']['tmp_name'])returnbool在才执行移动

版本老是4成功也是..暂时注销4看错了有俩个file一个file0一个不用是4[[]]

10.3上传多个文件和文件下载处理

$_files['myfile']['name'][0]$_files['myfile']['name'][1]$_files['myfile']['name'][2]

$_files['myfile']['size'][2]

$_files[myfile][error]!=upload_err_ok常量$_files[myfile][error]!=0

标签加个[]变三维数组

俩个文件改浏览器缓存问题

成功过

出现多个不是是因为只上一个其他空才显示这

下载输入地址根直接下载了图片部分html不行了服务器设置才可以浏览器打开

文件下载文件下载的类型使用MIME类型表示下载文件的描述如给出文件名称等下载文件的长度以字节为位header()告诉浏览器header是什么header()只能在php文件开头不能输出echo空格等这空格也不行

header("Content-type:text/html");//文件格式header("Content-type:image/pngjpeg");header('Content-Disposition:attachment:filename="download.html"');//文件描述\download.jpg\同时改下载时显示的名字否则原来名字header("Content-Length:".filesize($filename));//responsebrowser文件长度用读打开文件fopenhtml用whilefeof($p)是否指针到底fread()fclosereadfile($filename)直接显示dom图片用告诉浏览器是什么类型不是浏览是下载路径有index会autoindex无权访问此服务器上的/es6/data/。工具设置权限设置不行简单不直接下载

{}

C:\Users\Administrator\Desktop\arrayarray_filter

函数array_filter()作用:调用回调函数过滤数组中的元素原型:array_filter(arrayinput[,callbackcallback]);第一个参数:input第二个参数:callback匿名函数函数函数()测试下就知行不简单小时过返回值array新数组原不变0)returntrue;elsereturnfalse;});print_r($newarr);>

array_intersect函数array_intersect()数组中都有的数作用:计算数组的交集原型:array_intersect(arrayarray1,arrayarray2,[,array...])第一个参数:array1第二个参数:arrayn返回值array新数组原不变

俩个数组都有的显示多个比较array_merge

函数array_merge()作用:把一个或多个数组合并为一个数组原型:array_merge(arrayarray1[,arrayarray2,array...])第一个参数:array1第二个参数:arrayn返回值array新数组原不变

索引数组一个一个排新数组从0关联数组...相同key最后数组覆盖'window','php','linux'];$arr1=['a'=>'unix','php','linux'];$newarr=array_merge($arr,$arr1);print_r($newarr);>

array_pop函数array_pop()弹出array_push添加入栈作用:删除数组中的最后一个元素,即将数组最后一个单元弹出(出栈)原型:mixedarray_pop(array&array)第一个参数:array必须是数组变量(引用传递)返回值mixed删除内容原变

array_push函数array_push()作用:向数组的结尾压入数据(进栈)原型:intarray_push(array&array,mixedvar[,mixed...])第一个参数:array必须是数组变量(引用传递)第二个参数:var..添加内容多个...返回值intnewarrayLen原arr变

array('arr','bb')类创建数组字面量快添加$arr[]=100;'window','php','linux'];$arr=array("hello",'world');echoarray_push($arr,'koo');$arr[]='john';print_r($arr);>

array_rand函数array_rand()作用:从数组中随机选出一个或多个元素原型:mixedarray_rand(arrayinput[,intnum_req])第一个参数:input第二个参数:num_req返回值array新数组mixed在数组中取得n个1个直接字符串返回的是原数组的下标2个以上数组返回的是原数组的下标array_rand($arr,2)'hello','b'=>'world','c'=>'koo'];echoarray_rand($arr,1)."
";//返回的是原数组的下标$key=array_rand($arr,2);//2->返回key组成的数组print_r($key);echo"
".$arr[$key[0]];>

array_shift函数array_shift()shift开头删除unshift开头添加push结尾添加pop结尾删除en分池其他语言pull|版本作用:删除数组中第一个元素原型:mixedarray_shift(array&array)第一个参数:array必须是数组变量(引用传递)返回值mixed删除内容原数组改变'hello','b'=>'world','c'=>'koo'];echoarray_shift($arr);print_r($arr);>

array_sum函数array_sum()作用:返回数组中所有值的总和原型:numberarray_sum(arrayarray)第一个参数:array返回值number

in_array

函数in_array()作用:检查数组中是否存在某个值原型:boolin_array(mixedneedle,arrayhaystack[,boolstrict])第一个参数:needle"str"第二个参数:haystack目标数组第三个参数:strict严格按类型匹配返回值boolean

字符串区分大写regxphpone

range函数range()作用:创建并返回一个包含指定范围的元素的数组原型:arrayrange(mixedfirst,mixedsecond[,numberstep])第一个参数:first第二个参数:second第二个参数:step返回值newarr

多用于初始化数组range(1,50,10)1-50每次跳10数组

shuffle函数shuffle()作用:把数组中元素按随机顺序重新排列原型:boolshuffle(arrayinput)第一个参数:input返回值bool原数组改变下标随机改变php5视频函数库

unique函数array_unique()作用:删除数组中重复的值,并返回没有重复的新数组原型:arrayarray_unique(arrayarray)第一个参数:array返回值array新数组原不变key不同value相同去掉'php','b'=>'mysql','c'=>'php'];var_dump(array_unique($newarr));>

C:\Users\Administrator\Desktop\datetimedate

C:\Users\Administrator\Desktop\filebasename函数basename()作用:返回路径中的文件名部分原型:stringbasename(stringpath[,stringsuffix])第一个参数:path第二个参数:suffix.php返回就去后缀返回值string文件名分隔符.../\directory_separator

dirname函数dirname()目录部分basename()文件部分作用:返回路径中的目录部分原型:stringdirname(stringpath)第一个参数:path返回值string

file函数file()file_get_contents()作用:把整个文件读入一个数组中原型:arrayfile(stringfilename,[intuse_include_path,resourcecontext])第一个参数:filename返回值array

一行一个建值不用打开关闭

file_get_contents函数file_get_contents作用:将整个文件读入一个字符串原型:stringfile_get_contents(stringfilename,[booluse_include_path,resourcecontext,intoffset,intmaxlength])第一个参数:filename返回值string

filetype函数filetype()作用:取得文件类型原型:stringfiletype(stringfilename)filedirunknownblockchardirfifofilelinkunknown第一个参数:filename返回值style

fopen支持远程文件函数fopen()作用:打开文件或者URL原型:resourcefopen(stringfilename,stringmode[,booluse_include_path,resourcezcontext])第一个参数:filename第二个参数:moderr+读写打开ww+清空创建xx+不存在创建aa+最加b二进制t跨平台\n\r返回值resource

$_server['document_root']服务器跟地址

都帮助文档看

项目合作不一个人分公

pathinfo函数pathinfo()dirnamebasename作用:返回文件路径的信息原型:arraypathinfo(stringpath,[intoptions])dirnamebasenameextension扩展名第一个参数:path第二个参数:options返回值array";//dirname()echo"文件部分:".$pathinfos['basename']."
";//basename()echo"扩展名:".$pathinfos['extension']."
";>

readfile函数readfile()file()gets()作用:输出一个文件原型:intreadfile(stringfilename,[booluse_include_path,resourcecontext])第一个参数:filename返回值intmysqli函数mysqli_connect()mysqli()作用:创建mysqli对象,连接MySQl数据库原型:mysqlimysqli_connect([stringhost,stringusername,stringpasswd,stringdbname,intport,stringsocket])classmysqli{__construct([stringhost,stringusername,stringpasswd,stringdbname,intport,stringsocket]){}}返回值mysqli对象

$mysqli=newmysqli();$mysqli->connect()$mysqli->select_db()调用对象下的方法

$mysqli=newmysqli(1270.0.01...)构造方法init

$mysqlivar_dump查对象connect();//$mysqli->select_db();$mysqli=newmysqli('localhost','root','root','demo',3306);var_dump($mysqli);>

mysqli_connect_errno

函数mysqli_connect_errno()是否错误mysqli_connect_error()错误信息作用:测试在建立连接的过程中是否发生错误原型:boolmysqli_connect_errno(void)返回值booleanconnect();//$mysqli->select_db();$mysqli=newmysqli('localhost','root','rooot','demo',3306);var_dump($mysqli);//对象内容connect_errnoerrorif(mysqli_connect_errno()){//是否连接失败echo'连接失败msg:'.mysqli_connect_error();exit();}>

mysqli_fetch_accoc函数mysqli_fetch_assoc()mysqli_fetch_row()作用:从结果集中获取一条记录原型:mixedmysqli_fetch_assoc(mysqli_resultresult)classmysqli_result{mixedfetch_assoc(void)}返回值mixed

{connect();//$mysqli->select_db();$mysqli=newmysqli('localhost','root','root','demo',3306);var_dump($mysqli);//对象内容connect_errnoerrorif(mysqli_connect_errno()){//是否连接失败echo'连接失败msg:'.mysqli_connect_error();exit();}$result=$mysqli->query("select*fromdemo");//sqlvar_dump($result->fetch_row());//fetch_row内容一列内容while($row=$result->fetch_row()){print_r($row);echo"
";}>}

{connect();//$mysqli->select_db();$mysqli=newmysqli('localhost','root','root','demo',3306);var_dump($mysqli);//对象内容connect_errnoerrorif(mysqli_connect_errno()){//是否连接失败echo'连接失败msg:'.mysqli_connect_error();exit();}$result=$mysqli->query("select*fromdemo");//sqlwhile($row=$result->fetch_assoc()){print_r($row);echo"
";}>}

$res=$mysqli->query(sql语句)$res->fetch_rowfetch_assoc一行数据

mysqli_fetch_array函数mysqli_fetch_array()返回指定都关联索引数组mysqli_fetch_assoc()return关联mysqli_fetch_row()索引数组作用:从结果集中获取一条记录原型:mixedmysqli_fetch_array(mysql_resultresult,[intresulttype])Objectorientedstyle(method);classmysqli_result{mixedfetch_array([intresulttype])}大写常量mysqli_assoc关联数组返回用这直接用mysqli_fetch_assocmysqli_num索引数组mysqli_fetch_row()mysqli_both默认关联索引没必要俩个返回返回值mixedquery("select*fromdemo");//可以while全部$row=$result->fetch_array(MYSQLI_ASSOC);//一行数据默认关联索引都显myqli_bothmysqli_assoc关联索引mysqli_numprint_r($row);>

mysqli_fetch_object函数mysqli_fetch_object()mysqli_fetch_array()mysqli_fetch_assoc()mysqli_fetch_row()作用:从结果集中获取一条记录对象原型:mixedmysqli_fetch_object(mysqli_resultresult);Objectorientedstyle(method);classmysqli_result{mixedfetch_object(void)}返回值mixed

指针向下读取query('select*fromthink_data');$row=$result->fetch_object();//读取一行成obj访问->print_r($row);echo$row->id.'
';echo$row->title;>

mysqli_fetch_row函数mysqli_fetch_row()作用:从结果集中获取一条记录对象原型:mixedmysqli_fetch_row(mysqli_resultresult)Objectorientedstyle(method);classmysqli_result{mixedfetch_row(void)}返回值mixed

读取到最后返回nullfalse循环whilequery('selectid,titlefromthink_data');while($row=$result->fetch_row()){print_r($row);echo"
";}

>mysqli_query函数mysqli_query()作用:执行SQL命令原型:mixedmysqli_query(mysqlilink,stringquery,[intresultmode])Objectorientedstyle(method);classmysqli{mixedquery(stringquery,[intresultmode])}返回值mixed

插入sql返回bool插入sql更新返回boolinsertinfothink_data(id,title)values('3','name');updatethink_datasetname='x'whereid=1;

select查询返回mysqli对象select*fromdemo;{query('selectid,titlefromthink_data');//$result=$mysqli->query('insertintothink_data(id,title)values(10,"hello")');$result=$mysqli->query('updatethink_datasettitle="hh"whereid=10');print_r($result);>}

C:\Users\Administrator\Desktop\sessionsession_destroy函数session_destroy()作用:销毁和当前session有关的资料原型:boolsession_destroy(void)返回值boolean

不能这样全局变量都删除了unset($_SESSION['username']);

等空数组session_start();$_SESSION=array();//判断变量是否存在if(isset($_COOKIE[session_name()])){setCookie(session_name(),'',time()-60,'/');}session_destroy();

session_start函数session_start()作用:启动session原型:boolsession_start(void)开始不能有空格换行同header()返回值boolean

用户会话开始session_start();echosession_id();浏览器其他同页面一个id客户端返回的id

以后调用$_COOKIE['cookiename']

$username=skygaoexpiretime()+60*60*24*77天

ie删除cookieschrome控制台查看c://documentsandsettings/ibm/cookies内容里面

setCookie('username','koo',time()*60*60);delsetCookie('username','',time()-60);setCookie('username');{}

C:\Users\Administrator\Desktop\stringexplode函数explode()作用:字符串分割原型:arrayexplode(stringseparator,stringstring,[intlimit])第一个参数:必须第二个参数:必须第二个参数:可选分割多少部分-1最后2返回值array数组

list($var,$var2)=explode('+',$lamp);以前文件了转换为变量print_rvar_dump";echo$b."
";>

ke全部多time不轮少轮多轮各扩挑重少肯轮

htmlspecialchars函数htmlspecialchars()作用:将HTML标记中的特殊字符转换成HTML实体原型:stringhtmlspecialchars(stringstring,[intquote_style,stringcharset])第一个参数:必须<"<""$quot;>$gt;

';echo$str;echohtmlspecialchars($str,ENT_QUOTES,'utf-8');>

implode函数implode()join()别名作用:连接数组中的元素组合成为字符串原型:stringimplode(stringglue,arraypieces)第一个参数:必须第二个参数:必须返回值字符串分割explode联合implode()john()',$arr).'
';echojoin('=>',$arr);>

md5函数md5()作用:将一个字符串进行MD5算法加密原型:stringmd5(stringstr,[boolraw])第一个参数:str表示待处理的字符,是必须传递的参数第二个参数:raw是一布尔类型返回值str

数据库猜密码

文件加密md5_file();

md5implode-joinexplodehtmlspecialcharslist()md5_file

number_format函数number_format作用:123,456,890原型:stringnumber_format(floatnumber,[intdecimals,stringdec_point,stringthousands_sep])第一个参数:number一个数字必须数字第二个参数:decimals多少位小数第三个参数:dec_point整数.分割符中间.小数部分第四个参数:thousands_sep整数分割符返回值str

printf函数printf()直接输出到浏览器参数相同sprintf()返回字符串变量在echo..输出作用:格式化输出字符串原型:stringprintf(format,arg1,arg2...argn)%%百分百输出%b数字二进制%c字符%d数字十进制%e科学计数法%u无符号%f浮点数%F双浮点数%o八进制%s字符串%x16进制%X16进制返回值字符串12个Byte:%b
10jz:%d
float:%f
double:%F
8zj:%o
16zjx:%x
16zjd:%X
char:%c
string:%s
unsign:%u
kexue:%e',$num,$num,$num,$num,$num,$num,$num,$num,$num,$num,$num,$num);>字符串类%%-%c-%s进制类%b%o%d-%f-%F-%e-%u%x-%X共12

sprintfprintf()直接输出到浏览器参数相同sprintf()返回字符串变量在echo..输出sprintfphp345->sprint-返回一个格式化字符串描述stringsprint(stringformat,[]mixedargs,mixed..)b整数转成二进位.c整数转成对应的ASCI1字符d整数转成十进位f单倍精确度数字转成浮点数。.o整数转成八进位转成字符串。.s转换字符串x整数转换小写十六进位X整数转换大写十六进位

{符号输出:%%
字节:%c
字符串:%s
进制类:
二进制:%b
八进制:%o
十进制5类:
十进制:%d
Float:%f
Double:%F
科学计数法:%e
无符号:%u
十六进制2类:十六大写:%X
十六小写:%x
",$num,$num,$num,$num,$num,$num,$num,$num,$num,$num,$num,$num);echo$tmp;>}

strip_tags函数strip_tags($str)去掉标签[保留]过滤用htmlspecialchars()标签原本输出原来用作用:删除一些对页面布局有影响的html标记原型:stringstrip_tags(stringstr,[stringallowable_tags])第一个参数:必须str对象第二个参数:可选保留标签列表''不用闭合返回值新字符串{deldeldeldaimavar";$newstr=strip_tags($str,'');//默认把标签清除,[保留list]echo$newstr."
";//strip_tagshtmlspecialcharsechohtmlspecialchars($str);//原本输出>}

printf-sprintstr_replace
-strip_tags()-htmlspecialchars()

strposstrpos找到第一次出现的字符串的所在位置描述intstrpos(stringhaystack,mixedneedle,[intoffset])strpos(strobj,'里面内容',编移位置)存在返回索引位置不存在返回false

>

strrchrstrrchr查找最后一次出现在字符串中的字符描述stringstrrchr(stringhaystack,stringneedle)

返回最后一个字符之间的字符串返回只查找需要查的字符第一个来查abb不用

strrpos找到最后一次出现字符串的所在位置描述intstrrpos(stringhaystack,mixedneedle,[intoffset])

-1最后一个0开始r返回过来-1=00=-1

strstr找到第一个出现的字符串描述stringstrstr(stringhaystack,mixedneedle)返回以后的字符串不存在boolfalsesubstr返回字符串的一部分描述stringsubstr(stringstring,intstart,[intlenght])字符串截取tp5还可以是编码

strobj开始\-1长度|-1

php.substr===js.splice

trim函数trim()bothltrim()leftrtrim()right作用:清除空格俩边原型:stringtrim(stringstr,[stringcharlist])第一个参数:必须require第二个参数:可选options""="\0"空"\t"\n<-默认|".."0..9中间a..z设置del目标默认空格返回值new字符串strregexpreg_ereg_

strlen长度cngwdoc...

源码工具g-bgshoptpshop书才有g-***dstp08有书有视频无g-xg

linuxoldg-sp名不txt2g小直接desktopold挑重

新书在新视频|old看书+shop...ds

先linuxoldgnewtxtold配套phpdoc

C:\Users\Administrator\Desktop\Linux教学视频phptiao这old更tiao

图片各有不截图文字音挑重g可以漏liunx版本随便一个模拟可以就练没就看过下ds系统

newphp..linux...

源码最好新改bug废弃...

环境php配过jdg集成

1.Linux应用与发展(一)完美应用ubuntu,PHP5项目实战详解《UNIX系统管理实用教程》、《Solaris8系统管理员指南》

bzygtz

操作系统是一个能够协调、控制计算机系统硬件和软件资源的控制程序,位于计算机硬件和应用程序之间,核心程序处于中心,提供最基本的计算功能。操作系统实现了用户与计算机之间的交互。操作系统主要提供以下基本服务程序:1·文件系统2,设备驱动程序3,用户接口4.系统服务程序

unixc语言unix俩大分类SystemVBSD

bgbzy

UNIX主要发行版本版本公司芯片aixibmpowerpchp-uxhppa-riscsolarissunsparclrixsgimipsdigitalUnixdecalphalinuxBSDredhatlinux-ubuntu-freebsela(intelamdcyrixrise...)

2.Linux应用与发展(二)linuxLinux主要发行版本

redhatfedoraturbolinuxcentosmandrivagentooliunxnovellsuse红旗...debianubuntuknoppix

自由软件介绍口使用的自由可以不受任何限制地使用软件口研究的自由可以获得软件源代码、研究软件运作方式口散布的自由可以自由复制软件及散布给他人口改良的自由可以自行改良软件并散布改良后的版本

软件应该是自由的,应尊重人类的自由意志,它与人类之间不应有任何隔膜。商业模式

自由软件介绍sambasendmail.orgapachemysqlphpinternetsystensconsortium

deepin...ds3.Linux应用与发展(三)Linux优良特性分时的多用户、多任务的操作系统多数网络协议支持,方便的远程管理强大的内存管理和文件管理系统大量的可用软件和免费软件优良的稳定性和安全性良好的可移植性和灵活性可供选择的厂商多

Linux系统结构用户图形界面应用层图形界面shell层shell命令内核层系统调用硬件

XWindow简介oldnew其他界面kde基于....x11dsXWindow系统特点:口独立于操作系统口网络特性口源代码免费UNIX图形环境:CDE(通用桌面环境)CommonDesktopEnvironment

cdekdegnomexfcemate...fvvm...

Linux应用领域电子政务网络应用科学运算嵌入式应用

linuxphpmysqlperlopenoficeredofficeuosdeepin....newold...kali....随便一个都一样到时...内核一样..插件特效到时....

Linux娱乐应用wine....

网络应用lamp基于LAMP的网站论坛及B/S架构应用基于Linux的负载均衡和集群基于Linux的防火墙及代理服务器基于Linux的网游服务器

每天一点从头到尾多打练系统靠自己基础命令

安全运维....

lgpgdsg

lamp兄弟连php论坛phpchina中国开源wwwsearch

cad/cam嵌入式应用生物特征识别系统智能卡系统掌上电脑、手机、信息家电路出器、机顶盒、数码相机、MP4

嵌入式应用

Linux技术认证redhatlinux-professional全国信息技术人才培养工程

5.Linux系统安装(一)

zjdsxtygjg先用过以前学过忘记到时重来多练旧过到时系统过

VMware简介VMware主要产品:口VMware-ESX-ServerDVMware-GSX-ServerDVMware-WorkStation

dorkbox容器到时...VMware主要特点:1、不需要分区或重新开机就能在同一台PC上使用两种以上的操作系统2、本机系统可以与虚拟机系统网络通信3、可以设定并且随时修改虚拟机操作系统的硬件环境

6.Linux系统安装(二)fedora8以前用过分区...会过

文件系统结构/hometmpetcalexjennyhlsbinnotesreportlogtree

/home/alex/root

/dev--devices

scsi:硬盘接口/dev/sda1/dev/sda2/dev/sdb

ide:硬盘接口/dev/hda/dev/hdb

分区规划必要分区:1、根分区/2.swap分区其他分区可根据需要划分

密码设置1、八位以上,大小写字母、数字、符号组合2、要容易记忆合格的密码示例:Am@ri3ln3、定期更换

密码规则Americane--@abcd--1234

7.Linux系统安装(三)

注意防火墙配置稳定就好应许通过的每天一点坚持...头到尾学位置newold

selinux安全控制功能...

vm快照...

ifconfig=ipconfig

eth-ethernet0eth1启动第一个网卡

网卡桥接...

win控制面板添加硬件添加网卡设置网络适配器本地循环loop

8.Linux系统安装(四)

vm网卡手动以前....g-

不错误rm-rf/

home/user/root上传位置默认liming

9.远程访问Linux服务器

redhatliunxferose.....debian...kali.deepin..arch..

win快捷键冲突...虚拟机配置...glf

win添加网卡...以前现在手动配置ip回还接口ip同一个网段...ip....桥接...jdg

设置IPnetconfig-redhat系列...servicenetworkrestart重启网络服务serviceiptablesstop关闭防火墙====iptables-F防火墙有关iptables-X禁用..

iptables防火墙

vmdor容器winwc

win防火墙...

系统一条龙....服务....学...

tree11.Linux命令格式Linux文件的后缀.exe.ini.txt无方便查找系统文件:*.conf*.rpm程序与脚本:*.c*.php格式文件:*.wavjpghtml存档的与压缩文件:*.tar*.gz

linux文件命名规则1.大小写敏感2·除了/之外,所有的字符都合法3·有些字符最好不用,如空格、制表符、退格符和字符@#$&()-[]4.避免使用加减或.作为普通文伴的名第一个学符

linux命令格式命令-选项参数命令命令-选项命令参数

绝对路径:是从根开始一级一级地进入各个子目录,最后指定该命令或文件相对路径:是从当前目录进入某目录,最后指定该命令或文件

.当前目录..上一级目录

通配符合*匹配任何字符或任何数目的字符匹配符何单学符[]匹配在何包含在括号里的单字符ls[1234].txt

lslist--ls显示文件/bin/ls---/bin/*是所以用户都可以使用/sbinls-a所有ls-l列表ls-Funknown全部但是去...

rm-i提示是否...

12.Linux常用命令(一)

echo"33">t.txt>>最加linux+""win不用命令名称:touch功能描述:生成空文件所在路径:/bin/touch:alluser活法格武:touch[选项]文件名

命令名称:cd--changedirectory功能描述:切换目录所在路径:shell内部指令活法格武:cd[目录]cd~cdcd..cd../usercd-cd!$cd~/tecterrcd../usrcd-查看上次pwdcd!$切换到上次目录上次命令...

cp拷贝

命令名称:pwdprintworkdirectory功能描述:显示目前所在的工作目录所在路径:/bin/pwdalluser活法格式:pwd

命令名称:mvmove功能描述:移动文件所在路径:/bin/mvalluser活法格式:mv-f[源文件或目录][目的文件或目录]可以重新命名....renamewinC-x剪切

命令名称:cat不管文件多长一次性读取出来more分页显示文件内容f或者空格显示下一页面f|enter下一行q|Q推出moreless同more...上下移动less语言到时...f或者空格显示下一页面f|y上一行enter下一行q|Q推出morehead开头10行看结尾-1文件tail结尾10行看开头-1-f实时查看其他用户更改同步..C-c5gcatmorelessheadtail功能描述:查看所在路径:/bin活法格式:common-[]file滚动条查看当自带cmdshell不能...catpasswd>newsave.txt读查看保存到new文件中move空格一屏幕回车放页q推出

13.Linux常用命令(二)ln产生链接文件link/bin/lnln-s[源文件][目标文件]注意:源文件和目标文件一定要使用绝对路径/a/blnfile1file2硬链接不能块分区相当备份...一个改其他不ln-sfile1file相当win快捷键软连接

manmanual查看手册帮组等等单里面提示分类...手册分类0123...其他命令--help==

infols查看命令whatisls打错其他继承...whereislsmanlsls--helpwhichls查命令位置whereisls可以找到man1-3whichls

命令信息infolswhatislsmanls里面可以找到man1-3ls--help

挂钩法数字...联想法顺序..启发物比喻内在化图表法笔记流...信息压缩...简写...oldzcnewybg

14.Linux常用命令(三)

gzipGUNzip默认原文件delgzip-1表示快速压缩gzip-9ninenice好压缩.gz压缩扩展名

gunzipname.gz解压...压缩del====gzip-dname.gz解压

gzip不能压缩目录

tar可以打包目录和压缩源文件存在tar-cvf-ccreate创建-vview显示-ffilename指定文件名tar打包命令,-c-v-f-cvf简写cuf可以不加-tar-cvfdirnamegzip-9dirname.tardirname.tar.gzgunzipdirname.tar.gztar-xvfdirname.tar-x解包v显示详细f文件名

加其他参数压缩好...ds...

不用gzip但tartar-zcvfname.tar.gzmydir/-zgzip压缩c创建v显示f文件名tar-zxvfname.tar.gz解压

zip-r压缩目录-f更新压缩包-F修理压缩源文件存在.zipzip-rmydir.zipmydir/unzip解压name提示不version覆盖....

0.512...hzmed不缺少...

useraddusername添加用户passwdusername设置密码其他到时创建home..配置自动...delds重新reset先用

自带vmshell不puttytoolsdiyserverunix远程...集群...都认真dkzm1topendeverydaysome

rootmail>1n表示未读取>r回信>qexitquitmail1

不行了过exitlouyout

ifconfigifconfigeth0:1ip192.168.1.1设置ip添加多个ip

winip加虚拟网卡...本地连接

ping-c519.....-ccount次数默认继续win默认4-t继续

shutdown-h1010分钟关机init0reboot重启动=init6vm--连win..可没看过不练....麻烦其他命令也可以....

15.文本编辑器vi的使用(一)

auto壁纸动态视频卡不img小可以尽暗不动以前难不找..现在..

启动就同步动取消覆盖壁纸...gujbyyqanby启动-取消可以1不就2缓存自动kjwifibbzy

本编辑器vigui了解vi的工作模式只是一个文本编辑器--记事本命令模式:所有在键盘打字都有可能是命令插入模式:进入插入模式i1aAoO回命令模式ESC

vifilename命令模式插入模式编辑模式命令模式:所有在键盘打字都有可能是命令iaoIAO插入模式esc命令模式命令以回车结束运行编辑-命令模式shift+:

保存退出ZZ

i:在光标前插入文本I:在本行开始插入文本a:在光标后附加文本A:在本行末附加文本o:在光标下插入新行O:在光标上插入新行

命令行模式定位命令h左移一个字符j下移一个字符k上移一个字符l右移一个字符方向键盘也可以

$:带空白结尾移至行尾不带g_0:带空白开头移至行首不带^

enter:下行移至下行行首

H:屏幕开头移至屏幕上端

M:屏幕中间移至屏幕中央

L:屏幕结尾移至屏幕下端

gg:到文件开头G:到文件最后一行1G:到文件第一行nG:到文件第n

:20到第20行:setnu设置行号setnum:setnomu取消行号setnonum

临时有效永久当前用户home目录下.vimrc:setnu

czdszm16.文本编辑器vi的使用(二)

命令行模式删除命令x:删除光标所在处的字符X:删除光标前面的字符dd:删除光标所在的行dG删除光标所在行到未尾的内容D:删除光标所在处到结尾:n1,n2d

命令行模式复制命令yy,Y复制当煎行nyy,nY夏制当前行以下n行P将已经选择复制或被除的行放到在当前行下粘贴

命令行模式替换和取消的命令r取代光标所在处的字符R从光标所在处开始替换字符,按esc结束s替换光标所在出字符,并进入文本输入方式S替换光标所在全行,按esc结束u取消上一步操作,取消到上次打开文件的点上.并不是上次保存的点,ctrl+rU取消当前行所有操作

命令行模式保存和退出命令:wwnew_filenamewqZZqq!wq!xx!

搜索和替换命令/stringstringnN上下个

替换:%s/old/new/gg全局:%s/old//g清空gii不区分大小regex

:r文件名打开其他文件:r把其他文件加到光标行:e文件名bnbp上下个

:!ls操作系统命令

vi-ofile1file2打开俩个文件splitctrl+ww切换splitvsplit分屏ctrl+w+shift+_|最大化ctrl+w+-+加大

vi-Ofile1file2打开俩个文件vsplit

sh进入其他shelldsxt...g-查看用户idid用户root@DESKTOP-C2CIP0J:~/demo#idrootuid=0(root)gid=0(root)groups=0(root)root@DESKTOP-C2CIP0J:~/demo#idkoouid=1000(koo)gid=1000(koo)groups=1000(koo),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)

添加用户useradduser1passwduser1改密码实际上改足够文件

18.Linux的用户管理(二)

用户账号管理创建账户1.在/etc/passwd中添加一条记录2-创建用户主目录3.在用户主目录设置默认的配置文件4·设置用户初始口令

useradd或者adduser命令创建

versionnewoldbranch不同创建不自带home加参数del也是...

suuser都可以锁也可以上切换login不行login手动输入loginkalilinuxv|v19.Linux的用户组管理用户组的管理用产组分两私有组:当在创建一个新用户user时,若没有指定他所属于的组,Linux就建立一个和该用产同名的私有组

标准组:标准组可以容纳多个用户,若使用标准组.在创建一个新用户时就应该指定该用户所属于的组

添加用户组useradd用户名user一个组和用户同名usergroupadd组帐号名该组帐号大于500

改变组账号名称groupmod-n新组名原组名

删除组帐号groupdel组帐号名称注意:该账号必须存在且不能作为私有组被用户帐号引用

useradd-gdemouser使用组了usermod-gdemokali-Gdemo:x:1002:kali组内用户列表del#gpasswd-dkalidemocat/etc/group|grepdemo

uid=1001(kali)gid=1002(demo)groups=1002(demo)-g组id一个私有组-G组列表多个标准组useraddusermod-gG俩个组都可以加gpasswd-a加是的组列表

添加用户到组组列表多个标准组gpasswd-a用户账号组帐号名从组中删除用户gpasswd-d用户账号组帐号名

id-g-Gdemoid-ukali

id命令默认全部功能:查看一个用户的UID和GIDid[选项]用户名

命令名称:功能描述:所在路径:活法格式:

old也topbottomeverydaynolooknodayblast...这oldendtop-bottomeverydayaptinstallneofetch图标查询版本200m大不下vm真机才搭算..数dorkbox容器到时...都是查找strstrpos返回位置strposition位置strr右边posstrrchrstrrchar字符返回字符串strrchr==strstrstrstr返回字符串后面->

jdg原变

更高级截取切片php.substr===js.splice

trim

其他大直接iso-多分小拷贝c

不全不系统oldg-ds一边整理笔记网络思维导图图片一边重练越来越走远长命到时g-

经验:新疆水利潘区流量计费项目开发、卫星云图监控及广播系统开发、办公自动化0A,新闻、电子商务等Web项目开发。

www.phpchina.comwww.uselib.com

****************php各种学习路线--------省电水气---**********************-----------------------------**************------------------------------**********************************************************//mysql_connect("localhost","root","root")ordie(连接失败);密码是:";echo$pass;>9x9乘法表";}>

 空格

";}>熟悉握Unix/Linux/Windows等多翻操作系统,嵌入式、C/C++,J2EE、J2ME.J2SE,PHP及Oracle数据库器枝本研友工作具中,对Web系统软件

installThinkPHP5

手册searchip/tp5/public

Tp5基础目录结构访问方式mvc模块控制器操作index.php应用入口文件可hiddensearch手册目录namelowercaseG:\phpStudy\WWW\thinkphp\application\index\controller\index.phpSourceCode{

}

G:\phpStudy\WWW\thinkphp\application\config.php开启调试模式//应用调试模式'app_debug'=>true,

发布改回来安全目录信息

useframeworkdevelopmentframework

命名规范{目录使用小写+下划线;驼峰法命名(首字母大写),其它文件采用小写+下划线命名;类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);以双下划线“__”打头的函数或方法作为魔术方法}

MVC是一个设计模式

$phpindex.phpindex/index/hello/val/value...

ThinkPHP5.0在没有启用路由的情况下典型的URL访问规则是:

URL大小写默认情况下,URL是不区分大小写的,也就是说URL里面的模块/控制器/操作名会自动转换为小写,控制器在最后调用的时候会转换为驼峰法处理。

URL地址传参数不分先后MVC

}>

快速入门完整->

URL传值规则MVC模式

控制器我们找到index模块的Index控制器(文件位于application/index/controller/Index.php注意大小写),我们把Index控制器类的index方法修改为Hello,World!。

//class.name=file.nameclassHelloWorldurl:hello_world

因为默认的URL访问是不区分大小写的,全部都会转换为小写的控制器名,除非你在应用配置文件中,设置了关闭url自动转换如下:'url_convert'=>false,

/index/HelloWorld

如果要继承一个公共的控制器类,可以使用:{php

namespaceapp\index\controller;

useapp\index\controller\Base;

classIndexextendsBase{publicfunctionindex(){return'Hello,World!';}}}

控制器类可以包括多个操作方法,但如果你的操作方法是protected或者private类型的话,是无法直接通过URL访问到该操作的,也就是说只有public类型的操作方法才是可以通过URL访问的。{phpnamespaceapp\index\controller;

classIndex{publicfunctionhello(){return'hello,thinkphp!';}

publicfunctiontest(){return'这是一个测试方法!';}

protectedfunctionhello2(){return'只是protected方法!';}

privatefunctionhello3(){return'这是private方法!';}}当我们访问如下URL地址的时候,前面两个是正常访问,后面两个则会显示异常。

mysql.run脚本批量

{老手推荐使用cmd指令来执行sql,因为速度比较快,首先也是连接上数据库,创建并选择好数据库:mysql>use数据库名;mysql>setnamesutf8;--设置传输编码,避免中文乱码mysql>sourced:/xxx.sql;--source文件路径就这么简单,然后就等着sql执行完毕即可.}

首先我们需要在应用的数据库配置文件application/database.php中添加数据库的连接信息如下:{return[//数据库类型'type'=>'mysql',//服务器地址'hostname'=>'127.0.0.1',//数据库名'database'=>'demo',//数据库用户名'username'=>'root',//数据库密码'password'=>'',//数据库连接端口'hostport'=>'',//数据库连接参数'params'=>[],//数据库编码默认采用utf8'charset'=>'utf8',//数据库表前缀'prefix'=>'think_',//数据库调试模式'debug'=>true,];}

接下来,我们修改下控制器方法,添加读取数据的代码:{phpnamespaceapp\index\controller;

usethink\Controller;usethink\Db;

classIndexextendsController{publicfunctionindex(){$data=Db::name('data')->find();$this->assign('result',$data);return$this->fetch();}}}

{thinkphp/application/index/view/index/hello.htmlhello{$result.id}--{$result.data}}

thinkphp/application/index/controller/hi.php{phpnamespaceapp\index\controller;useapp\index\controller\Index;//继承公共控制器类.php.name+class.nameclassHiextendsIndex{publicfunctionindex($id='values'){$hi=newIndex();//$hi=super.demo()return$id.'Demo
'.$hi->demo();}}//class.name=file.nameclassHelloWorldurl:hello_world}

数据库插入三种方法插入后获取id和多条插入//Db::execute('insert*');调用sql语句tp5构造方法//Db::table('table_name')->insert(['name'=>'','id'=>'']);去表前缀Db::name('data')->insert(['name'=>'','id'=>'']);//dump查询数据类型数组//创建成功返回truedumpint1

phpMyAdminSqlnamesql脚本mysql-uroot-proot-Dthink_data>demo.sqlmysql>sourcedemo.sql

insertintodata(id,name)values(1,'k'),(2,'kk');

//ctrl+enterEditPlus

arguments``error

Db::name('data')->insert(['data'=>'koo']);不用id单可以OK不用keyerror

query和execute两个方法Db::query('select*fromthink_datawhereid=5');query方法返回的结果是一个数据集(数组),如果没有查询到数据则返回空数组。execute创建成功返回truedumpint1

showtablesfromdemo

query方法用于查询,默认情况下返回的是数据集(二维数组),execute方法的返回值是影响的记录数。

切换数据库{$result=Db::connect([//数据库类型'type'=>'mysql',//服务器地址'hostname'=>'127.0.0.1',//数据库名'database'=>'thinkphp',//数据库用户名'username'=>'root',//数据库密码'password'=>'123456',//数据库连接端口'hostport'=>'',//数据库连接参数'params'=>[],//数据库编码默认采用utf8'charset'=>'utf8',//数据库表前缀'prefix'=>'think_',])->query('select*fromthink_data');dump($result);}

{或者采用字符串方式定义(字符串方式无法定义数据表前缀和连接参数),如下:

$result=Db::connect('mysql://root:123456@127.0.0.1:3306/thinkphp#utf8')->query('select*fromthink_datawhereid=1');dump($result);}

应用配置文件(application/config.php//数据库配置1,//数据库配置2{//数据库配置1'db1'=>[//数据库类型'type'=>'mysql',//服务器地址'hostname'=>'127.0.0.1',//数据库名'database'=>'thinkphp',//数据库用户名'username'=>'root',//数据库密码'password'=>'123456',//数据库连接端口'hostport'=>'',//数据库连接参数'params'=>[],//数据库编码默认采用utf8'charset'=>'utf8',//数据库表前缀'prefix'=>'think_',],//数据库配置2'db2'=>[//数据库类型'type'=>'mysql',//服务器地址'hostname'=>'127.0.0.1',//数据库名'database'=>'test',//数据库用户名'username'=>'root',//数据库密码'password'=>'',//数据库连接端口'hostport'=>'',//数据库连接参数'params'=>[],//数据库编码默认采用utf8'charset'=>'utf8',//数据库表前缀'prefix'=>'test_',],}$result=Db::connect('db1')->query('select*fromthink_datawhereid=1');$result=Db::connect('db2')->query('select*fromthink_datawhereid=1');

values(,,)',[8,'thinkphp',1]);

values(:id,:name,:status)',['id'=>10,'name'=>'thinkphp','status'=>1]);

链式操作使用链式操作可以完成复杂的数据库查询操作,例如:

//查询十个满足条件的数据并按照id倒序排列$list=Db::name('data')->where('status',1)->field('id,name')->order('id','desc')->limit(10)->select();dump($list);

支持链式操作的查询方法包括:

方法名描述select查询数据集find查询单个记录insert插入记录update更新记录delete删除记录value查询值column查询列chunk分块查询count等聚合查询

//插入记录-用TP5的查询构造器方法//Db::table('think_data')->insert(['id'=>9,'data'=>'data']);Db::table('think_data')->update(['id'=>4,'data'=>'dae']);//插入记录-去掉表前缀Db::name('data')->insert(['id'=>900,'data'=>'data']);

//插入记录-去掉表前缀config配置里的前缀

数据库插入数据的四种写法Db::executeDb::tableDb::namedb('data')insertGetIDinsertAll($data)多条

系统提供的助手函数db

dump($result);//返回插入数目

切换数据库:$res=Db::connect('mysql://root:root@127.0.0.1:3306/demo#utf8')->query('showtables');

岔开分离操作链条操作

//参数绑定占位符Db::query('insertintothink_data(data)values(),()',['hello','world']);//带命名占位符Db::execute('insertintothink_data(data)values(:data),(:data1)',['data'=>'hh','data1'=>'ww']);field:领域

//加whereDb::table('think_data')->where('id',9)->update(['data'=>'update9']);

//查询数据field('id,data')范围$list=Db::name('data')->field('id,data')->where('id',9)->select();dump($list);

//链式操作可以完成复杂的数据库查询操作//链式操作不分先后,只要在查询方法(这里是select方法)之前调用就行$list=Db::name('data')->where('id',9)->field('id,data')->order('id','desc')->limit(10)->select();dump($list);

column列chunk分块count集合查

创建表时指定表类型的方法createtable`data`(`id`int(88)notnullauto_incrementprimarykey,`name`varchar(255)defaultnull)engine=myisam;

--也可以创建后更改:altertable`data`engine=innodb;

--查看表类型(存储引擎)data是数据库名称showtablestatusfrom`data`;----结果为数据库test中所有表的信息,其中第二项type即是表的类型。

--查看表类型(存储引擎)2message是表名称showcreatetable`data`;----结果为表message创建时的信息,其中有TYPE或ENGINE一项,指定了表的类型(存储引擎)。--showtables不能得到表类型的信息。

transaction方法//事务批量处理altertable`think_data`engine=innodb;//自动transaction方法都Db::transaction(function(){Db::table('think_data')->where('id',9)->update(['data'=>'transaction']);Db::table('think_data')->insert(['data'=>'transaction']);});

//手动控制事务Db::startTrans();try{Db::table('think_data')->where('id',3)->update(['data'=>'transaction']);Db::table('think_data')->insert(['data'=>'transaction']);Db::commit();//提交事务}catch(\Exception$e){Db::rollback();//回滚事务}

//插入记录-用TP5的查询构造器方法//Db::table('think_data')->insert(['id'=>9,'data'=>'data']);Db::table('think_data')->update(['id'=>4,'data'=>'dae']);//插入记录-去掉表前缀config配置里的前缀Db::name('data')->insert(['id'=>900,'data'=>'data']);//插入记录-更加简单的写法$db=db('data');//插入记录$result1=$db->insertGetId(['data'=>'database']);dump($result1);

//插入记录-返回ID的方法$data=['data'=>'tp5'];$result2=Db::name('data')->insertGetId($data);dump($result2);//返回数据库的ID

//插入记录-插入多条的方法$data1=[['data'=>'dataTablesid'],['data'=>'dataTablesid3'],['data'=>'dataTablesid2']];$result3=$db->insertAll($data1);dump($result3);//返回插入数目//切换数据库$res=Db::connect('mysql://root:root@127.0.0.1:3306/demo#utf8')->query('showtables');dump($res);

增删改查

数据库update更新的四种写法

Db::startTrans();try{Db::execute('updatethink_datasetdata="hello"whereid<=5');Db::commit();}catch(\Exception$e){Db::rollback();}}

fetch获取

驼峰访问加_在应用配置文件中设置://关闭URL自动转换(支持驼峰访问控制器)'url_convert'=>false,ThinkPHP/application/config.php

应用配置文件中的url_param_type//按照参数顺序获取'url_param_type'=>1,默认不安顺序按顺序绑定参数的话,操作方法的参数只能使用URLpathinfo变量,而不能使用get或者post变量。

隐藏index.php隐藏入口G:\phpStudy\WWW\thinkphp\public\.htaccessOptions+FollowSymlinks-MultiviewsRewriteEngineonRewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php/$1[QSA,PT,L]

'koo/[:name]'=>'index/koo',

二:采用动态定义路由规则的方式定义application/route.phpusethink\Route;Route::rule('hello/:name','index/hello');

闭包定义{return[//定义闭包'hello/[:name]'=>function($name){return'Hello,'.$name.'!';},];

usethink\Route;

Route::rule('hello/:name',function($name){return'Hello,'.$name.'!';});

usethink\facade\Route;Route::get('blog/:id','blog/get');

//输出blog/thinkphpUrl::build('blog/read','name=thinkphp');Url::build('blog/read',['name'=>'thinkphp']);

助手函数url来简化url('blog/read','name=thinkphp');//等效于Url::build('blog/read','name=thinkphp');

//添加hello路由标识Route::rule(['hello','hello/:name'],function($name){return'Hello,'.$name;});//根据路由标识快速生成URLUrl::build('hello','name=thinkphp');//或者使用Url::build('hello',['name'=>'thinkphp']);

usethink\facade\Url;

//添加hello路由标识Route::rule(['kt','kt/:name'],function($name){return'Hello,'.$name;});//根据路由标识快速生成URLUrl::build('kt','name=thinkphp');//或者使用Url::build('kt',['name'=>'thinkphp']);url('kt','name=thinkphp');

return[//全局变量规则定义'__pattern__'=>['name'=>'\w+',],'koo/[:name]$'=>'index/koo',//固定路由$完整匹配'[hello]'=>[':id'=>['index/hello',['method'=>'get'],['id'=>'\d+']],':name'=>['index/hello',['method'=>'post']],],];

//插入记录-用TP5的查询构造器方法//Db::table('think_data')->insert(['id'=>9,'data'=>'data']);Db::table('think_data')->update(['id'=>4,'data'=>'dae']);//插入记录-去掉表前缀config配置里的前缀Db::name('data')->insert(['data'=>'data']);//插入记录-更加简单的写法$db=db('data');//插入记录$result1=$db->insertGetId(['data'=>'database']);dump($result1);

select

Db::transaction(function(){$res=Db::query('select*fromthink_datawhereid<>9');//id<>9不等9var_dump($res);//var_dump查询类型var_dump无规律散乱dump整齐});

//查询数据field('id,data')范围$list=Db::name('data')->field('id,data')->where('id',9)->select();Db::execute|::queryDb::tableDb::namedb()

三.请求和响应requestresponse

require包含

ThinkPHP5的Request对象由think\Request类完成。

usethink\Controller;echo'url:'.$this->request->url().'
';

使用助手函数echo'url:'.request()->url().'
';

{自动注入请求对象如果没有继承think\Controller,则可以使用Request对象注入的方式来简化调用:phpnamespaceapp\index\controller;usethink\Request;classIndex{publicfunctionhello(Request$request,$name='World'){//获取当前URL地址不含域名echo'url:'.$request->url().'
';return'Hello,'.$name.'!';}}获取请求变量系统推荐使用param方法统一获取当前请求变量,该方法最大的优势是让你不需要区分当前请求类型而使用不同的全局变量或者方法,并且可以满足大部分的参数需求,下面举一个例子。{echo'请求参数:';dump($request->param());echo'name:'.$request->param('name');}

echo'GET参数:';dump($request->get());echo'GET参数:name';dump($request->get('name'));echo'POST参数:name';dump($request->post('name'));echo'cookie参数:name';dump($request->cookie('name'));echo'上传文件信息:image';dump($request->file('image'));}

{获取变量的方法包括:方法作用param获取请求变量get获取$_GET变量post获取$_POST变量put获取PUT请求变量delete获取DELETE请求变量patch获取PATCH请求变量request获取$_REQUEST变量route获取路由(URL)变量session获取$_SESSION变量cookie获取$_COOKIE变量server获取$_SERVER变量env获取$_ENV变量file获取上传文件信息}

dump($request->method());//请求方法dump($request->type());//资源类型dump($request->ip());//访问ipdump(var_export($request->isAjax(),true));//是否Ajax请求dump($request->param());//参数dump($request->only(['name']));//参数包namedump($request->except(['name']));//参数排除name

{URL请求和信息方法可以总结如下:方法作用domain获取当前的域名url获取当前的完整URL地址baseUrl获取当前的URL地址,不含QUERY_STRINGbaseFile获取当前的SCRIPT_NAMEroot获取当前URL的root地pathinfo获取当前URL的pathinfo地址path获取当前URL的pathinfo地址,不含后缀ext获取当前URL的后缀type获取当前请求的资源类型scheme获取当前请求的schemequery获取当前URL地址的QUERY_STRINGhost获取当前URL的host地址port获取当前URL的port号protocol获取当前请求的SERVER_PROTOCOLremotePort获取当前请求的REMOTE_POR}

dump($request->module());//当前模块dump($request->controller());//控制器dump($request->action());//操作信息dump($request->routeInfo());//路由信息dump($request->dispatch());//调度信息

{修改配置文件,添加://默认输出类型'default_return_type'=>'json',return['name'=>'koo']修改输出类型为xml://默认输出类型'default_return_type'=>'xml',thinkphp1}

$data=['name'=>'hello','id'=>'1'];xml($data,404);json($data)->code(404)->header(['Cache-control'=>'no-cache,must-revalidate']);returnjson($data,404,['Cache-control'=>'no-cache,must-revalidate']);

引入了一个Jumptrait,这是PHP5.4版本的新特性,如果你的控制器类是继承的\think\Controller的话,系统已经自动为你引入了\traits\controller\Jump,无需再次引入

数据库删除5db('data')->where('id','<',2)->delete();//根据主键deldb('data')->delete(1);db('data')->delete([1,8,9]);

模板调用快速入门源码

模板入门调用模板,美工设计和程序分工协助VC模式

//模板输出-指定模板文件名//G:\phpStudy\WWW\thinkphp\application\index\view\index\kali.htmlreturn$this->fetch('kali');//模板输出-使用默认控制器的名字//G:\phpStudy\WWW\thinkphp\application\index\view\index\index.htmlfetch()不带值//return$this->fetch();}}}

//或者批量赋值覆写前面namehtml调用用前面name{$name}//数组赋值{$data.name}//模板输出-指定模板文件名//G:\phpStudy\WWW\thinkphp\application\index\view\index\kali.htmlreturn$this->fetch('kali');//模板输出-使用默认控制器的名字//G:\phpStudy\WWW\thinkphp\application\index\view\index\index.htmlfetch()不带值//return$this->fetch();

三方法:$this->assign('name','hellowrold');$this->assign(['tel'=>'120','phone'=>'apple']);//$data['dog']='long';$data=['dog'=>'longlong'];$this->assign('data',$data);return$this->fetch();四方法://fetch('现实html',[$name=>value])省assignreturn$this->fetch('index',['name'=>'hello']);

没有viewhtmlcreate

//不带值不调用默认url没有arguments$this->assign('name');publicfunctionindex(Request$request,$name='world')//不带值不调用默认url没有arguments//+$name才用

视图实例化视图功能由\think\View类配合视图驱动(模板引擎)类一起完成,目前的内置模板引擎包含PHP原生模板和Think模板引擎。

继承\think\Controller类

//渲染模板输出return$this->fetch('hello',['name'=>'thinkphp']);

方法说明fetch渲染模板输出display渲染内容输出assign模板变量赋值engine初始化模板引擎

engine发动机引擎

$this->view对象:助手函数returnview('hello',['name'=>'thinkphp']);无需继承think\Controllerview('[模板文件]'[,'模板变量(数组)'][,模板替换(数组)]){//return先遇到的马上返回不执行后面//view()组手函数=fetch()returnview('index',['name'=>'view']);}

芒果kphp

内置模板引擎应用配置文件中配置template参数即可,例如:{'template'=>[//模板引擎类型支持phpthink支持扩展'type'=>'Think',//模板路径'view_path'=>'./template/',//模板后缀'view_suffix'=>'html',//模板文件名分隔符'view_depr'=>DS,//模板引擎普通标签开始标记'tpl_begin'=>'{',//模板引擎普通标签结束标记'tpl_end'=>'}',//标签库标签开始标记'taglib_begin'=>'{',//标签库标签结束标记'taglib_end'=>'}',],}

调用engine方法初始化视图类也提供了engine方法对模板解析引擎进行初始化或者切换不同的模板引擎return$this->engine('php')->fetch();表示当前视图的模板文件使用原生php进行解析。

display均可传入模版变量$content='{$name}-{$email}';return$this->display($content,['name'=>'ThinkPHP','email'=>'thinkphp@qq.com']);

share方法V5.0.4+开始,支持在任何地方使用静态方法进行模板变量赋值think\View::share('name','value');//或者批量赋值think\View::share(['name1'=>'value','name2'=>'value2']);全局静态模板变量最终会和前面使用方法赋值的模板变量合并。

渲染模板最常用的是继承系统的控制器基类后调用fetch方法,调用格式:fetch('[模板文件]'[,'模板变量(数组)'])用法描述不带任何参数自动定位当前操作的模板文件[模块@][控制器/][操作]常用写法,支持跨模块完整的模板文件名直接使用完整的模板文件名(包括模板后缀)

当前模块/默认视图目录/当前控制器(小写)/当前操作(小写).html

return$this->fetch('member/read');表示调用Member控制器下面的read模板。G:\phpStudy\WWW\thinkphp\application\index\view\directory\index.htmlG:\phpStudy\WWW\thinkphp\application\index\view\index\index.html

return$this->fetch('/directory/index');//G:\phpStudy\WWW\thinkphp\application\index\view\directory\index.html

跨模块渲染模板return$this->fetch('admin@member/edit');

渲染输出不需要写模板文件的路径和后缀。这里面的控制器和操作并不一定需要有实际对应的控制器和操作,只是一个目录名称和文件名称而已,例如,你的项目里面可能根本没有Public控制器,更没有Public控制器的menu操作,但是一样可以使用return$this->fetch('public/menu');

支持从视图根目录开始读取模板,例如:$this->fetch('/menu');当前模块/默认视图目录/menu.html

渲染完整模板return$this->fetch('./template/public/menu.html');

其他的后缀文件,也支持直接输出,例如:return$this->fetch('./template/public/menu.tpl');

增加__ROOT____STATIC____JS__和__CSS__内置替换规则输出替换视图输出的内容进行字符替换$this->assign('name','thinkphp');return$this->fetch('index',[],['__PUBLIC__'=>'/public/']);

如果需要全局替换的话,可以直接在配置文件中添加:'view_replace_str'=>['__PUBLIC__'=>'/public/','__ROOT__'=>'/',]

助手函数view也支持全局配置参数view_replace_str的设置,如果需要设置不同的替换参数,可以使用:returnview('index',['name'=>'thinkphp'],['__PUBLIC__'=>'/public/']);在渲染模板或者内容输出的时候就会自动根据设置的替换规则自动替换。

分页输出可以很简单的输出用户的分页数据,控制器index方法修改为$list=UserModel::paginate(3);$this->assign('list',$list);return$this->fetch();

viewhtml导入kali.html{includefile="index/kali"title="$title"/}

//模板路径'view_path'=>'../template/index/',

//视图输出内容字符替换return$this->fetch('index',[],['__PUBLIC__'=>'/public/']);

return$this->fetch('directory/index');//G:\phpStudy\WWW\thinkphp\application\index\view\directory\index.html

//return先遇到的马上返回不执行后面//view()组手函数=fetch()returnview('index',['name'=>'view'],['__PUBLIC__'=>'/public/']);return$this->fetch();//fetch('现实html',[$name=>value])省assignreturn$this->fetch('index',['name'=>'hello']);//display均可传入模版变量$content='{$name}';return$this->display($content,['name'=>'display']);}}

模板和数据库组合操作入门

exit()退出后面不执行

viewhtml{$list.0.name}二维数组+key0

视图+数据库组合操作入门

ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。

标签类型描述普通标签主要用于输出变量、函数过滤和做一些基本的运算操作XML标签也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展

普通标签普通标签用于变量输出和模板注释,普通模板标签默认以{和}作为开始和结束标识,并且在开始标记紧跟标签的定义,如果之间有空格或者换行则被视为非模板标签直接输出。例如:{$name}、{$vo.name}、{$vo['name']|strtoupper}都属于正确的标签,而{$name}、{$vo.name}则不属于。

要更改普通标签的起始标签和结束标签,可以更改template.php中的配置参数:

//普通标签开始标记'tpl_begin'=>'<{',//普通标签结束标记'tpl_end'=>'}>'

普通标签的定界符就被修改了,原来的{$name}和{$vo.name}必须使用<{$name}>和<{$vo.name}>才能生效了。

{//标签库标签开始标签'taglib_begin'=>'<',//标签库标签结束标记'taglib_end'=>'>',{eqname="name"value="value"}相等{else/}不相等{/eq}复制就需要改成

相等不相等}

模板标签的{}和$之间不能有任何的空格,否则标签无效

一个对象{$data->name}

常量:{$data::CONST_NAME}方法:{$data->fun()}

使用默认值{$user.name|default="default"}

默认值和函数可以同时使用,例如:{$Think.get.name|getName|default="名称为空"}

系统变量输出普通的模板变量需要首先赋值后才能在模板中输出,但是系统变量则不需要,可以直接在模板中输出,系统变量的输出通常以{$Think.}(大小写一致)打头,例如:{$Think.server.script_name}//输出$_SERVER['SCRIPT_NAME']变量{$Think.session.user_id}//输出$_SESSION['user_id']变量{$Think.get.page}//输出$_GET['page']变量{$Think.cookie.name}//输出$_COOKIE['name']变量复制支持输出$_SERVER、$_ENV、$_POST、$_GET、$_REQUEST、$_SESSION和$_COOKIE变量。

还可以输出常量{$Think.const.PHP_VERSION}

输出配置参数使用:{$Think.config.default_module}{$Think.config.default_controller}

输出语言变量可以使用:{$Think.lang.page_error}{$Think.lang.var_error}

请求变量模板支持直接输出Request请求对象的方法参数,用法如下:$Request.方法名.参数{//调用Request对象的get方法传入参数为id{$Request.get.id}//调用Request对象的param方法传入参数为name{$Request.param.name}//调用Request对象的param方法传入参数为user.nickname{$Request.param.user.nickname}//调用Request对象的root方法{$Request.root}//调用Request对象的root方法,并且传入参数true{$Request.root.true}//调用Request对象的path方法{$Request.path}//调用Request对象的module方法{$Request.module}//调用Request对象的controller方法{$Request.controller}//调用Request对象的action方法{$Request.action}//调用Request对象的ext方法{$Request.ext}//调用Request对象的host方法{$Request.host}//调用Request对象的ip方法{$Request.ip}//调用Request对象的header方法{$Request.header.accept-encoding}}

需要对模板输出使用函数进行过滤或其它处理的时候,可以使用:{$data.name|md5}{$data.name|md5}

如果你不需要转义(例如你需要输出html表格等内容),可以使用:{$data.name|raw}

{$data.create_time|date='Y-m-dH:i'}{$data.number|format='%02d'}

{$data.name|substr=0,3}多个函数过滤{$name|md5|strtoupper|substr=0,3}{:substr(strtoupper(md5($name)),0,3)}

可以在模板中直接使用系统的助手函数进行输出{:app('cache')->get('name')}表示调用容器中的think\Cache对象实例输出name缓存标识内容。{:}开头的变量输出表示调用函数或者类的方法及属性,如果你要带命名空间调用类的属性,例如:{:think\\App::VERSION}{:think\\facade\\Request::get('name')}类的命名空间中的\需要改成\\才能正常调用。

运算符使用示例+{$a+$b}-{$a-$b}*{$a*$b}/{$a/$b}%{$a%$b}++{$a++}或{++$a}--{$a--}或{--$a}综合运算{$a+$b*10+$c}

模板可以支持三元运算符,例如:{$status'正常':'错误'}{$info['status']$info['msg']:$info['error']}{$info.status$info.msg:$info.error}

{$name'默认值'}表示如果有设置$name则输出$name,否则输出默认值。

{$name='默认值'}表示$name为真时才输出默认值。

{$name:'NO'}表示如果$name为真则输出$name,否则输出NO。

{$a==$b'yes':'no'}前面的表达式为真输出yes,否则输出no,条件可以是==、===、!=、!==、>=、<=

原样输出{可以使用literal标签来防止模板标签被解析,例如:

{literal}Hello,{$name}!{/literal}上面的{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。

literal标签还可以用于页面的JS代码外层,确保JS代码中的某些用法和模板引擎不产生混淆。

总之,所有可能和内置模板引擎的解析规则冲突的地方都可以使用literal标签处理。}

模板注释{/*注释内容*/}或{//注释内容}

模板布局看别人打全局配置方式return['layout_on'=>true,'layout_name'=>'layout',]模板标签方式{layoutname="layout"/}动态方法布局$this->view->engine->layout(true);return$this->fetch('add');例如全局配置已经开启了布局,可以在某个页面单独关闭$this->view->engine->layout(false);

模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。{blockname="title"}网站标题{/block}然后我们在子模板(其实是当前操作的入口模板)中使用继承:base.html{extendname="base"/}

{extend标签的用法和include标签一样,你也可以加载其他模板:{extendname="Public:base"/}}绝对文件路径加载{extendname="./Template/Public/base.html"/}

{{extendname="./base.html"/}{blockname="title"}{$title}{/block}{blockname="menu"}首页{/block}

{blockname="left"}{/block}

{blockname="main"}{volistname="list"id="val"}{$val.id}=>{$val.data}
{/volist}{/block}

{blockname="right"}{/block}

{blockname="footer"}{__block__}@ThinkPHP{/block}}

包含文件{includefile='模版文件1,模版文件2,...'/}模版表达式的定义规则为:模块@控制器/操作{includefile="public/header"/}//包含头部模版header{includefile="public/menu"/}//包含菜单模版menu{includefile="blue/public/menu"/}//包含blue主题下面的menu模版一次包含多个模版{includefile="public/header,public/menu"/}直接包含一个模版文件名(包含完整路径),例如:{includefile="../application/view/default/public/header.html"/}

模板输出替换如果需要全局替换的话,可以直接在template.php配置文件中添加:'tpl_replace_string'=>['__STATIC__'=>'/static','__JS__'=>'/static/javascript',]

标签库

导入标签库{taglibname="html"/}多个{taglibname="html,article"/}{article:readname="hello"id="data"}{$data.id}:{$data.title}{/article:read}{article:readname="hello"/}就是开放标签。

内置标签无需导入即可使用{{eqname="status"value="1"}正常{/eq}复制如果Cx不是内置标签的话,可能就需要这么使用了:

{cx:eqname="status"value="1"}正常{/cx:eq}}

标签库预加载{在应用或者模块的配置文件中添加:

'taglib_pre_load'=>'article,html'设置后,模板文件就不再需要使用

{taglibname="html,article"/}}

内置标签{

循环标签{foreach$listas$key=>$vo}{$vo.id}:{$vo.name}{/foreach}

可以不通过模板变量赋值,支持使用函数或者方法获取数据循环输出:{foreach:model('user')->all()as$key=>$vo}{$vo.id}:{$vo.name}{/foreach}

VOLIST标签volist标签通常用于查询数据集或者二维数组的结果输出。在控制器中首先对模版赋值:{volistname="list"id="data"}{$data.id}:{$data.name}
{/volist}Volist标签的name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。id表示当前的循环变量,可以随意指定,但确保不要和name属性冲突

可以直接使用函数设定数据集,而不需要在控制器中给模板变量赋值传入数据集变量,如:{volistname=":model('user')->all()"id="vo"}{$vo.name}{/volist}

支持输出查询结果中的部分数据,例如输出其中的第5~15条记录{volistname="list"id="vo"offset="5"length='10'}{$vo.name}{/volist}

输出偶数记录{volistname="list"id="vo"mod="2"}{eqname="mod"value="1"}{$vo.name}{/eq}{/volist}

为空的时候输出提示:{volistname="list"id="vo"empty="暂时没有数据"}

输出循环变量:{volistname="list"id="vo"key="k"}{$k}.{$vo.name}{/volist}

果没有指定key属性的话,默认使用循环变量i,例如:{volistname="list"id="vo"}{$i}.{$vo.name}{/volist}

FOR标签{forstart="开始值"end="结束值"comparison=""step="步进值"name="循环变量名"}{/for}开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。comparison的默认值是lt,name的默认值是i,步进值的默认值是1,举例如下:{forstart="1"end="100"}{$i}{/for}解析后的代码是for($i=1;$i<100;$i+=1){echo$i;}

比较标签{比较标签name="变量"value="值"}内容{/比较标签}

{

标签含义eq或者equal等于neq或者notequal不等于gt大于egt大于等于lt小于elt小于等于heq恒等于nheq不恒等于}

{eqname="name"value="value"}value{/eq}

{else/}

当name变量的值大于5就输出{gtname="name"value="5"}value{/gt}

所有的比较标签可以统一使用compare标签(其实所有的比较标签都是compare标签的别名),例如:当name变量的值等于5就输出{comparename="name"value="5"type="eq"}value{/compare}{eqname="name"value="5"}value{/eq}

条件判断SWITCH标签{switch变量}{casevalue1}输出内容1{/case}{casevalue2}输出内容2{/case}{default/}默认情况{/switch}

{casegif|png|jpg}图像格式{/case}

IF标签{if表达式}value1{elseif表达式/}value2{else/}value3{/if}

{if($name==1)OR($name>100)}value1

范围判断范围判断标签包括in/notin/between/notbetween四个标签,都用于判断变量是否中某个范围。

$id=1;$this->assign('id',$id);IN和NOTIN我们可以使用in标签来判断模板变量是否在某个范围内,例如:{inname="id"value="1,2,3"}id在范围内{/in}

如果判断不在某个范围内,可以使用notin标签:{notinname="id"value="1,2,3"}id不在范围内{/notin}

{inname="id"value="1,2,3"}id在范围内{else/}id不在范围内{/in}

BETWEEN和NOTBETWEENbetween标签来判断变量是否在某个区间范围内{betweenname="id"value="1,10"}输出内容1{/between}

notbetween标签来判断变量不在某个范围内{notbetweenname="id"value="1,10"}输出内容2{/notbetween}

可以使用else标签把两个用法合并,例如:{betweenname="id"value="1,10"}输出内容1{else/}输出内容2{/between}

{betweenname="id"value="A,Z"}{betweenname="Think.post.id"value="1,5"}{betweenname="id"value="$range"}

PRESENT/NOTPRESENT标签present标签用于判断某个变量是否已经定义,用法:{presentname="name"}name已经赋值{/present}复制如果判断没有赋值,可以使用:

{notpresentname="name"}name还没有赋值{/notpresent}可以把上面两个标签合并成为:{presentname="name"}name已经赋值{else/}name还没有赋值{/present}

EMPTY/NOTEMPTY标签empty标签用于判断某个变量是否为空{emptyname="name"}name为空值{/empty}复制如果判断没有赋值,可以使用:

{notemptyname="name"}name不为空{/notempty}可以把上面两个标签合并成为:

{emptyname="name"}name为空{else/}name不为空{/empty}

DEFINED标签DEFINED标签用于判断某个常量是否有定义,用法如下:{definedname="NAME"}NAME常量已经定义{/defined}

如果判断没有被定义,可以使用:{notdefinedname="NAME"}NAME常量未定义{/notdefined}可以把上面两个标签合并成为:

{definedname="NAME"}NAME常量已经定义{else/}NAME常量未定义{/defined}

标签嵌套系统内置的标签中,volist、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用

原生PHP{php}echo'Hello,world!';{/php}php标签或者php代码里面就不能再使用标签(包括普通标签和XML标签)了,因此下面的几种方式都是无效的:设置了tpl_deny_php参数为true,就不能在模板中使用原生的PHP代码,但是仍然支持PHP标签输出。

定义标签ASSIGN标签ASSIGN标签用于在模板文件中定义变量,用法如下:{assignname="var"value="123"/}在运行模板的时候,赋值了一个var的变量,值是123。var=123

DEFINE标签DEFINE标签用于中模板中定义常量,用法如下:{definename="MY_DEFINE_NAME"value="3"/}在运行模板的时候,就会定义一个MY_DEFINE_NAME的常量。

标签扩展自定义标签建议开发者将自定义标签库请放置应用目录中,请勿放在框架系统目录内,以免使用Composer更新框架时导致自定义标签库的丢失usethink\template\TagLib;classDemoextendsTagLib

这时候我们的控制器继承Controller,在配置参数中配置:在控制器中对模版赋值:在模版中调用我们已经预先加载的标签:

}

BBS浏览展示页面

G:\phpStudy\WWW\thinkphp\application\index\view\bbs\bbs.html{BBS{foreach$showas$key=>$val}{$key}=>{$val.id,$val.data}
{/foreach}


{volistname="show"id="val"empty="empty"}Default:{$i}-ID=>{$val.id}:{$val.data}
{/volist}

分页实现入门.留言板展示页

paginate(一页显示多少,共多少)30=123$show=$db->where('id','>=','1')->paginate(10,30);

显示分页{$show->render()}{volistname="show"id="val"empty="empty"}Default:{$i}-ID=>{$val.id}:{$val.data}
{/volist}{$show->render()}

reader阅读读取en分页render

默认类名是.pagination.paginationli

{BBS{foreach$showas$key=>$val}{$key}=>{$val.id,$val.data}
{/foreach}


{volistname="show"id="val"empty="empty"}Default:{$i}-ID=>{$val.id}:{$val.data}
{/volist}{$show->render()}}

分页显示{$show->render()}每页显示10条数据paginate(10);

也可以单独赋值分页输出的模板变量&list=db('data')->where('id','>',1)->paginete(10);//获得分页显示$page=$list->render();$this->assign('list',$list);return$this->fetch();

html{$page}

分页后数据处理支持分页类后数据直接each遍历处理,方便修改分页后的数据,而不是只能通过模型的获取器来补充字段。&list=db('data')->where('id','>',1)->paginete(10)->each(function($item,$key){$item->nickname='think';$item['nickname']='think';return$item;});Db类操作分页数据each方法的闭包函数中需要使用返回值

分页参数参数描述list_rows每页数量page当前页pathurl路径queryurl额外参数fragmenturl锚点var_page分页变量type分页类名

设置第一种是在配置文件{//分页配置'paginate'=>['type'=>'bootstrap','var_page'=>'page',],type属性支持命名空间,例如:

//分页配置'paginate'=>['type'=>'\org\page\bootstrap','var_page'=>'page',],}

第二种调用分页方法的时候传入{$list=Db::name('user')->where('status',1)->paginate(10,true,['type'=>'bootstrap','var_page'=>'page',]);}

//查询状态为1的用户数据并且每页显示10条数据总记录数为1000$list=User::where('status',1)->paginate(10,1000);

分页用Ajax无刷新实现快速入门

分页快速入门留言板展示页无刷新ajax分页快速入门

innerHTML清空替换

ajax.html{BBS-Ajax

留言展示-Tp5简易留言板

留言如下:

ID内容姓名{volistname="show"id="val"empty="empty"}{$i}{$val.id}{$val.data}{/volist}{$show->render()}
}

Bbs简单发布功能的实现,发布之表单的制作

publicfunctionadd(){//$request=Request::instance();//echo'请求方法:'.$request->method().'
';//echo'请求参数:';//dump($request->param());//echoRequest::instance()->param('name');//echo"-------";//echoinput('param.name');return$this->fetch();}

BBs发布快速入门表单数据的接受

Request::instance()->param('name');好!input('param.name');

BBS发布快速入门把表单数据存入到数据库

tp5支持utf8不支持ansi编码

$title=input('param.title');$content=input('param.content');

//$title!=''$title<>''if($title!=''){//插入记录-去掉表前缀$result=Db::name('data')->insert(['title'=>$title,'data'=>$content,'time'=>time()]);//dump($result);

//return"恭喜那留言成功!";//只显示//return$this->error('恭喜你留言成功');//返回继续添加return$this->success('恭喜那留言成功!','bbs/show');//并跳转到表页}

BBS展示页字段处理完善

攻击等

{$data.name|md5}{$name|md5|strtoupper|substr=0,3}函数会按照从左到右的顺序依次调用。{:substr(strtoupper(md5($name)),0,3)}

{volistname="show"id="val"empty="empty"}{$i}{$val.id}{$val.title|mb_substr=0,10,'utf-8'}{$val.data|mb_substr=0,20,'utf-8'}{$val.time|date='y-m-dh:i',###}{volist}

$show=$db->where('id','>=','1')->order('id','desc')->paginate(10,88,['type'=>'bootstrap','var_page'=>'show']);//type默认var_page$show有关本页

BBS详细页的快速实现入门

{publicfunctionview(){echoinput('param.id');$id=input('id');if($id<>''){//查询数据-查询留言详细内容$list=Db::name('data')->where('id','=',$id)->select();dump($list);

//上个查询数据-去掉表前缀$up=Db::name('data')->where('id','>',$id)->order('id','desc')->limit(1)->value('id');dump($up);

//下个$next=Db::name('data')->where('id','<',$id)->order('id','desc')->limit(1)->value('id');//dump($next==0);dump($next);

$this->assign('up',$up);$this->assign('next',$next);$this->assign('list',$list);

//渲染模板输出return$this->fetch();}return"留言不存在";}}

上一页和下一页的快速实现入门

数据库删除可能不按顺序模板+-在传时判断下删除下一个一直没返空

condition条件

详细页快速入门实现思路上一页和下一页实现分析

tp5手册杂项目分页验证码

模板支持判断计算模板使用运算符内置-条件判断

数据库limit

下用到大上用最小//上个查询数据-去掉表前缀echo$id;$up=Db::name('data')->where('id','>',$id)->order('id','')->limit(1)->value('id');dump($up);

value('id');只获得id

if删除不点不连接

}}

BBS详细页界面与前端Bootstrap对接

前端不要能简单前端好上手详情页快速入门实现思路,核心代码编写上一页和下一页实现分析程序结合前端Bootstrap完善界面

tp5模板内置标签资源文件加载

差数据库一共多少条paginate(10,88)传到88$result=mysql_query("selectcount(*)asmaxfrom表名");$result=mysql_query("select*from表名");$num_rows=mysql_num_rows($result);{$db=db('data');//查询状态为1的用户数据并且每页显示10条数据可以paginate(10)paginate(10,88)上下paginate(10,true)$result=Db::query('selectcount(*)asmaxfromthink_data');$count=$result[0]['max'];$show=$db->where('id','>=','1')->order('id','desc')->paginate(10,$count,['type'=>'bootstrap','var_page'=>'show']);//type默认}

{$list.0.time|date="y-m-dh:i:s",###}

支付宝小程序--taobao....网页appios->对接支付宝支付接口开发详细步骤

合作伙伴身份(PID):2088432226420887开发者中心研发服务

先看看到时_>重新过20xx最新的支付教程到时过

显示页面验证手机定时按钮form提交过过核对用户输入和平台发的api短信收费过贵便短信平台百度搜很多收费api.chanyoo.cn

v1apialipay支付宝过都和微博等等差不多过sms

file_get_contents跨域

注意过得的值ajax错误保留页面内容编辑页面接口->彻底参数到其他接口->验证ajax地址form函数地址短信平台返回格式xml转换json数组等

验证码错误时缓存保存cookies...插入数据库短信返回成功时

严格电信短信规范模板

先过用再来系统重新{varevent=document.getElementById('btn');//console.log(event.value)event.addEventListener('click',function(){setTimeout(function(){varcount=60;if(count==0){event.removeAttribute('disabled');event.value="获取验证码";count=60;}else{event.setAttribute("disabled",true)event.value=`重新发送${count}s`;count--;}},1000)})}

入门课小总结tp5入门课小总结2017-10-16->2017-11-43周第50课你觉得自己入门了吗?感谢各位同学的鼓励/批评/包容/第1.2.3课你还记得吗?反正我都忘了教的啥了…

仅仅带你入门,路还要自己走.基础-官方手册…博客企业网站商城...博客-走起…

思路群过东西多复制道理要知道框架忘记看练

视频麦克风小直大

免费ThinkPHP5简易商城入门

TP5简易商城创建

综合应用-商城一个综合应用实战案例边学边用近距离实战

支付同理学过过看源码

网页原简单过代码原简单过

文档5-6tp到时系统老过

慕课-->到时

tp5url中隐藏public目录

vhost.int改路径为public/改了phpstudy探针不能用维持或者学过加域名同时改vhost.ini会过维持再短用tp5路由

域名/index/index/index=域名

tp5创建shop表调整各页面表名称一致

表think_data=think_shop同过页面简单过代码同过

调重主要不会的看过复习支付新版旧版靠自己网上查diy

tp5商城后台管理员模块创建

简单系统过看phpmyadmin访问不了复制到public下或者命令行其他工具

以前过现在简单g难打cms新难打jt最好都打练习复习y

cmeb新api看字段复old到时过现不

以前现在会过学过过挑重快

app/admin/controller/Index.php

多复习多练打以前不(需要重来看打)现在要简单难都要{

namespaceapp\admin\controller;

useapp\index\model\Data;usethink\Controller;

}}}

不全不系统g会学过g快

tp5商城后台头部导航条创建

后台管理模块创建创建模块设置后台布局

bootstrap不源码自带练复习

tp5自带view不前后分离*三段分离请求api操作或者直接tp5命令复用bootstrapdemo

从数据库中取出数据后进行反序列化后分析原因:英文数据中含有中文字符串,所以我们就可以想到编码的问题,serialize()函数对在不同编码下对中文的处理结果是不一样的。数据库有个列是数组序列化后存到数据库的,取出来得反序列化,

php想要把数组保存到数据库里,有两种序列化方式,分别是:

//php系统序列化

$b=serialize($a);//序列化数组$a,得到字符串$b,存到数据库$a=unserialize($b);//从数据库取出来,反序列化字符串$b,得到数组$a

//使用json序列化

$b=json_encode($a);//序列化数组$a,生成字符串$a=json_decode($b);//反序列化字符串$b,生成数组

tp5模板问题可能要全部加字符串编码

bootstrap组件内容

html调用imgsrc='__PUBLIC__/img/h.jpg'html直接_tom__

__static__tp自带位置再public/static/*

__root__许多自带tp自己添加config.phpview_replace_str

Tp5调用CSS和JS文件写法后台管理模块创建创建模块设置后台布局图片CSSjs文件的引入

loadcssjs__STATIC__

用include把包含文件引入包含文件引入包含文件调用{includefile="public/header"/}//包含头部模板header公用头部header底部footer

导入其他html

header简单过会过简单不用变量直接输出{includefile="index/footer"/}{includefile="../application/admin/view/index/footer.html"/}重复代码有空提取简单过自己部分不提取

htmljscss部分提取其他嵌套麻烦简单过以前不现在重过

商城后台嵌套一个模板包含文件引入包含文件调用{includefile="public/header"/}//包含头部模板header分离出-共用头部header底部footer模板嵌套

点击表单后台不是前台__root__===/

{$Think.server.script_name}/index/bbs/view/id/{$val.id}{$Think.server.script_name}/admin/index/view/id/{$val.id}__root__/admin/index/view/id/{$val.id}不行了不改域名...

商品发布的简单实现下证明本视频不行了不管qt浏览器服务器上传录不行了不行过自己是一过x

当模拟add()过

扩展简单实现编辑del

tp自带不明白apidel先ajax刷新location.reload()

a调到那js也可以

直接api简单都有

用tp模板fetch可以tp挑战

3过

ifame不行过

添加完成改完成todo颜色btn模态框..

dadantiaozhong

看暂时不用支付购买htmlkokapi暂时不ds试听进入=详情dsg看过...htmlokapiok都k对接就行了---先html半api

以前不现在要支付不能直接沙箱看不用过进入才dsg

都简单过全其他到时快zhajin

前端东西..

后端对接

tzwz简单靠自己...boot代码打练习抄打忘记gs..

靠自己x按

实现对应重要功能逻辑业务就行了大概...onload事件网页开始加载,BOM事件,事件主体是window对象

onready事件文档加载完毕,DOM事件,事件主体是document对象

jQuery的$(function),相当于onready事件

$(function(){})$(document).ready(function(){})

id一个jqjsfn参数htmleventdata-id自定义传值..fan小程序

师傅领入门修行靠个人深入..学...配套jq...apijqajax$.ajax({url:"demo_test.txt",success:function(result){$("#div1").html(result);}});$.get("demo_test.html",function(data,status){alert("Data:"+data+"nStatus:"+status);});验证码ddosxxs安全ds...

都打尽力还不行过dsh再来

商品删除模型删除方法调用

sjmf免但可以模拟器模拟还是麻烦好过没尽win在vmsj--docpafapp阅读...

不行了自网ipidservers其他课dsmf收费-->

实际搞定没看而已...

g行再...

删除商品前端模态框弹出后台模型删除方法实现

模型mvc架构他yongid我data-id自定义传值以前现在未来过...model.php学过过会过同理挑重过实现过..

内容同过...

bibli临时特殊其他laooldpanldpt163kebiblipanmoocjike51w3cichunqiu....dsold

p1364课商品的图片视频简单实现上传上传文件上传图片文件视频

PHP最大上传文件大小限制修改PHP默认的上传文件大小限制为2M,可以修改php.ini文件来增大上传大小。改成50M需修改如下:

upload_max_filesize=50Mpost_max_size=100Mmemory_limit=150m内存缓存

自动维持不改gds上传文件接口就是增加接口加多上传文件位置保存列表路径sql

tp5doc杂项-上传

php原生改form属性...tp5unknown

demogintdaygxczjg内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展。

ds重构重复提取现在直接

可以限制上传类型tpphp到时简单过下

同时改名字文件名字...ds{publicfunctionupload(){//上传文件接口//获取表单上传文件例如上传了001.jpg$vedio=request()->file('vedio');$image=request()->file('image');////移动到框架应用根目录/public/uploads/目录下if($vedio){$info=$vedio->move(ROOT_PATH.'public'.DS.'uploads');if($info){//成功上传后获取上传信息//输出jpgecho$info->getExtension()."
";//输出20160820/42a79759f284b767dfcb2a0197904287.jpgecho$info->getSaveName();//输出42a79759f284b767dfcb2a0197904287.jpgecho$info->getFilename();}else{//上传失败获取错误信息echo$vedio->getError();}}elseif($image){$info=$image->move(ROOT_PATH.'public'.DS.'uploads');if($info){//成功上传后获取上传信息//输出jpgecho$info->getExtension()."
";//输出20160820/42a79759f284b767dfcb2a0197904287.jpgecho$info->getSaveName();//输出42a79759f284b767dfcb2a0197904287.jpgecho$info->getFilename();}else{//上传失败获取错误信息echo$image->getError();}}

html不能限制类型可以大小服务器都可以...
多文件上传
{publicfunctionupload(){//获取表单上传文件$files=request()->file('image');foreach($filesas$file){//移动到框架应用根目录/public/uploads/目录下$info=$file->move(ROOT_PATH.'public'.DS.'uploads');if($info){//成功上传后获取上传信息//输出jpgecho$info->getExtension();//输出42a79759f284b767dfcb2a0197904287.jpgecho$info->getFilename();}else{//上传失败获取错误信息echo$file->getError();}}}}

上传验证$info=$file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->move(ROOT_PATH.'public'.DS.'uploads');验证参数说明size上传文件的最大字节ext文件后缀,多个用逗号分割或者数组type文件MIME类型,多个用逗号分割或者数组

指定上传文件的命名规则,使用rule方法$file=request()->file('image');//移动到服务器的上传目录并且使用md5规则$file->rule('md5')->move('/home/www/upload/');自定义命名规则,可以在rule方法中传入函数或者方法

你希望保留原文件名称$file->move('/home/www/upload/','');

默认情况下,会覆盖服务器上传目录下的同名文件,如果不希望覆盖,可以使用$file->move('/home/www/upload/',true,false);

gdsxbllbl

tp过dsxtphp原生xueguo都过xbl

P1465课修改php上传2M的限制

没提示大于空页面..php.ini改...tp5tpshop....lavel...

本地测试快....优化...tz

改会....服务器phptphtml限制...

P1566课上传功能嫩融合到自己表单里

整合上传功能在自己的表单里面multipart/form-data在使用包含文件上传控件的表单时,必须使用该值。

bqg随便顺便gprimarysecond

ys都要认真认识不快进..xgkb

挑重要..最后last3和自己...

过下....ds系统...全new....

一次自己扩展....都有....

吃透一个框架语言...其他容易上手...laravel...nui-appvue23wx7mothdaylaravel...olddsxbl

P1667课上传文件路径存入数据库

上传文件入库思路存入对应的上传文件路径

minrz都rzbkj

nvphpacmd

麻烦不mysqlpathnetmysql8startservicemysql8start...othersqlds

不netcliexe简单工具

存视频的url字段lesson...

altertablethink_dataaddlessonvarchar(255)defaultnull;

字符集合...随便一个父级tablessql

完整路径ds不全配套yxvideo==lesson维持...

一边jd过下otherds$lesson=$info->getSaveName();//保存sql路径可以字符串加完成tp变量补齐输出在补齐也可以尽量不客户端

$result=$user->data(['title'=>$title,'data'=>$content,'lesson'=>$lesson,'create_time'=>time()])->save();可以局部成员变量$lesson="";//预防上传失败插入sql异常

不*sql占资源大

P1768课前台展示播放上传的视频上传文件路径存入数据库思路存入对应的上传文件路径显示页面对应完善

前后加下...add...page...一个laods

view...h5video...

poster没视频失败没播放时显示代替图片

input参数request参数->file上传内容...

jd不记录

其他模板标签字段..随便个就行了会过mghg

qdview字段价格添加show也是..jdgxwcif显示考自己扩展...

cms输出一些参数设置....支付api需要参数id开发者信息...input...

以前以前用现在use..<--

P1869课支付宝支付demo接口配置演示前台支付对接第一步走通收款demo

sql字段显示jdgbn...改名而已过滤...保存多个等..2011-2015支付宝接口重新申请对接...同直接..接口沙箱...订单号...

新版多...加密...功能多过下沙箱不会企业没g

alipay

返回页面是return_url.php

人工配置参数...

还是7mothday好统一...---系统..不全部..

在线离线appiphone技术教ds

直接不行要企业账户沙箱测试..

{"2016101700711036",

//编码格式'charset'=>"UTF-8",

//签名方式'sign_type'=>"RSA2",

整合支付宝1.放到tp5extend目录2、修改文件和类名格式3..function.php里的方法会被自动加载4·支付宝接口文件分析复杂

返回地址apijack...

//请在汉里加上商户的业务逻姆程序代码/一请根据你的业予逻错来编写程序(以下代码仅作参考)一//获联安付宝的通知返回参效,可参考技术文档中页面跳转同步通知参数列表

系统支付宝带源码那些...现在麻烦过不行过下...代理中间返...分服务端客户端支付宝api

sms以前不需要简单过下以前过现过收费...过判断这笔行单是否在商户网站中已经做过处理//a果较有做过处理,根据订单号(out.trade,no)在商户网站的订单系统中章到该笔订单的详细,并执行商户的业务a序,/如果有做过处理,不执行商户的业务程序

//如要调试,请看alipay.notify.php页面的verifyReturn函数,

smsg

自动号等等到时...先简单连接沙箱和现实不同过下

//import('alipay/tom.php');//require('alipay/tom.php');

行了在记录回调结果跳过要返代理麻烦会....软件配置wwwsearch麻烦---g...回调通知参数验证....异常处理...$foo=new\first\second\Foo();或者先

usefirst\second\Foo;要命名空间

分析api导入...简单实现...g-

尽量不源码api简单改下原生不行....

今天剩下代理{"2016101700711036",

{

//loaderimportrequireLoader::import('alipay.config');$configobj=new\Config();$config=$configobj->getConfig();Loader::import('alipay.pagepay.service.AlipayTradeService');Loader::import('alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');

//构造参数$payRequestBuilder=newAlipayTradePagePayContentBuilder();$payRequestBuilder->setBody($context);$payRequestBuilder->setSubject($noname);$payRequestBuilder->setTotalAmount($price);$payRequestBuilder->setOutTradeNo($no);

$aop=newAlipayTradeService($config);$response=$aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);var_dump($response);}publicfunctionjack(){//反代理回调通知...沙箱模拟$alipay_config['partner']='';//收款支付宝账号,一般情况下收款账号就是签约账号$alipay_config['seller_email']='qq@qq.com';//安全检验码,以数字和字母组成的32位字符$alipay_config['key']='';//上面请在这里配置您的基本信息

//计算得出通知验证结果$alipayNotify=newAlipayNotify($alipay_config);$verify_result=$alipayNotify->verifyReturn();if($verify_result){//商户订单号$out_trade_no=$_GET['out_trade_no'];//支付宝交易号$trade_no=$_GET['trade_no'];//交易状志$trade_status=$_GET['trade_status'];if($_GET['trade_status']=='TRADE_FINISHED'||$_GET['trade_status']=='TRADE_SUCCESS'){

}

myemalikooname数字.我了解的内网穿透工具

每次启动ngrok都会分配一个新的外网域名,所以需要每次更换配置或者更换访问地址,不太方便。当然,ngrok也提供了解决方法,那就是付费,可以设置固定域名。卡慢国内的随便一个就这个麻烦以后ds域名主机dns都可以了...固定ip才可以先用...随便个...继续其他到时....

7ff16cd3.ngrok.io/thinkphp/public/index/bbs/show

关闭c-d关机就好了cdn浏览器win缓存dns解析快...第一次忙以后优化wx不能沙箱主要不能其他都不要看就不行支付宝可以模拟才继续...以前不..现在要this可能可以免费域名固定麻烦不稳定够用就会没那么便宜午餐够就好了....

P2071支付宝完成对应商品对应价格

加字段麻烦用主键代替简单过会过bqbxtg

lastipprimarykey

前台支付对接·第一步走通收款demo融合到tp5架构里(难点)完成对应商品对接

对接...基本...内外可以ds

融合第三方类方法等...验证码第三方类库等...

直接点击就可以购买暂时不用回调不设置不手机自动订单参考网上wx7月等等...库存量检测简单过下主次分明...

atarget=__blank新tag_parent父_self当前alipayapi参数写在里面地址sqlother支付宝

以前的api不是打的用新不打带不了源码看差没过下官网ghtml证明是官网apioldnew过下

postget

mydiytodo一个支付回调而已...ds...

可以不回调配套不下次回调俩个接口没好对了可以参考官网的只有官网也可以改不下就官网多有3

支付宝点击订单详请可以全部..原可以里面可能行了改自己好..

现在通知原可以那...alipay目录下不是tp5里面

改配置地址里面tp可能不行加载了难改进去其他原来定义一个接口俩个搬过下

通知才公网其他不用...最好post加密...暂时简单过下

钱大少不行了最少0.01

他那完这可以用就行了他returnurl方法同步跳转jact方法/异步通知地址

他也是复制..

在空间导入全部可用里面jdg

俩个改公网稳定

以前复杂看过有源码在看过现在简单过下

{publicfunctionalipayapi(){//require('alipay/lib/alipay_notify.class.php');//require('alipay/lib/alipay_core.function.php');//require('alipay/lib/alipay_md5.function.php');//require('alipay/lib/alipay.config.php');

//exit();//loaderimportrequireLoader::import('alipay.config');$configobj=new\Config();$config=$configobj->getConfig();Loader::import('alipay.pagepay.service.AlipayTradeService');Loader::import('alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

//商户订单号

$out_trade_no=$_POST['out_trade_no'];

//支付宝交易号

$trade_no=$_POST['trade_no'];

//交易状态$trade_status=$_POST['trade_status'];

if($_POST['trade_status']=='TRADE_FINISHED'){

//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_amount与通知时获取的total_fee为一致的//如果有做过处理,不执行商户的业务程序

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

//商户订单号$out_trade_no=htmlspecialchars($_GET['out_trade_no']);

//支付宝交易号$trade_no=htmlspecialchars($_GET['trade_no']);

echo"验证成功
支付宝交易号:".$trade_no;

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////}else{//验证失败echo"验证失败";}}}

俩和demo服务端客户端...

写测试到时smsds打pt不行了其他不同接口收费更最后打code源码复制了解..过不用直接过

zfb公网config本地公网异步同步ds

P2172课前台头部和尾部模板文件分离共用打diyg看不同...

前台显示头部...简单过下

会员功能到时前台分离过下同admin

showview...分里加可以不用下拉菜单bt学过jd过不属于

session下次...

麻烦不提取了控制器不路径就好新要过下其他不改改过有一个就好jdg

对接接口到时

{includefile="../application/index/view/bbs/header.html"/}

前端慢慢改简单过下侧边也来要改很多地方input下拉....

过下响应式...

要改太多...简单过下

其他前端前台慢慢来弄简单过下xy

P2273课Sessoin的使用入门

//指定当前作用域Session::prefix('think');//赋值think作用域Session::set('name','thinkphp','think');

//取值并删除Session::pull('name');//清除session(当前作用域)Session::clear();//清除think作用域Session::clear('think');

//设置session并且在下一次请求之前有效Session::flash('name','value');

//清除当前请求有效的sessionSession::flush();

助手函数//初始化sessionsession(['prefix'=>'module','type'=>'','auto_start'=>true,]);

//赋值(当前作用域)session('name','thinkphp');

weibo/delmy@mynm免费域名www.freenom.com腾讯dns自己搭服务器|vmhost云管理kooteam.tkcms二次--->down简历个人+技术58o俩天-><-循环java类集容器

一另存网页PSD文件二整合PS的图片113.111.212.4461一、分割切片二切片的类型(用户切片、非用户切片)

一根据颜色范围来切;二切片大小:把网页的切片切的越小越好;三切片区域无整性:保正完整的一部分在一个切片内,例如某区域的标题文字,以后修改时方便;四导出类型:颜色单一过渡少的,应该导出为GIF,颜色过渡比较多,颜色丰富的应该导出为JPG,有动画的部分应该导出为GIF动画.五保留源文件:即使页面作好了,也要保留带切片层的源文件,说不上哪天要改某一个部分,例如文字什么的,直接修改单独导出所用的切片就可以了.6.切片的图层显示与隐藏一背景图片的切片;\二不规则图片的切片要导出png把文字背景隐藏7.切片的编辑(大小、调整、删除、清除切片、保存切片)切片名称写英文alt标记关键字保存web所用格式

一三种切片的格式介绍png背景透明gif颜色单一jpeg颜色丰富二比较三范围优点

文档设置标记文本标记hn标题标记n1-6h1最大h6最小font字体设置标记封特font三个属性:size字体大小face字体b粗字体标记i斜字体标记sub文字下标字体标记sup文字上标字体标记tt打印机字体标记cite引用方式字体斜体em强调斜字体strong强调粗字体small小型字体标记嵌套比上小小到不能小了就不big大型字体标记u下划线字体标记

vr.当前目录..上级目录图像标记图像标记单标签使用方法:属性:src属性:图片路径/名称.格式可以是远程图片width/height/border:宽度/高度/边框宽度单位pxemcmmmalt:在图标上鼠标显示名称加载失败显示名搜索引擎靠这抓取图片

HTML5

子类改变.div.p{color:blue;}段落段落

Class定义:...

class定义是以"."开始.p{属性:属性值;属性1:属性值1}ID定义:...

ID定义是"#"开始#p{属性:属性值;属性1:属性值1}优先级问题:1.ID>Class>HTML2.同级选择里元素最近一个css样式最后一个注释/*#div.p{color:blue;}*/组合选择器(同时控制多个元素):h1,h2,p,.div,#p{color:red;font-size:13px;}选择器组合用","隔开伪元素选择器:a:link{color:blue;}正常链接样式a:hover{color:green;}鼠标放上a:active{color:yellow;}选择链接时a:visited{color:red}已经访问过常见属性1.颜色属性:color属性定义文本的颜色color:greencolor:#ff6600相同简单写color:#f60color:rgb(255,255,255)红(R)、绿(G)、蓝(B)每个的取值范围0~255color:rgba(255,255,255,0-1)红(R)、绿(G)、蓝(B)和Alpha[啊儿法]的(色彩空间)透明度0到1之间255,255,255白色0,0,0黑色

2.字体属性:font-size字体大小:font-size:13pxpx:设置一个固定的值%:父元素的百分比smaller:比父元素更小larger:比父元素更大inherit:继承父元素font-family定义字体:font-family:'微软雅黑',serif;烦魔里可以使用","隔开,确保当字体不存在时使用下一个,字体发英文名字font-weight字体加粗:normal(默认值)bold(粗)bolder(更粗)lighter(更细)100~900400=normal700=bold整百表示font-style字体样式:normal正常标准italic斜体oblique倾斜inherit继承font-variant小型大写字母显示文本normal标准small-caps大写字母显示文本inherit继承

3.背景属性:背景颜色background-color:red#f160rgba背景图片background-image:url(图片路径)|background-image:none;background-image:url(img/demo.jpg);背景重复background-repeat:repeat重复平铺默认repeat-x|repeat-y向x|y轴重复no-repeat不重复背景位置background-position:xy默认center横向(left,center,right)纵向(top,center,bottom)数值表示10px10px简写方式:background:背景颜色url(图像)重复属性位置x位置ybackground:redurl(img/img.jpg)no-repeattopcenter其他的选择器也是可以简写4文本属性:text-align:横向排列leftcenterrightline-height文本行高:%基于字体大小的百分比行高数值来设置固定值text-indent首行缩进:%父元素的百分比px固定值,默认0inherit继承letter-spacing字符间距:normal默认inherit继承lenght设置具体的数值(可以设置负数)word-spacing单词间距:标准间距normalpx固定值inherit继承direction文本方向:ltr从左到右默认rtl从右到左inherit继承.text-transform文本大小写:capitalize每个单词首字母大写开头uppercase全部大写字母lowercase全部小写字母inherit从父元素继承text-transform属性值

4.兼容问题及高效开发工具IE兼容测试工具与高效开发工具在body内测试1.兼容性测试工具IETesterMultibrowser2.常用浏览器FirefoxGooglechromeopera3.高效的开发工具轻量级:notepad++sbulimeTextnotepad.exe重量级:WebStormDreamweaver4.网页设计工具fireworksphotoshop5.判断IE的方法注意:条件注释只有在IE浏览器下才能执行,这样就达到了我们的效果!条件判断格式:不等于[if!IE8]除了ie8都可以显示小于[ifltIE5.5]如果ie浏览器版本小于5.5的显示大于[ifgtIE5]如果ie浏览器版本大于5的显示小于或者等于[iflteIE6]如果ie浏览器版本小于等于6的显示大于或者等于[ifgteIE7]如果ie浏览器版本大于等于7的显示大于和小于之间[if(gtIE6)&(ltIE7)]如果ie浏览器版本大于6小于7的显示或[if(IE6)|(IE7)]IE6或者IE7显示仅实战项目(从效果图到网页布局以及按需切图)div.hander按tab自动完成psctrl+r标尺

03.Web前端开发之HTML5+CSS3快速入门-----------------------1.课程简介掌握html5网页结构熟悉掌握常用的css3新增的样式属性独立完成常见html5网页

2.什么是HTML5首先了解HTMLHTML即超文本标记语言(HyperTextMarkuplanguage),这是一种语法简单、结构清晰的语解释型文档,他不同于其他的编程语言。HTML5就是HTML网页标记语言的第五次重大更新产品,在这个版本中,新功能不断推出,以帮助Web应用程序的作者,努力提高新元素互操作性。

HTML5他的产生,最简单的目标就是,用更简洁的HTML代码创建更多功能的网页程序!并且HTML5让网页结构变得更加的清楚明了,增加了更加语义化的结构标签,这样一个网页的结构就非常清晰,那个部位显示的什么内容,让人一目了然!

结构清晰的HTML5,在HTML5中增加了主体元素,比如新增的NAV标签,表示的就是导航的意思,而之间呢,就是用DIV并没有实际的意义!

兼容性:HTML5在老版本的浏览器上面也可以完美运行。实用性:HTML5抛弃了不切实际的功能,一切按照实用性的线路出发!3.认识新的网页结构1、新的网页结构

webstormctrl+/快速注释

区域有独立的内容demo

产品

产品种类列表

产品A

产品A的介绍

产品B

产品B的介绍

分段用section不用样式

案例二全局附属信息demo

主标题

子标题

2019-05-14

正文

xigua9.5f10-60+15+30-9

2、新增和废除元素的认识1、其他新增元素14.figure元素与figcaption元素1、新增的figure元素与figcaption元素figure元素是一种元素的组合,带有可选标题。figure元素用来表示页面上一块独立的内容,如果将他从网页上删除不给我们的网页造成影响。figcaption元素表示figure元素的标题,它属于figure元素,figcaption元素必须书写在figure元素内部,可以写在figure元素内的其他从属元素前面或后面。一个figure元素内最多只允许放置一个figcaption元素。音频视频表格插件demo

风景

15.details元素与summary元素2、新增的details元素与summary元素details元素是一种用于标识该元素内部的子元素可以被展开、收缩显示的元素。details元素具有一个布尔类型的open属性,当该值为true时,该元素内部的子元素应该被展开显示,当该属性值为false时,其内部的子元素应该被收缩起来不现实。该属性的默认值为false,当页面打开时其内部的子元素应该处于收缩状态。summary元素从属于details元素,用鼠标点击summary元素中的内容文字时,details元素中的其他所有从属元素将会展开或者收缩。如果details元素内没有summary元素,浏览器那你会提供默认的文字以供点击,例如“details”目前只有谷歌的Chrome浏览器支持!demo

show

open

------------------------------------MindjetMindManagerpro---------------------------------------------

17.progress元素4、新增的progress元素progress元素代表一个任务的完成进度,这个进度可以使不确定的,表示进度z正在进行,但不清楚这个还有多少工作量没有完成,也可以用0到某个最大数字(比如100)之间的s数字来表示准确的进度情况(比如百分比)该元素具有两个表示当前任务完成情路昂的属性,value属性表示已经完成了多少工作量,max属性表示总共有多少工作量。工作量的单位是随意的,不指定的。在设定属性点时候,value属性和max属性只能指定为有效的浮点数,value属性必须大于0,且小于或等于max的属性,max的属性必须大于0。

完成进度:

18.meter元素5、新增的meter元素meter元素表示规定范围内的数量值。meter元素有6个属性!1、value属性:在元素中特地地表示出来的实际值。该属性值默认为0,可以为该属性制定一个浮点小数值。2、min属性:指定规定范围时允许实用的最小值,默认0,在设定该属性时所设定的值不能小于0。3、max属性:指定规定的范围时允许使用的最大值,如果设定时该属性值小于min的值,那么把min属性的值视为最大值。max属性的默认值1。4、low属性:规定范围的下限值,必须小于或者等于high的值。5、high属性:规定范围的上限值。如果该属性值小于low属性的值,那么把low属性的值视为high属性的值,同样如果该属性的值大于max属性的值,那么把max属性的值视为high的值。6、optimum属性:最佳值属性值必须在min属性值与max属性值之间,可以大于high属性值。lowhighoptimum结合控制颜色绿黄红

Disk:*/119

19.html5废除的元素2、废除元素searchhtml5废除的元素

1、能使用CSS代替的元素:basefont、big、center、font、s、strike、tt、u2、不在使用frame框架对于frameset元素、frame元素与noframes元素,由于frame框架对页面可用性存在负面影响,在html5里面已经不支持frame框架,只支持iframe框架,同时废除以上这三个元素。3、只有部分浏览器支持的元素对于applet元素、bgsound、blink、marquee元素,由于只有部分浏览器支持这些元素,特别是bgsound元素以及marquee元素,只被IE浏览器支持,所以在HTML5里面被废除!而applet元素可以由embed元素或者object元素代替,bgsound元素由audio元素代替,marquee可以使用javascript来代替!4、其他被废除的元素A、废除rb元素,使用ruby元素代替B、废除acronym元素,使用abbr元素代替C、废除dir元素,使用ul元素代替D、废除inindex元素,使用form元素与input元素相结合的方式代替E、废除listing元素,使用pre元素代替F、废除xmp元素,使用code元素代替G、废除nextid元素,使用GUIDS代替H、废除plaintext元素,使用“text/plian”MIME类型代替

demopspan{font-size:19px;}

>大

21.HTML5的大纲(下)3、Html5大纲2、HTML5大纲下大纲的编排规则关于HTML的大纲编排,我们可以划分为“显式编排”和“隐式编排”两种方式。

1、显式编排显式编排是指明确使用section元素进行分块来创建网页文档,每个内容区块内使用标题(h1~h6)

2、隐式编排所谓的隐式编排,就是我们不使用section元素进行明确的区块划分,而是根据我们写的(h1-h6、hgroup等)元素进行自动创建区块,因为HTML5的分析器可以根据不同级别的标题判断出对应的内容区块。3、标题分级不同的标题有不同的级别,在(h1-h6)中h1的级别最高,而h6的级别最低。所以在隐式编排的情况下就会按照以下规则生成!1)、如果出现新的标题比上一个标题级别低,那么将生成下级内容区块!2)、如果新出现的标题比上面出现的一个标题级别高,或者两者级别相同,那么就生成新的内容区块!

demo

隐式编排

隐式编排

子目录A

子目录

子目录B

子目录

子子目录A

子子目录

子子目录B

子子目录

隐式编排方法

隐式编排方法

子隐式编排方法

子隐式编排方法

23.重新定义后的dl元素3、加强版的ol与dl2、重新定义含义的dl元素dl元素在HTML4中:dl元素在HTML4中,是一个专门用来定义术语的列表。dl元素在HTML5中:dl元素在HTML5中,把dl元素进行了重定义。每一项包含一条或者多条带名字的dt元素,用来表示术语,dt元素后面紧跟一个或者多个dd元素,用来表示定义。重定义后的dl列表包含多个带名字的列表项。demo

介绍

HTML5+CSS3

内容

24.canvas元素创建画布3、初识CANVAS1、简单了解canvas什么是canvsa?canvas是在html5中新增的一个重要元素,专门用来绘制图形。1、创建一个canvas画布画布的创建方法:指定id、width(画布宽度)、height(画布高度)。例如:上面这个实例的意思就是,创建一个画布,长度为500,高度为350.2、引入绘画脚本引入脚本的方法:比如:上面这个实例的意思就是:引入一个名为canvas的JS脚本,JS脚本的语言编码是utf-83、使用draw函数进行绘画在body的属性里面,使用onload="draw('canvas');"语句。调用脚本文件中的draw函数进行图形绘画。

demo

demobody{margin:0;padding:0;}js区别大小写最后可以不用;canvas.jsfunctiondraw(id){varcanvas=document.getElementById(id);varcontext=canvas.getContext('2d');context.fillStyle="#000";context.strokeStyle="#f60";context.lineWidth=5;context.fillRect(0,0,400,300);context.strokeRect(30,50,200,200);context.strokeRect(60,100,200,200);}

26.canvas绘制圆形3、绘制一个圆形1、开始创建路径使用图形上下文对象的beginPath方法。context.beginPath();2、创建图形路径创建圆形路径时,需要使用图形上下文对象的arc方法。context.arc(x,y,radius,starAngle,endAngle,anticlockwise)布尔类型truefalseanticlockwisex是绘制圆形的起点横坐标,y是绘制圆形起点的纵坐标,radius是圆形的半径,starAngle是开始的角度,endAngle是结束的角度,anticlockwise是否按顺时针方向绘制。绘制半径与圆弧时指定参数为开始弧度与结束弧度,如果你喜欢使用角度,可以使用以下这个方法,把角度换成弧度。varradius=degrees*Math.PI/180这个里面的Math.PI表示的角度是180度,Math.PI*2的角度是360度。3、创建完成关闭路径使用图形上下文对象的closePath方法将路径关闭。context.closepath();4、设置绘制样式然后调用绘制方法进行绘制context.fillStyle='rgba(255,0,0,0.25)';context.fill();

demobody{margin:0;padding:0;}js注释是//functiondraw(id){varcanvas=document.getElementById(id);varcontext=canvas.getContext('2d');context.fillStyle="#f1f2f3";context.fillRect=(0,0,400,400);for(vari=0;i<10;i++){context.beginPath();context.arc(i*25,i*25,i*10,0,Math.PI*2,true);context.closePath();context.fillStyle="rgba(255,0,0,0.25)";context.fill();context.strokeStyle="red";context.stroke();}}context的beginPath和closePath没有就会重新在原来画开始rgba透明度叠加到不透明

27.canvas绘制文字4、绘制文字课后目标绘制字体时可以使用fillText方法或者strokeText方法。fillText方法用填充的方式来绘制字符串;context.fillText(text,x,y,[maxwidth]);

strokeText方法用轮廓的方式来绘制字符串;context.strokeText(text,x,y,[maxwidth]);

第一个参数text表示要绘制的文字,第二个参数X表示要绘制的文字的起点横坐标,第三个参数Y表示要绘制的文字的起点纵坐标,第4个参数maxwidth为可选参数,表示显示文字的时候最大的宽度,可以防止文字溢出。maxwidth画布大小.1、设置文字字体context.font="font-weightfont-sizefont-family";

context.font有三个参数,第一个参数font-weight值描述normal默认值.定义标准的字符bold定义粗体字符bolder定义更粗的字符lighter定义更细的字符100-900整百定义由粗到细的字符400等于normal而700等于bold

第二个参数font-size规定文本的字体尺寸px

第三个参数font-family规定文本的字体系列font-family可以的值是'ariSDal','arial','宋体','微软雅黑'...等等任何字体。

2、设置文字垂直对齐方式context.textBaseline='alphabetic';属性值可以是top(顶部对齐)、hanging(悬挂)、middle(中间对齐)、、bottom(底部对齐)、alphabetic是默认值。top顶部下点hanging刚好顶部middle中间显示一半bottom顶部之上alphabetic顶部上和五线谱一样3、设置文字水平对齐方式conText.textAlign="start"属性值可以设置为:start、end、left、right、center。左边:endright中间:center右边:startleft

demobody{margin:0;padding:0;}

functiondraw(id){varcanvas=document.getElementById(id);varcontext=canvas.getContext('2d');context.fillStyle='green';context.fillRect(0,0,800,300);context.fillStyle='#fff';context.strokeStyle='#fff';context.font="bold40px'微软雅黑','宋体'";context.textBaseline='hanging';//context.textAlign='start';context.fillText('ThisisaText',0,0);context.fillText('787646564545456ThisisaText4641111111111111881111111',0,210,800);//context.strokeText('ThisisaText',0,40);}

28.canvas保存文件5、保存文件很多时候绘制完成的图片需要保存,那么我们就可以使用到CanvasAPI来完成这最后一步!CanvasAPI使用toDataURL方法把绘画的状态输出到一个dataURL中然后重新装载,然后我们就可以把重新装载后的文件直接保存。

CanvasAPI保存文件的原理实际上就是把我们绘画的状态动态输出到一个dataURL地址所指向的数据中的过程。

什么是dataURLdataURL实际上就是base64位编码的URL,主要用于小型的,可以在网页中直接嵌入,而不需要从外部嵌入数据,比如img元素里面的图像文件。

dataURL的格式“data:image/jpeg;base64,/9j/4...”

toDataURL的使用方法canvas.toDataURL(type);这个方法使用一个参数type,表述输出数据的MIME类型。什么是MIME类型:jpgimage/jpegpngimage/pngdemobody{margin:0;padding:0;}

functiondraw(id){varcanvas=document.getElementById(id);varcontext=canvas.getContext('2d');context.fillStyle="green";context.fillRect(0,0,300,300);window.location=canvas.toDataURL('image/jpeg');}

29.canvas绘制动画6、canvas小示例在canvas画布中制作动画相对来说很简单,实际上就是不断变化坐标、擦除、重绘、的过程。

1)、通过不断的变换X和Y的坐标来实现动画效果。2)、在该函数中先用clearRect方法将画布整体或者是局部擦除。

擦除图像clearRect方法:context.fillRect(x,y,width,height);x是指我们起点的横坐标,y是指我们起点的纵坐标,width是指擦子的长度,height是指擦子的高度。

/***/demobody{margin:0;padding:0;}

js{varcontext;varwidth,height;vari;functiondraw(id){varcanvas=document.getElementById(id);context=canvas.getContext('2d');width=canvas.width;height=canvas.height;setInterval(painting,10);i=0;}functionpainting(){//context.fillStyle="green";//context.fillRect(i,i,10,10);//context.fillRect(i,0,10,10);//context.fillRect(400-i,400-i,10,10);//context.fillRect(0,400-i,10,10);context.fillStyle="green";context.fillRect(0,0,width,height);context.clearRect(10,10,width,height);context.fillStyle="green";context.fillRect(i,20,10,10);i++;}}

30.WebStorage本地储存4、本地储存1、WebStorsge在HTML5中,除了CANVAS元素,另外一个新增的非常重要功能就是可以在本地客户端储存数据的WebStorage功能。在HTML4我们是使用的cookies在客户端保存用户名等等一些简单的用户信息。cookies的缺点:1)、大小限制在4KB;2)、带宽浪费;3)、难以操作;

为了解决这样的一些问题,在HTML5中重新提供了在客户端保存数据的功能,他就是我们的“WebStorage”。

这个小章节我们来简单了解,sessionStorage和localStorage之间的区别,掌握两者的基本用法。

1、sessionStorage临时保存就是把数据保存在session对象之中。session就是在打开网站到关闭网站之间要求进行保存的数据。

sessionStorage临时保存的用法:

sessionStorage.setItem('key','value');//或者是sessionStorage.key='value';

临时数据读取的方法:变量=sessionStorage.getItem('key')//或者是sessionStorage.key;

2、localStorage永久保存就是将数据保存在客户端本地的硬件设备至上面,如果浏览器被关闭,这个数据不会丢失,下次打开可以继续使用。这个功能就是我们的localStorage永久保存功能。localStorage永久保存数据的方法:localStorage.setItem('key','value');//或者localstorage.key;

读取的方法:变量=localStorage.getItem('key');//或者变量=localStorage.key;demobody{margin:0;padding:0;}

WebStorage本地储存

js{functionsaveStorage(id){vartarget=document.getElementById(id);varstr=target.value;sessionStorage.setItem("mess",str);}functionloadStorage(id){vartarget=document.getElementById(id);varmsg=sessionStorage.getItem("mess");target.innerHTML=msg;}}

js{functionsaveStorage(id){vartarget=document.getElementById(id);varstr=target.value;localStorage.setItem("mess",str);}functionloadStorage(id){vartarget=document.getElementById(id);varmsg=localStorage.getItem("mess");target.innerHTML=msg;}}target.innerHTML=msg;html固语输出

审查元素performmance看看

31.简单的网页留言板4、本地储存2、实战简单的访客留言板

demobody{margin:0;padding:0;}

简单的留言板



js{functionsaveStorage(id){vardata=document.getElementById(id).value;vartime=newDate().getTime();localStorage.setItem(time,data);alert("数据已经被保存!");loadStorage('msg');}functionloadStorage(id){varreselt='';for(vari=0;i'+'这是第'+i+'条数据'+value+''+datestr+'';}reselt+='';vartarget=document.getElementById(id);target.innerHTML=reselt;}functionclearStorage(id){localStorage.clear();alert("数据清空");loadStorage('msg');}}

32.video元素与audio元素5、影音多媒体video元素与audio元素v丢唉丢1、video元素与audio元素的基础知识video元素--在HTML5中专门用来播放网络上的视频或者电影。audio元素--在HTML5中专门用来播放网络上的音频。使用video和audio元素进行播放时就不在需要使用其他的插件了,只要我们的浏览器支持HTML5就可以了!

浏览器的支持:Safari3以上、Firefox4以上、0pera10以上、chrome3.0以上版本都对audio元素和video元素支持!

使用方法audio元素只需要给他指定一个src属性:对于不支持的浏览器我们可以在这对元素之间加入提示语句来代替您的浏览器不支持Audio元素

video元素要设定好长宽和src属性就可以了:同样对于不支持video的浏览器可以在中间加入替换文字:您的浏览器不支持video元素

source元素指定多个播放格式与编码:source元素可以为同一个媒体数据指定多个播放格式与编码方式,以确保浏览器可以从中选择一种自己支持的播放格式进行播放。选择顺序自上而下,直到选择到所支持的格式为止。使用方法:不加type也可以但是会下载一点来判断什么格式播放最好加占带宽各种设备对编码格式的支持情况:webm(.webm)格式的视频火狐4.0+、chrome6.0+、opera10.6+mp4(.m4v)格式的视频IE9.0+、Safari3.1+、iso5.0、Android4.0+ogg(.ogv)格式的视频火狐3.5+、chrome3.0+、opera10.5+mp4(.mp4)格式的视频IE9.0+、Safari3.1+、iso3.0、Android2.3+

不支持


不支持

33.video元素与audio元素的常用属性5、影音多媒体video元素与audio元素2.viedo与audio的常用属性audio元素和video元素的常用属性

src属性:在这个属性里面指定媒体数据的URL地址。

controls属性:指定是否为视频或者音频数据添加浏览器自带的播放控制条,控制条中有播放按钮、暂停等按钮。使用方法:

width和height属性(video独有):指定视频的宽度与高度。使用方法:

autoplay属性:autoplay="autoplay"单属性这个属性指定是否当我们网页加载完成之后就开始自动播放。

preload属性:这个属性指定是否对数据进行预加载,如果是的话,浏览器会将视频数据或者音频数据进行缓冲,这样做可以加快播放的速度。preload属性的三个值:none表示不进行预加载。metadata表示只预加载媒体的元数据。auto(默认值)表示预加载全部的视频或者音频。使用方法:

poster属性(video独有):当视频不可以播放的时候,使用poster元素向用户展示一张图片代替视频。使用方法:

loop属性:指定是否循环播放视频或者音频数据。使用方法:

error属性:读取过程中一旦发生错误,返回一个MediaError对象,这个对象的code返回对应的错误状态,默认情况下video和audio的error属性都是null。4种错误状态,返回一个数字值,它表示音频/视频的错误状态:1=MEDIA_ERR_ABORTED-取回过程被用户中止2=MEDIA_ERR_NETWORK-当下载时发生错误3=MEDIA_ERR_DECODE-当解码时发生错误4=MEDIA_ERR_SRC_NOT_SUPPORTED-媒体不可用或者不支持音频/视频读取错误状态示例varvideo=document.getElementById('video');video.addEventListener("error",function(){varerror=video.error;switch(error.code){case1:alert('取回过程被用户中止。');break;case2:alert('当下载时发生错误。');break;case3:alert('当解码时发生错误。');break;case4:alert('媒体不可用或者不支持音频/视频。');break;}},false);

networkState属性:networkState属性返回音频/视频的当前网络状态(activity)

3、video与audio的4种方法video元素和audio元素的4种方法

play方法:使用play方法来播放媒体,自动将元素的paused属性的值变成false。

pause方法:使用pause方法来暂停播放,自动将元素的paused属性的值变成true。

load方法:使用load方法来重新载入媒体进行播放,自动将元素的playbackRate属性的值变成defaultPlaybackRate属性的值,自动把error的值变成null。

clearData方法可以用于清除DataTransfer对象中的数据。

3、拖放的时的效果设置拖放时的视觉效果dropEffect属性与effectAllowed属性结合起来可以设定拖放时的视觉效果。effectAllowed属性表示一个元素被拖放时所允许的视觉效果,一般在ondragstart事件中设定,他的值如下:属性值说明copy允许被拖动的元素被复制到项目中move允许将被拖动元素移动到被拖动的目标元素中link通过拖放操作,被拖动的元素会连接到拖到的目标元素上copylink被拖动元素被复制或链接到拖动的目标元素中,根据拖动的目标元素来决定执行复制操作还是链接操作copyMove被拖动元素复制或移动到拖到的目标元素中,根据被拖动的目标元素来决定复制操作还是移动操作linkmove被拖动元素被连接或移动到拖动的目标元素中,根据拖动的目标元素来决定执行链接操作还是移动操作all允许执行所有拖动操作none不允许执行任何拖动操作uninyialize不指定effectAllowed属性值。这是将执行浏览器中默认允许的拖动操作,但是这个操作不能通过effectAllowed属性值来获取

dropEffect属性表示实际拖放时的视觉效果,一般在ondragover事件中指定,允许的值none、copy、link、move。有源代码照打少记录有文档图片会不重要大反有备份del

ondragstart开始拖动Datatransferdata纯色佛

35.CSS3简介第三讲、CSS简介1、CSS3介绍什么是CSS3?CSS3是CSS技术的升级版本,CSS即层叠样式表(CascadingStyleSheet)。在网页制作时采用层叠样式表技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制。只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和格式。

2、css3可以做什么CSS3是CSS技术的升级版本,CSS3语言开发是朝着模块化发展的。以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多新的模块也被加入进来。这些模块包括:盒子模型文字特效边框圆角盒阴影旋转渐变......36.CSS3新增的属性选择器第四讲:超级选择器

什么是选择器:使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器。选择器是CSS3中一个重要的内容,使用CSS选择器可以大幅度提高开发人员的编写或者修改页面样式的时候的工作效率。每一条css样式定义由两部分组成,形式如下:选择器{样式}在{}之前的部分就是“选择器”。“选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素。课后目标:掌握CSS3中使用的选择器的基本概念,知道什么是选择器以及为什么需要使用选择器。1、属性选择器CSS3中的属性选择器:在CSS中追加了三个属性选择器:[att*=val]、[att^=val]和[att$=val]

[att*=val]属性选择器如果元素用att表示的属性的值中包含用val指定的字符,那么该元素使用这个样式。[att^=val]属性选择器如果用att表示的属性的属性值的开头字符为用val指定的字符的话,那么该元素使用这个值。

[att$=val]属性选择器如果元素用att表示的属性的属性值的结尾字符为用val指定的字符,那么该元素使用这个样式。

小案例--灵活使用属性选择器:[id$=\-1]{加\数字前面有-连接符_可以显示也可以加}

学了不重要备份del

37.结构性伪类选择器上38.结构性伪类选择器下第四讲:超级选择器2、结构性伪类选择器

伪类选择器以及伪元素:

1、类选择器在css中可以使用类选择器把相同的元素定义成不同的样式。比如:p.left{text-align:left}p.rigth{text-align:right}2、伪类选择器类选择器和伪类选择器的区别在于,类选择器我们可以随意起名,而伪类选择器是CSS中已经定义好的选择器,不可以随意起名。最常见的伪类选择器a:link{color:#ff6600}/*未被访问的链接*/a:visited{color:#87b291}/*已被访问的链接*/a:hover{color:#6535b2}/*鼠标指针移动到链接上*/a:active{color:#55b28e}/*正在被点击的链接*/

3、伪元素选择器伪元素选择器,针对于CSS中已经定义好的伪元素使用的选择器。使用方法:选择器:伪元素{属性:值}与类配合使用选择器.类名:伪元素{属性:值}

4、在CSS中,主要有四个伪元素选择器。

1)、first-line伪元素选择器first-line伪元素选择器用于向某个元素中的第一行文字使用样式。

2)、first-letter伪元素选择器first-letter伪元素选择器用于向某个元素中的文字的首字母(欧美文字)或第一个字(中文或者是日文等汉字)使用样式。

3)、before伪元素选择器before伪元素选择器用于在某个元素之前插入一些内容。

4)、after伪元素选择器after伪元素选择器用于在某个元素之后插入内容。

5、结构性伪类选择器root、not、empty和target1)、root选择器root选择器将样式绑定到页面的根元素中。2)、not选择器想对某个结构元素使用样式,但是想排除这个结构元素下面的子结构元素,让它不使用这个样式时,我们就可以使用not选择器。3)、empty选择器empty选择器指定当元素中内容为空白时使用的样式。4)、target选择器target选择器对页面中某个target元素指定样式,该样式只在用户点击了页面中的超链接,并且跳转到target元素后起作用。

6、选择器first-child、last-child、nth-child和nth-last-child1)、first-child选择器first-child单独指定第一个子元素的的样式。2)、last-child选择器last-child单独指定最后一个子元素的的样式。3)、nth-child选择器nth-child(n)选择器匹配正数下来第N个子元素nth-child(odd)选择器匹配正数下来第奇数个子元素nth-child(even)选择器匹配正数下来第偶数个子元素4)、nht-last-child选择器nth-last-child(n)选择器匹配倒数数下来第N个子元素nth-last-child(odd)选择器匹配倒数数下来第奇数个子元素nth-last-child(even)选择器匹配倒数下来第偶数个子元素

7、选择器nth-of-type和nth-last-of-type

兼容性:nth-of-type和nth-last-of-type都是CSS3开始提供需要在IE8以上的浏览器才会被支持,Chrome浏览器、Firefox浏览器、Opera浏览器、Safari浏览器都支持!

8、循环使用样式nth-child(An+B)A表示每次循环中共包括几种样式,B表示指定的样式在循环中所处的位置。

9、only-child选择器only-child选择器,只对唯一的子元素起作用。

:root

demoli:first-child{background:#f50}li:last-child{background:red}/*li:nth-child(3){background:green}li:nth-child(odd){background:blue}li:nth-child(even){background:yellow}*/li:nth-last-child(2){background:blue}li:nth-last-child(odd){background:green}li:nth-last-child(even){background:#f60}

选择器first-child,last-child,nth-child,nth-last-child-child

  • 第一项目
  • 第二项目
  • 第三项目
  • 第四项目
  • 第五项目

An+BA循环样式次数/2nB循环位置demoli:nth-child(2n+1){background:green}li:nth-child(2n+2){background:red}li:only-child{background:yellow}

  • 第一项目
  • 第一项目
  • 第二项目
  • 第三项目
  • 第四项目
  • 第五项目
  • 第六项目
  • 第七项目
  • 第八项目

child吃aid

3940.UI元素状态伪类选择器上第四讲:超级选择器3、UI元素状态伪类选择器

UI元素状态伪类选择器

什么是UI选择器?UI选择器的特征就是指定的样式只有当元素处于某种状态下时,才起作用,在默认状态下不起作用!E:hover支持firefox、safari、Opera、ie8、chromeE:active支持firefox、safari、Opera、chrome不支持ie8E:focus支持firefox、safari、Opera、ie8、chromeE:enabled支持firefox、safari、Opera、chrome不支持ie8E:disabled支持firefox、safari、Opera、chrome不支持ie8E:read-only支持firefox、Opera不支持ie8、safari、chromeE:read-write支持firefox、Opera不支持ie8、safari、chromeE:checked支持firefox、safari、Opera、chrome不支持ie8E::selection支持firefox、safari、Opera、chrome不支持ie8E:default只支持firefoxE:indeterminate只支持chromeE:invalid支持firefox、safari、Opera、chrome不支持ie8E:valid支持firefox、safari、Opera、chrome不支持ie8E:required支持firefox、safari、Opera、chrome不支持ie8E:optional支持firefox、safari、Opera、chrome不支持ie8E:in-range支持firefox、safari、Opera、chrome不支持ie8E:out-of-rang支持firefox、safari、Opera、chrome不支持ie8

1、选择器E:hover、E:active和E:focus1)、E:hover选择器被用来指定当鼠标指针移动到元素上时元素所使用的样式使用方法:*元素>:hover{CSS样式}我们可以在“*元素>”中添加元素的type属性。例:input[type="text"]:hover{CSS样式}

2)、E:active选择器被用来指定元素被激活时使用的样式3)、E:focus选择器被用来指定元素获得光标聚焦点使用的样式,主要是在文本框控件获得聚焦点并进行文字输入时使用。4)、小案例:结合上诉实现以下效果,当鼠标移动上去是文本框变成绿色,当鼠标点击时(点击并未谈起)文本框处于蓝色,当处于可输入状态时文本框变成橙色。

2、E:enabled伪类选择器与E:disabled伪类选择器1)、E:enabled选择器被用来指定当元素处于可用状态时的样式。2)、E:disabled选择器被用来指定当元素处于不可用状态时的样式。

3)、小案例:结合上诉实现以下效果,文本框可用时背景颜色绿色,不可用时背景变成浅灰色。3、E:read-only伪类选择器与E:read-write伪类选择器1)、E:read-only选择器被用来指定当元素处于只读状态时的样式。2)、E:read-write选择器被用来指定当元素处于非只读状态时的样式。3)、小案例:结合上诉实现以下效果,文本框可用时输入文字变成红色,不可用时,设置里面的背景为黑色,文字为绿色。

4、伪类选择器E:checked、E:default和indeterminate1)、E:cehcked伪类选择器用来指定当表单中的radio单选框或者是checkbox复选框处于选取状态时的样式。2)、E:default选择器用来指定当页面打开时默认处于选取状态的单选框或复选框的控件的样式。3)、E:indeterminate选择器用来指定当页面打开时,一组单选框中没有任何一个单选框被设定为选中状态时,整组单选框的样式。4)、小案例:A、模拟一个发布房产信息的选框控件,当选择以后,会给他一个2px实线绿色的边框!效果:B、实现一个默认选择中的控件,默认给他一个2px实线绿色的边框!效果:当他去掉勾以后还会有样式C、实现一个在默认打开都没有选中时,给他们一个2px实线绿色的边框!效果:

5、伪类选择器E::selection1)、E:selection伪类选择器用来指定当元素处于选中状态时的样式。2)、小案例:选择网页中p段落中的文字和文本框中的文字,改变他的背景颜色为绿色!效果:选择网页中p段落中的文字选择文本框中的文字

6、E:invalid伪类选择器与E:valid伪类选择器1)、E:invalid伪类选择器用来指定,当元素内容不能通过HTML5通过使用的元素的诸如requirde等属性所指定的检查或元素内容不符合元素规定的格式时的样式。2)、E:valid伪类选择器用来指定,当元素内容能通过HTML5通过使用的元素的诸如requirde等属性所指定的检查或元素内容符合元素规定的格式时的样式。3)、小案例:通过Email属性的表单判断输入是否正确,正确输入的内容为绿色,输入错误就是红色!效果:错误

正确

7、E:required伪类选择器与E:optional伪类选择器1)、E:required伪类选择器用来指定允许使用required属性,而且已经指定了required属性的input元素、select元素以及textarea元素的样式。2)、E:optional伪类选择器用来指定允许使用required属性,而且未指定了required属性的input元素、select元素以及textarea元素的样式。3)、小案例:姓名必填表单背景红色,年龄可选填表单背景绿色效果:

8、E:in-range伪类选择器与E:out-of-range伪类选择器1)、E:in-range伪类选择器用来指定当元素的有效值被限定在一段范围之内,且实际的输入值在该范围之内时的样式。2)、E:out-of-range伪类选择器用来指定当元素的有效值被限定在一段范围之内,但实际输入值在超过时使用的样式。3)、小案例:0-100以内的数字,小于0或超过100字体变成红色,否则绿色。效果:

100时:1000时:

demo::selection{background:green;color:#fff;}input[type="text"]::selection{background:#f60;color:#fff;}input[type="email"]:invalid{color:red}input[type="email"]:valid{color:green}input[type="text"]:required{background:red;color:#fff}input[type="text"]:optional{background:green;color:blue}input[type="number"]:in-range{color:green}input[type="number"]:out-of-range{color:red}

伪类选择器E::selection:invalid:valid:required:optional:in-range:out-of-range

lfjdlfkjdjfjdkfkdjddddddddddddddkkkkkkkkkkkkkkkkkkkkkkkk

name:
age:

4、通用兄弟元素选择器通用兄弟元素选择器他用来指定位于同一个父元素之中的某个元素之后的所有其他某个种类的兄弟元素所使用的样式。

使用方法:<子元素>~<之元素之后的同级兄弟元素>{CSS样式}

demospan~p{background:green}

父元素之中元素之后

分级基金

分级基金

分级基金

div同级元素
div同级元素

分级基金1

分级基金

分级基金

分级基金

分级基金

分级基金

分级基金1

分级基金

41.使用选择器在页面中插入内容第五讲:使用选择器在页面中插入内容

在前面的课程中我们讲过了如何使用before伪元素和after伪元素在页面中的元素前或者后加入内容,而插入的内容是以content属性来定义的。before伪元素和after伪元素在CSS2.0的时候就已经被添加,从CSS2到CSS3一直都在对这两个选择器进行改良和扩展,从而使得我们的before伪元素和after伪元素的功能越来越强大。

课后目标:能够熟练的使用before伪元素和after伪元素在页面中插入文字、图像、项目编号等等。1、插入文字1、使用选择器插入内容在CSS2中,使用before选择器在元素前面插入内容,使用after在元素后面插入内容,在选择器content属性中定义要插入的内容。

例如对H2使用before选择器在H2的前面插入文字“Title”。h2:before{content:"Title";}

并且我们还可以给他定义样式,进行美化操作。比如我们给“Title”的文字设置为白色,加上绿色的背景,内边距上下1像素左右5像素,外边距右边5像素,当然还可以设置他的字体等等。

1-2、排除一些不需要插入内容的元素使用content属性的追加一个none属性值。比如:h2.nocontent:before{content:none;}

2、插入图片2、插入图片文件使用before或者after除了可以在元素前后插入文字之外还可以插入图片。在插入图片是需要使用URL指定图片的路径,比如在标题前插入一张图片!

比如:h2:before{content:url(1.gif);}

2、插入图片文件的好处节省开发人员的工作量,比如可以通过类的方式来进行不同标题图片的追加!比如我们给标题定义一个“hot”“digest”分别来调用一张站的图标个顶的小图标!h2.hot:before{content:url(hot.gif);}h2.digest:before{content:url(digest.gif);}这是标题测试这是标题测试这是标题测试

这是标题测试

这是标题测试

3、插入项目编号1、在多个标题前加上连续编号在content属性中使用counter属性来正对对个项目追加连续的编号。使用方法:

元素:before{content:counter(计数器);}

使用计数器来计算编号,计数器可以任意命名。除了使用计数器,还需要在元素的样式中追加对元素的(counter-increment)属性的指定为content属性值中所指定的计数器名称。

元素{counter-increment:content属性值中所指定的计数器名称}

2、在项目编号中追加文字h1:berore{content:'第'counter(content属性值中所指定的计数器名称)'章';}变成另一种效果!“第一章、第二章...”

3、指定编号的样式比如给他在编号后面带一个“.”文字,并且设置编号的颜色为绿色,字体大小42像素。h1:before{content:counter(content属性值中所指定的计数器名称)'.';color:green;font-size:42px;}变成另一种效果!“第一章、第二章...”

4、指定编号的种类before和after不仅可以追加数字编号,还可以追加字母编号或者罗马数字编号。content:counter(计数器名,编号种类)可以使用list-style-type属性的值来指定编号的种类。比如指定大写字母编号时,使用“upper-alpha”属性,指定大写罗马字母时使用“upper-roman”属性。

h1:before{content:counter(计数器名,编号种类)'.';color:green;font-size:42px;}

5、编号嵌套、重置编号我们可以在大编号中华嵌套中编号,在中编号中呢又嵌入小编号!1)、大编号中嵌入中编号2)、counter-reset属性重置编号

6、中编号中嵌入大编号h2:before{content:counter(大编号的计数器)'-'counter(中编号的计数器)}

7、在字符串两边嵌套文字符号可以使用content属性的open-quote属性值与close-quote属性值在字符串的两边添加诸如单引号、双引号之类的文字字符。

open-quote开始符号close-quote结尾字符quote字符类型(使用双引号("")的时候需要使用转义字符“\”)

示例:

标题

demoh2:after{content:"title";color:#fff;background:green;padding:1px5px;margin-right:10px;}h2.not:after{content:none;}h1:before{content:url('./data/html.png');}h1:before{content:counter(jsq)'-'counter(sub)'.';color:green;font-size:20px;}h1{counter-increment:sub;}h2:before{content:'第'counter(jsq,upper-alpha)'个.';color:green;font-size:20px;}h2{counter-increment:jsq;counter-reset:sub;}h2:before{content:open-quote;}h2:after{content:close-quote;}h2{quotes:"("")";}

使用选择器插入内容

使用选择器在父元素设置counter-reset插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

使用选择器插入内容

课后目标:掌握text-shadow属性给页面的文字加阴影效果掌握word-break属性让页面文字自动换行掌握word-wrap属性让浏览器在长单词或很长的URL地址的中间进行换行。掌握如何使用浏览器在显示文字的时候使用服务器端的字体。1、text-shadow1、text-shadow属性的使用方法在CSS3我们可以是用text-shadow属性给页面上的文字添加阴影效果,text-shadow在CSS2.1的时候是被删除了的一个属性,但是呢在3.0的CSS中又恢复了使用。text-shadow的使用方法:text-shadow:lengthlengthlengthcolor第一个length表示的是阴影离开文字的横方向距离;第二个length表示的是阴影离开文字的纵方向的距离;第三个length表示的是阴影模糊半径;color表示的是阴影的颜色。

2、位移距离text-shadow所使用的参数中,前两个参数是阴影离开文字的横方向和纵方向的位移距离,使用的时候必须指定这两个参数。

3、阴影的模糊半径text-shadow属性的第三个参数就是阴影模糊半径,代表阴影向外模糊时的模糊范围。

4、阴影的颜色text-shadow属性的第四个参数就是绘制阴影时所使用的颜色,可以放在三个参数之前,也可以放在之后。当没有指定颜色值的时候,会使用Color的颜色值。

5、指定多个阴影我们可以使用text-shadow属性来给文字指定多个阴影,并且针对每个阴影使用不同的颜色。指定多个阴影的时候使用逗号“,”将多个阴影进行分割。2、word-break1、浏览器文本自动换行学习word-break之前我们先来看看浏览器对默认文本的换行处理方法。

2、指定自动换行的处理方法在CSS3中可以使用word-break属性来设置自动换行的处理方法。值换行规则IE5+Safari、chromenormla使用浏览器默认的规则支持支持keep-all只能在半角空格或连字符处理换行支持不支持break-all允许在单词内换行支持支持使用示例:

3、word-wrap3、长单词与URL地址自动换行在CSS3中,使用word-wrap属性来实现长单词和URL的自动换行。使用方法:div{word-wrap:break-word;}

word-wrap属性的属性值有两个第一个:normal浏览器保持默认处理方式,只在半角空格或者是连字符的地方换行第二个:break-word浏览器可以在长单词或URL地址内部进行换行。

43.服务器端字体和@font-face属性4、服务器端字体和@font-face属性

1、在页面上显示服务器端的字体在CSS3中可以使用@font-face属性来利用服务器端字体。@font-face属性的使用方法:

@font-face{font-family:webFont;src:url('font/字体名称.otf')format("opentype");}

可以使用的字体文件格式:字体格式字体属性otfopentypettftruetypeeotembedded-opentype2、定义斜体或粗体字体在定义字体的时候,可以把字体定义成斜体或者粗体,在使用服务器服务器端字体的时候,需要根据是斜体还是粗体,使用不同的文字。使用方法如下:

@font-face{font-family:webfont;src:url(字体1.otf);}@font-face{font-family:webfont;font-style:italic;src:url(字体2.otf);}h1{font-family:webfont;}h2{font-family:webfont;font-style:italic;}

3、显示客户端本地的字体@font-face除了可以显示服务器端的字体还可以显示本地字体。首先将font-family设置为本地的字体名,然后将src属性设置为local('字体')。

例如:@font-face{font-family:Arial;src:local('Arial');}

4、属性值的指定:1)、font-family:设置文本的字体名称。2)、font-style:设置文本样式。取值:normal不使用斜体italic使用斜体oblique使用倾斜体inherit从父元素继承

3)、font-variant:设置文本是否大小写。取值:normal使用浏览器默认值small-caps使用小型大写字母inherit从父元素继承

4)、font-weight:设置文本的粗细。取值:normal使用浏览器默认值bold使用粗体bolder使用更粗的字体lighter使用更细的字体100-900从细字体到粗,值必须是100的倍数,其中400等于normal,700等同于bold。

5)、font-stretch:设置文本是否横向的拉伸变形。(IE及Firefox已支持font-stretch,但显示效果与正常文字并无不同。)取值:normal:正常文字宽度wider把伸展比例设置为更进一步的伸展值;narrower:把收缩比例设置为更进一步的收缩值;ultra-condensed:比正常文字宽度窄4个基数;extra-condensed:比正常文字宽度窄3个基数;condensed:比正常文字宽度窄2个基数;semi-condensed:比正常文字宽度窄1个基数;semi-expanded:比正常文字宽度宽1个基数;expanded:比正常文字宽度宽2个基数;extra-expanded:比正常文字宽度宽3个基数;ultra-expanded:比正常文字宽度宽4个基数;6)、font-size:设置文本字体大小。7)、src:设置自定义字体的相对路径或者绝对路径,注意,此属性只能在@font-face规则里使用。

demo@font-face{font-family:webFont;src:url('./data/jpzk.otf');}@font-face{font-family:webFont;src:url(./data/gtgg.otf);font-style:italic;}h1{font-family:webFont;}h2{font-family:webFont;font-style:italic;}@font-face{font-family:Arial;src:local('Arial');}h3{font-family:Arial;font-variant:small-caps;font-weight:bolder;font-stretch:expanded;font-size:34px;}

SeversFont-family服务器端字体

SeversFont-family服务器端字体

SeversFont-family服务器端字体

UserFont-family客户端字体

44.盒布局上45.盒布局下

第七讲:盒模型第七讲主要讲解,CSS3中各种盒模型、概念、使用方法和浏览器的支持情况,以及讲解当内容溢出是的操作办法,给盒子添加阴影效果,和如何使用CSS3中的属性来定义元素的宽度值和高度值中是否包含内补白区域,以及边框的宽度和高度。

课后目标:1、掌握CSS3中各种盒的类型、概念、使用方法以及浏览器的支持情况。2、当内容溢出时,如何按照自己的想法来让浏览器进行显示3、掌握CSS3加阴影的方法,可以给盒加阴影。1、各种盒模型1、盒的基本类型:在css3中使用display属性来定义盒的类型,总体来说盒分为block类型和inline类型。比如之前我们所学的div元素和p元素就是属于block类型,span和a属于inline类型。

我们可以通过一个小小的实验来对比两种盒。inline-block类型2、inline-block类型inline-block类型是css2.1中追加的一个盒类型。inline-block类型盒属于block盒的一种,但是在显示时具有inline类型盒的特点。例如:在DIV元素中分别将display设置为inline-block和inline后他们的效果一样。

如果我们给他们都指定宽度和高度结果会是怎样?

2.2使用inline-block类型来执行分列显示在css2.1之前,如果需要在一行中并列显示多个block类型的元素,需要用float属性或者position属性,但是这样会让我们的样式变的复杂,所以在CSS2.1中就追加了inline-block类型,使得并列显示多个block类型的元素操作变的很简单。示例对比:block类型首先新建三个div元素,给前两个DIV使用float让前两个div元素并列显示,第三个div的话就会显示在前两个div元素的下部,但是因为前两个的高度不一样所以我们要使用clear属性清除浮动。

inline-block类型使用inline-block类型可以直接将两个div元素进行并列显示,不需要使用float属性,也不需要使用clear属性了。

默认情况下使用inline-block类型时并列显示的元素的垂直对齐方式是底部对齐,为了让对齐方式改成顶部对齐,还要给DIV元素的样式中加入vertical-align属性。

2.3使用inline-block类型来显示水平菜单在css2.1之前,如果要实现水平菜单,那么我们需要使用float属性,大多数菜单是利用ul列表和li列表项目来显示的,li元素隶属于block类型下的list-item类型,所以要并列显示的话就要使用float属性。

inline-table类型inline-table类型inline-table类型是css2中新增的盒类型--inline-table

实例讲解:在css中使用table元素的示例,一个表格,前后都有文字将其围绕。

list-item类型list-item类型,可以将多个元素作为列表来显示,同时在元素的开头加上列表的标记。

none类型当元素被指定了none类型后,这个元素将不会被显示

小示例使用前面所学的伪类选择器来实现鼠标移动上去隐藏,移开后显示。

各种浏览器对各种盒模型的支持情况盒类型FirefoxSafariOperaIE8Chromeinlineinline-blockblockrun-innonetabletable-celltable-columntable-colgrouptable-header-grouptable-row-grouptable-footer-grouptable-rowtable-captionYESYESYESNOYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESYESNONOYESYESYESYESYESYESYESYESNOYESYESYESYESYESYESYESYESYESYESYESYESYESNOYESYESYESNONOYESYESYESYESYES46.overflow属性2、显示不下的内容当我们在样式中设置了宽度和高度之后,就有可能出现内容溢出的情况,就可以使用overflow属性来指定如何显示盒子内显示不下的内容。

1、overflow属性overflow属性用来指定对盒中容纳不下的内容的显示办法。取值:hidden超出容纳范围的文字将被隐藏起来scroll在div元素中出现水平与垂直的滚动条,超出的内容被滚动显示auto当文字超出div元素的容纳范围时,根据需要出现水平滚动条或者是垂直滚动条,滚动显示超出的内容。visible和不使用overflow时候的显示效果一样,超出容纳范围的文字按原样显示

2、overflow-x属性与overflow-y属性使用overflow-x属性或者overflow-y属性,可以单独指定可以在水平或者垂直方向上如果内容超出盒的容纳范围时的显示方法。

小示例:将overflow-x属性设置为hidden,将overflow-y属性设置为scroll,那么超出之后只会在垂直方向上显示滚动条。

3、text-overflow属性通过使用text-overflow属性,可以在盒的末尾显示一个代表省略的符号“...”,但是text-overflow属性只在当盒中的内容在水平方向上超出盒的容纳范围时有效text-overflow:ellipsis;white-space:nowrap;小示例:通过将white-space属性的属性值设定为nowrap,使得盒的右端内容不能换行显示,这样就达到了水平方向溢出的效果了。

3、盒阴影1、box-shadow属性的使用方法在CSS3中,可以使用box-shadow属性让盒在显示的时候产生阴影效果。使用方法:box-shadow:lengthlengthlengthcolor前三个length表示文字阴影离开文字的横方向距离,阴影离开文字的纵方向距离和阴影的模糊半径,color制定阴影的颜色。

2、将参数设置为01、当阴影的模糊半径设定为0的时候,将绘制不向外模糊的阴影。2、将阴影离开文字的横方向距离与阴影离开文字的纵方向距离都设置为0的时候,会在盒子的周围绘制阴影。3、将阴影离开文字的横方向距离设定为负数值的时候,向左绘制阴影。4、将阴影离开文字的纵方向距离设定为负数值的时候,向上绘制阴影。

3、对盒内子元素使用阴影可以单独对盒内的子元素使用阴影。小示例:有一个DIV元素,div元素内部有一个span子元素,使用box-shadow属性让span子元素具有阴影效果。

4、对第一个文字或第一行使用阴影。通过使用first-letter选择器或frist-line选择器可以只让第一个字或第一行具有阴影效果。

5、对表格及单元格使用阴影可以使用box-shadow属性让表格及表格内的单元格产生阴影效果。

4、box-sizing宽高计算1、box-sizing属性在CSS3中,使用box-sizing属性来指定针对元素的宽度与高度的计算方法。box-sizing可以指定用width属性与height属性分别指定的宽度只与高度值是否包含元素的内补白区域以及边框的宽度和高度。可以给box-sizing属性指定的属性值为content-box属性值与border-box属性值。content-box属性值表示元素的宽度与高度不包括内补白区域及边框的宽度高度;border-box属性值表示元素的宽度与高度包括内补白区域及边框的宽度与高度,在没有使用box-sizing属性的时候,默认值是content-box属性值。

2、为什么要使用box-sizing属性使用box-sizing属性的目的是对元素的总宽度做一个控制,如果不适应这个属性的话,样式中默认使用的是content-box属性值,他只对内容做一个指定,却没有队员说的总宽度进行指定,有些场合合理利用border-box属性值会是页面的布局很方便。

demo/*div{background:green}span{background:red}*/div{background:green;}.div1{display:inline-block;width:50px;height:50px;}.div2{display:inline;}

盒的基本类型

在css3中使用display属性来定义盒的类型,总体来说盒分为block类型和inline类型在css3中使用display属性来定义盒的类型,总体来说盒分为block类型和inline类型在css3中使用display属性来定义盒的类型,总体来说盒分为block类型和inline类型

demodiv.div{width:400px;}div.div1{width:200px;background-color:green;float:left;}div.div2{width:200px;background-color:#f60;float:left;}div.div3{background-color:blue;clear:both;}

使用inline-block类型来执行分列显示

block类型首先新建三个div元素,给前两个DIV使用float让前两个div元素并列显示,第三个div的话就会显示在前两个div元素的下部,但是因为前两个的高度不一样所以我们要使用clear属性清除浮动。

inline-block类型使用inline-block类型可以直接将两个div元素进行并列显示,不需要使用float属性,也不需要使用clear属性了。

默认情况下使用inline-block类型时并列显示的元素的垂直对齐方式是底部对齐,为了让对齐方式改成顶部对齐,还要给DIV元素的样式中加入vertical-align属性。

demodiv.div1{width:200px;background-color:green;display:inline-block;}div.div2{vertical-align:top;width:200px;background-color:#f60;display:inline-block;}div.div3{width:400px;background-color:blue;}

使用inline-block类型来执行分列显示

block类型首先新建三个div元素,给前两个DIV使用float让前两个div元素并列显示,第三个div的话就会显示在前两个div元素的下部,但是因为前两个的高度不一样所以我们要使用clear属性清除浮动。

demotable{border:solid3px#ccc;display:inline-table;vertical-align:bottom;}td{border:solid3px#898989;}

inline-table类型

文字内容table
123
123
123
文字内容table

demodiv{display:list-item;list-style-type:circle;margin-left:30px;}

list-item类型

list-item类型
list-item类型
list-item类型
list-item类型
list-item类型

demodl.run-indt{display:run-in;border:soild2px#d829ff;background-color:#ccc;}dl.compactdt{display:compact;border:soild2px#d829ff;background-color:#ccc;}

run-in类型或compact类型

run-in类型
run-in类型那个的元素将被包括在后面的block类型的元素的内部
compact类型
compact类型的元素将被放置在block类型的元素左边

demodiv#a{width:500px;height:500px;background-color:#ccc;}div#b{display:block;width:200px;height:200px;background-color:green;}div#a:hoverdiv#b{display:none;}

none类型

demo/*div{width:150px;height:150px;background-color:green;overflow:hidden;overflow:scroll;overflow:auto;overflow:visible;overflow-x:scroll;overflow-y:hidden;}*/div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:300px;border:solid1pxgreen;}

overflow溢出

overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出overflow溢出

demodivspan{width:300px;height:180px;}div:first-line{margin-left:180px;background-color:green;box-shadow:-10px10px5px#6c6c6c;}

box-shadow属性的使用方法

box-shadow
属性的使用方法

demotable{border-spacing:12px;box-shadow:5px5px5px#000;}td{background-color:green;box-shadow:5px5px5px#002b00;padding:10px;}

表格以及单元格使用阴影

123
123

demodiv{width:300px;border:solid30px#6c6c6c;padding:30px;background-color:green;margin:20pxauto;}div#a{box-sizing:border-box;}div#b{box-sizing:content-box;}

box-sizing属性

box-sizing属性内补白区和边框宽高box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性不包括内补白区和边框宽高box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性box-sizing属性

1、新增的背景属性属性功能background-clip指定背景的显示范围background-origin指定绘制背景图象时的起点background-size指定背景中图像的尺寸background-break指定内联元素的背景图像进行平铺时的循环方式1、background-clip指定背景的显示范围css3中的background-clip属性,它主要是用来控制我们的背景显示区域。首先呢,我们来看一下它的用法background-clip:border-box||padding-box||content-box1、border-box:此值为默认值,背景从border区域向外裁剪,也就是超出部分将被裁剪掉;2、padding-box:背景从padding区域向外裁剪,超过padding区域的背景将被裁剪掉;3、content-box:背景从content区域向外裁剪,超过context区域的背景将被裁剪掉;浏览器支持情况:

background-clip在各种浏览器内核下,都具有自己的私有前缀:Firefox3.6版本以下(包含3.6版本):-moz-background-clip:border||padding

Firefox4.0版本以上:Firefox4.0版本以上,支持border-box,padding-box,content-box并且无需带上其前缀,如果你一不小心带上了“-moz-”,那么在Firefox4.0+版本反而是一种错误的写法background-clip:border-box||padding-box||content-box

background-clip兼容各浏览器的正确写法应该如下:/*Firefox3.6-*/-moz-background-clip:border||padding;/*Webkit*/-webkit-background-clip:border-box||padding-box||context-box;/*W3C标准IE9+andFirefox4.0+*/background-clip:border-box||padding-box||context-box;

2、background-origin属性指定绘制背景图像的绘制起点在绘制背景图象时,默认是从内补白(padding)区域的左上角开始绘制的,但是可以利用background-origin属性来指定绘制时从边框的左上角开始绘制,或者是从内容的左上角开始绘制。padding-box(padding):此值为background-origin的默认值,决定background-position起始位置从padding的外边缘(border的内边缘)开始显示背景图片;border-box(border):此值决定background-position起始位置从border的外边缘开始显示背景图片;content-box(content):此值决定background-position起始位置从content的外边缘(padding的内边缘)开始显示背景图片;

语法:background-origin在早期的Webkit和Gecko内核浏览器(Firefox3.6-,Safari和Chrome代版本)他们都支持一种老式的语法规则,类似于background-clip在Firefox3.6以下的版本一样

background-origin:padding||border||content那么在那些现代浏览器都支持的是一种新的语法

background-origin:padding-box||border-box||content-box为了兼容新老版本的浏览器,在使用background-origin改变background-position的原点位置时,最好老旧语法一起加上,并且新语法放在老语法后面,这样只要是支持新语法规则的浏览器就自动会识别background-origin的最新语法

background-origin:padding||border||contentbackground-origin:padding-box||border-box||content-box

取值说明:1、padding-box(padding):此值为background-origin的默认值,决定background-position起始位置从padding的外边缘(border的内边缘)开始显示背景图片;2、border-box(border):此值决定background-position起始位置从border的外边缘开始显示背景图片;3、content-box(content):此值决定background-position起始位置从content的外边缘(padding的内边缘)开始显示背景图片;有一点需要提出,在IE8以下版本解析是不一样的,在IE7以下版本background-origin默认是从border开始显示背景图片。

兼容浏览器:

background-origin虽然现代浏览器都支持,但在不同内核浏览器下还是需要带上其各自的前缀,这样在实际应用中最好按下面的语法规则书写,以保证只要支持background-origin的都能正常运行:

/*OldWebkitandGecko*/

-moz-background-origin:padding||border||content;-webkit-background-origin:padding||border||content;

/*NewWebkitandGecko*/

-moz-background-origin:padding-box||border-box||content-box;-webkit-background-origin:padding-box||border-box||content-box;

/*Presto*/

-o-background-origin:padding-box||border-box||content-box;

/*W3c标准*/background-origin:padding-box||border-box||content-box;

3、background-size属性指定背景图像的尺寸在CSS3中,可以使用background-size属性来指定背景图像的尺寸。

使用方法:background-size:auto||||||cover||contain1、auto:此值为默认值,保持背景图片的原始高度和宽度;2、length:设置背景图像的高度和宽度,第一个值设置宽度,第二个值设置高度,如果只设置一个值,则第二个值会被设置为"auto"。3、percentage:以父元素的百分比来设置背景图像的宽度和高度,第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为"auto"。4、cover:此值是将图片放大,以适合铺满整个容器,这个主要运用在,当图片小于容器时,又无法使用background-repeat来实现时,我们就可以采用cover;将背景图片放大到适合容器的大小,但这种方法会使用背景图片失真;5、contain:此值刚好与cover相反,其主要是将背景图片缩小,以适合铺满整个容器,这个主要运用在,当背景图片大于元素容器时,而又需要将背景图片全部显示出来,此时我们就可以使用contain将图片缩小到适合容器大小为止,这种方法同样会使用图片失真。

兼容的浏览器

background-size和其他的一些CSS3属性一样,需要加上自己的别名,

/*Mozilla*/-moz-background-size:auto||||||cover||contain/*Webkit*/-webkit-background-size:auto||||||cover||contain/*Presto*/-o-background-size:auto||||||cover||contain/*W3c标准*/background-size:auto||||||cover||contain

4、Background-break属性指定背景图像的尺寸

css3里标签元素能被分在不同区域(如:让内联元素span跨多行),background-break属性能够控制背景在不同区域显示。属性值:

(1)Background-break:continuous;此属性是默认值,忽视区域之间的间隔空隙(给它们应用图片就好像把它们看成一个区域一样)(2)Background-break:bounding-box;重新考虑区域之间的间隔(3)Background-break:each-box;对每一个独立的标签区域进行背景的重新划分。

2、显示多个背景图片在一个元素中显示多个背景图像在CSS3中一个元素可以显示多个背景图像,还可以将多个背景图像进行重叠显示,这样可以让我们对背景中所用素材的调整变的更加容易。

使用方法:background-image:url(1.png),url(2.png),url(3.png);

图层的排序方法:浏览器中显示时叠放的顺序从上往下指定的,第一个图像文件是放在最上面的,最后指定的文件是放在最下面的。

兼容性:

IE9+、Firefox4+、Chrome、Safari5+以及Opera支持border-radius属性。

border-radius属性中指定两个半径在border-radius属性中,可以指定两个半径,制定方法如下:border-radius:40px20px;第一个半径作为边框左上角与边框右下角的圆半径来绘制。第二个半径作为边框右上角与边框左下角的圆半径来绘制。

不显示边框时在CSS3中,如果使用了border-radius属性但是把边框设置为不显示时,浏览器会把背景的四个角绘制成圆角。

修改边框种类时使用了border-radius属性后,不管边框是什么种类,都会将边框沿着圆角曲线进行绘制。

绘制4个不同半径的圆角边框border-top-left-radius:左上角半径border-bottom-left-radius:左下角半径border-top-right-radius:右上角半径border-bottom-right-radius:右下角半径

4、图像边框使用图像边框在css3中增加了一个border-image属性,可以让元素的长度或宽度处于随时变化时,变化状态的边框统一使用一个图像文件来进行绘制.1、border-image属性最简单的使用方法:-webkit-border-image:url("边框图像的路径")上边距右边距下边距左边距;-moz-border-image:url("边框图像的路径")上边距右边距下边距左边距;-o-border-image:url("边框图像的路径")上边距右边距下边距左边距;border-image:url("边框图像的路径")上边距右边距下边距左边距;

上面的参数中,图像的路径、上边距、右边距、下边距、左边距必须进行指定,但是如果上边距、右边距、下边距、左边距得值完全一样,那么就可以缩写为一个。写法如下:border-image:url("边框图像的路径")边距;

当我们指定了上边距右边距下边距左边距之后呢!浏览器就会对我们的这个背景图像进行切割,那么他是怎样去对我们的这个图像进行切割的呢?

他会把图像切割成九个部分。

border-top-left-imageborder-top-imageborder-top-right-imageborder-left-imageborder-right-imageborder-bottom-left-imageborder-bottom-imageborder-bottom-right-image

在浏览器中显示的时候,border-top-left-image、border-top-right-image、border-bottom-right-image、border-bottom-left-image不会进行任何的拉伸。而border-top-image、border-right-image、border-bottom-image、border-left-image会分别作为,上边框、右边框、下边框、左边框的这个背景图像来进行显示,必要的时候呢,还可以将这四个图像进行这个平铺或者伸缩。

2、border-image属性指定边框的宽度在css3中除了可以使用border属性和border-width属性来指定宽度,我们还可以使用border-image属性进行指定边框的宽度。

指定方法:border-image:url("边框图像的路径")上边距右边距下边距左边距/border宽度;

另外border的宽度也可以对四条边进行分别设置设置的方法:border-image:url("边框图像的路径")上边距右边距下边距左边距/border上宽度border右宽度border下宽度border左宽度;

3、指定四条边的背景的显示方法在CSS3中可以在border-image属性中指定元素四条边中的图像,是以拉伸的方式显示,还是平铺的方式进行显示。指定方法如下:border-image:url("边框图像的路径")上边距右边距下边距左边距/border宽度topbottomleftright;topbottom表示元素的上下两条边中图像的显示方法,leftright表示元素的左右两条边中的显示方式,在显示方法中可以指定的值有repeat、stretch和round。

repeat:将图像以平铺的方式进行显示。stretch:将图像以拉伸的方式进行显示。round:将图像进行平铺显示,但是如果最后一幅图不能被完全显示时,就不显示图像,把之前的图像扩大。

demodiv{background-color:#000;width:300px;height:150px;border:dashed30pxgreen;padding:30px;/*background-clip:border-box;background-clip:padding-box;*/background-clip:content-box;-moz-background-clip:border;-webkit-background-clip:border-box;}

Css3中新增的background-clip属性border-box默认padding-boxcontent-box

Css3中新增的background-clip属性

demodiv{width:300px;height:150px;background-color:#000;border:dashed30pxgreen;/*border-radius:30px90px;*/border-top-left-radius:60px;border-bottom-right-radius:60px;border-top-right-radius:90px;border-bottom-left-radius:90px;}

border-radius属性

1个全部2个左上右下对称没border设置背景圆角/div>

demodiv{width:300px;height:300px;-webkit-border-image:url(./data/html5.png)100/25px50px75px100pxstretchround;/*border-width:100px;*/}

border-image属性

49.CSS3中的变形功能第九讲:CSS3的变形功能

这css3中,可以利用transform功能来实现文字或图像的旋转、缩放、倾斜、移动这四种类型的变形处理。

课后目标:第一、掌握css3中transform功能的使用方法,能够使用transform功能来实现文字或图像的旋转、缩放、倾斜、移动的变形效果。第二、能够将旋转、缩放、倾斜和移动,这四种变形效果进行结合使用,并且知道如果使用的先后顺序不同,页面显示的结果会是怎样的一个区别。

1、如何使用transform功能在css3中通过transform属性,来实现transform功能。transform:功能;-ms-transform:功能;/*IE9*/-moz-transform:功能;/*Firefox*/-webkit-transform:功能;/*Safari和Chrome*/-o-transform:功能;/*Opera*/

2、rotate旋转,在参数中规定角度使用方法:-ms-transform:rotate(角度);/*IE9*/-moz-transform:rotate(角度);/*Firefox*/-webkit-transform:rotate(角度);/*Safari和Chrome*/-o-transform:rotate(角度);/*Opera*/

rotate表示的是顺时针旋转,deg是CSS3中的角度单位。

3、scale缩放转换使用方法:transform:scale(值),他的值是指定的缩放倍率,比如0.5就是缩放到50%,1就是100%,1.5就是放大点150%。可能的值:1)、scale(x,y)使元素X轴和Y轴同时缩放2)、scaleX(x)元素仅X轴缩放3)、scaleY(y)元素仅Y轴缩放

4、倾斜skew使用方法:transform:skew(值),他的值是角度。可能的值:1)、skew(x,y)使元素在水平和垂直方向同时扭曲(X轴和Y轴同时按一定的角度值进行扭曲变形)只有一个参数时,只在水平方向上倾斜。2)、skewX(x)仅使元素在水平方向扭曲变形(X轴扭曲变形)3)、skewY(y)仅使元素在垂直方向扭曲变形(Y轴扭曲变形)

5、移动translate使用方法:transform:translate(值),他的值是指定移动的距离。可能的值:1)、translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动)只有一个参数时,只在水平方向上移动;2)、translateX(x)仅水平方向移动(X轴移动)3)、translateY(Y)仅垂直方向移动(Y轴移动)

6、对一个元素使用多种变形的方法:使用方法:transform:方法1方法2方法3方法4;

7、改变元素基点transform-origin可能的值toplefttoprighttopleftcenterrightbottomleftbottombottomright

浏览器兼容情况:

demodiv{width:300px;height:300px;background-color:#000;-ms-transform:rotate(30deg);/*ie9*/-moz-transform:rotate(30deg);/*firefox*/-webkit-transform:rotate(30deg);/*safariandchrome*/-o-transform:rotate(30deg);/*opera*/}

transform属性rotate旋转

demodiv{width:300px;height:300px;background-color:#000;}div:hover{-ms-transform:scale(2,2);/*ie9*/-moz-transform:scale(2,2);/*firefox*/-webkit-transform:scalex(0.5);/*safariandchrome*/-o-transform:scaley(2);/*opera*/}

transform属性scale缩放大

demodiv{width:300px;height:300px;background-color:#000;}div:hover{-ms-transform:skew(45deg,45deg);/*ie9*/-moz-transform:skew(45deg);/*firefox*/-webkit-transform:skewx(45deg);/*safariandchrome*/-o-transform:scaley(45deg);/*opera*/}

transform属性skew倾斜

demodiv{width:300px;height:300px;background-color:#000;}div:hover{-ms-transform:translate(45px,45px);/*ie9*/-moz-transform:translate(45px);/*firefox*/-webkit-transform:translateX(45px);/*safariandchrome*/-o-transform:translateY(45px);/*opera*/}

transform属性translate移动

demodiv{width:300px;height:300px;background-color:#000;}div:hover{-ms-transform:translate(45px,45px);/*ie9*/-moz-transform:translate(45px)scale(0.5,0.5);/*firefox*/-webkit-transform:translateX(450px)rotate(45deg);/*safariandchrome*/-o-transform:translateY(45px)skew(45deg,45deg);/*opera*/}

transform属性多种变形

demodiv{width:300px;height:300px;background-color:#000;}div:hover{-ms-transform:translate(45px,45px);/*ie9*/-moz-transform:translate(45px)scale(0.5,0.5);/*firefox*/-webkit-transform:rotate(45deg);/*safariandchrome*/-o-transform:translateY(45px)skew(45deg,45deg);/*opera*/-webkit-transform-origin:bottomright;}

transform-origin属性改变元素基点toplefttoprighttopleftcenterrightbottomleftbottombottomright

50.CSS3中的动画功能

第十讲:CSS3的动画功能在CSS3中,如果使用动画功能可以使网页上文字或者图像具有动画效果,可以使背景颜色从一种颜色平滑过渡到另外一种颜色,Transition功能支持从一个属性值平滑到另外一个属性值,Animations功能支持通过关键帧的指定来在页面上产生更复杂的动画效果.

课后目标:1、掌握CSS3中Transition功能的使用方法,以及能够使用Transition功能来实现属性值的开始值与属性得结束值之间的平滑过渡的动画。2、掌握CSS3中Animations功能的使用方法,能够在样式中创建多个关键帧,在这些关键帧之中,编写样式,并且能够在页面中创造结合这些关键帧所运行的较为复杂的动画。

transition:语法;-moz-transition:语法;/*Firefox4*/-webkit-transition:语法;/*Safari和Chrome*/-o-transition:语法;/*Opera*/

语法:transition:propertydurationtiming-functiondelay;

transition主要包含四个属性值:1)、执行变换的属性:transition-property,属性规定应用过渡效果的CSS属性的名称。(当指定的CSS属性改变时,过渡效果将开始)值有三个类型:A、none没有属性会获得过渡效果。B、all所有属性都将获得过渡效果。C、property定义应用过渡效果的CSS属性名称列表,列表以逗号分隔。

2、Animations功能在CSS3之中我们除了可以使用transition实现动画效果之外呢,我们还可以使用Animations来实现动画效果。

1、使用transition和Animations的区别:transition和Animations的区别在于,transition只能通过指定属性的开始值与结束值,然后通过两属性值之间进行平滑过渡的方式来实现动画效果,所以transition不能实现复杂的动画效果,而Animations功能是是通过关键帧以及每个关键帧中的属性值来实现更为复杂的动画效果。

2、Animations的使用方法:@-webkit-keyframes关键帧合集名称{创建关键帧的代码}0%~100%{本关键帧中的样式}

3、实现动画的方法:A、linear:从开始到结束都是以同样的速度进行.B、ease-in:开始速度很慢,然后沿着曲线进行加快.C、ease-out:开始速度很快,然后沿着曲线进行减速.D、ease:开始时速度很快,然后沿着曲线进行减速,然后再沿着曲线加速.E、ease-in-out:开始时速度很慢,然后沿着曲线进行加速,然后再沿着曲线减速.

demodiv{width:200px;height:200px;background-color:green;transition:all1slinear20s;-moz-transition:none1sease0;/*firefox4*/-webkit-transition:all1scubic-bezier(0,0.5,0,0)0;/*safariandchrome*/-o-transition:background-color1sease-out0,width1sease-in-out0,height1sease-in0;/*opera*/}div:hover{background-color:#f60;width:400px;height:400px;}

transition属性

demodiv{width:200px;height:200px;background-color:#f60;}@-webkit-keyframesmycolor{0%{background-color:#f60;-webkit-transform:rotate(0deg);-webkit-transform:translate(0px,0px);}10%{background-color:green;/*width:100px;*/-webkit-transform:rotate(30deg)-webkit-transform:translate(100px,0px);}20%{background-color:red;/*width:200px;*/-webkit-transform:rotate(0deg)}80%{background-color:#000;/*width:800px;*/-webkit-transform:rotate(30deg)}100%{background-color:#f60;/*width:1000px;*/-webkit-transform:rotate(0deg)}}div:hover{-webkit-animation-name:mycolor;-webkit-animation-duration:2s;-webkit-animation-timing-function:linear;-webkit-animation-iteration-count:1;/*-webkit-animation-iteration-count:infinite;循环*/}

animations属性

课后目标:第一点、掌握CSS3中多栏布局的使用方法,知道为什么要想多栏布局。第二点、掌握CSS3中盒布局的方法,知道为什么要使用盒布局。第三点、掌握CSS中弹性盒布局的基本概念及使用方法。

1、多栏布局1、column-count属性在CSS3中可以通过,column-count属性来进行多栏布局,这个属性的含义是将一个元素中的内容分成多栏进行显示。

写法:column-count:栏目数;兼容性写法:-webkit-column-count:3;-moz-column-count:3;需要注意的是,在使用多栏布局的时候,要将元素的宽度设置成多个栏目的总宽度。

2、column-width属性:指定栏目的宽度来生成分栏。兼容性写法:-webkit-column-width、-moz-column-width

3、column-gap属性:指定栏目与栏目之间的距离兼容性写法:-webkit-column-gap、-moz-column-gap

首先来实现一个float属性布局的案例,并且找到缺点。

2、使用盒布局在CSS3中,使用box属性来使用盒布局,在火狐中要把box写成“-moz-box”的形式,在谷歌浏览器中呢需要写成“-webkit-box”的形式。

综合上一个案例,将他修改成盒布局。

如何才能让DIV的宽度跟随浏览器窗口变化而变换呢?在CSS3中我们只要使用一个box-flex属性,使得我们的盒布局变成弹性盒布局就可以了。兼容性写法:-webkit-box-flex(Safari浏览器、Chrome浏览器时前面加-webkit-)-moz-box-flex(Firefox浏览器时前面加-moz-)

2、改变元素的显示顺序使用弹性盒布局的时候,可以通过box-ordinal-group属性来改变各个元素的显示顺序,在每个元素中加入box-ordinal-group属性,这个属性使用一个表示序号的正数属性值,浏览器在显示的时候根据序号从小到大来显示这些元素。兼容性写法:-webkit-box-ordinal-group(Safari浏览器、Chrome浏览器时前面加-webkit-)-moz-box-ordinal-group(Firefox浏览器时前面加-moz-)

3、改变元素的排列方向在使用弹性盒布局的时候,可以通过box-orient来指定多个元素的排列方向。值:horizontal在水平行中从左向右排列子元素。vertical从上向下垂直排列子元素。

兼容性写法:-webkit-box-orient:vertical(Safari浏览器、Chrome浏览器时前面加-webkit-)-moz-box-orient:vertical(Firefox浏览器时前面加-moz-)

4、元素的宽度与高度自适应在使用盒布局的时候,元素的宽度与高度具有自适应性,就是元素的宽度与高度可以根据排列方向的改变而改变。

5、使用弹性盒布局来消除空白方法就是给子DIV中加入一个box-flex属性

6、对多个元素使用box-flex属性让浏览器或者容器中的元素的总宽度或者是总高度都等于浏览器或者是容器的高度。方法对多个元素使用box-flex属性

demo#div1,#div2{width:450px;float:left;background-color:green;}#div1{margin-right:30px;}#div3{clear:both;width:100%;height:300px;float:none;background-color:#000;color:#fff;}eeeeeeeeeeeeeeeeeeeeeeeeeee

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
ffffffffffffffffffffffffffffffffffff

demo#div1{width:100%;/*-webkit-column-count:3;-moz-column-count:3;适应浏览器窗口*/-webkit-column-width:150px;-moz-column-width:150px;-webkit-column-gap:50px;-moz-column-gap:50px;-webkit-column-rule:solid1px#f60;-moz-column-rule:solid1px#f60;}#div3{width:100%;height:300px;background-color:#000;color:#fff;}eeeeeeeeeeeeeyyyyyyyyyyeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffff

demodiv#conterbody{display:-moz-box;display:-webkit-box;border:solid5pxgreen;-webkit-box-orient:vertical;-moz-box-orient:horizontal;width:501px;height:400px;}div#div1{background-color:#0064ff;-webkit-box-flex:1;-moz-box-flex:1;}div#div2{background-color:#ff39ca;-webkit-box-flex:2;-moz-box-flex:2;}div#div3{background-color:#198000;-webkit-box-flex:3;-moz-box-flex:3;}div#div1,div#div2,div#div3{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;font-size:30px;/*-webkit-box-flex:1;/*平分*/-moz-box-flex:1;*/}

弹性盒布局元素宽度高度自适应

ThisisaDiv1ThisisaDiv2ThisisaDiv3

demodiv{display:-webkit-box;diaplay:-moz-box;-moz-box-align:start;-webkit-box-align:center;-moz-box-pack:center;-webkit-box-pack:end;width:300px;height:280px;background:blue;}

弹性盒布局指定文字图像水平垂直方向的对齐方式

课后目标:

目标一:掌握CSS3中的MediaQueries模块的基本概念,以及使用MediaQueries模块可以实现的功能。目标二:掌握如何编写媒体表达式来让浏览器根据当前窗口尺寸自动在样式表中挑选一种样式并使用。了解iPhone和iPadtouch设备在支持MediaQueries时,有何特殊之处,以及应该用何种方法来制定iPhone或者iPadtouch设备中的Safari浏览器在处理页面是根据多少像素的窗口来处理。目标三:掌握媒体查询表达式编写方法,掌握css3中定义所有设备类型及设备特性、媒体查询表达式中各种关键字的含义,以及结合使用设备类型设备特征和各种关键字来正确的编写媒体查询表达式。

2、使用方法MediaQueries的使用方法:@media设备类型and(设备特征){样式代码}在样式的代码开头必须要写@media,然后制定设备的类型(媒体类型)可以指定的值与其所代表的设备类型all所有设备screen电脑显示器print打印用纸或者打印预览图handheld便携设备tv电视机类型设备speech语音和音频合成器braille盲人用点字法触觉回馈设备embossed盲文打印机projection各种投影设备tty使用固定密度字母栅格的媒介,比如电传打字机和终端。

可以使用多条语句来将同一个样式应用于不同的设备类型的设备特性中,指定方式如下:@mediahandheldand(min-width:360px),screenand(min-width:480px){样式代码}

可以在样式中加入not关键字和only关键字,not表示去反,only是让那些不支持@MediaQueries但是可以读取MediaType的设备的浏览器,将表达式中的样式隐藏起来。not示例:@medianothandheldand(color){样式代码}/*样式将被使用在除开便携设备和非色彩携带设备的所有设备中*/

@mediaalland(notcolor)/*样式将被使用在所有非彩色设备中*/

@importurl("css/style.css");

demo@mediascreenand(min-width:400px){div#diva{background-color:#f60;width:400px;height:400px;}}@mediascreenand(min-width:800px){div#diva{background-color:#0752ff;width:800px;height:800px;}}

MediaQueries模块

selectivizr.js提供大量IE不支持的CSS选择器和属性,包括所有的last-child选择器。

判断IE的方法

2、列表页制作3、内容页制作

G:\Users\Administrator\Desktop\PHP\demo\piclist.htmlfile:///G://users/administrator/desktop/php/demo/piclist.htmlopacity:1;透明度id只能1个class多个

Q:782590844

有思维导图可行有备份学会就ok自定义打字编程学习单词-->

24字母音标练全部熟能生巧

8k250个4k120个打折105官方5010j5020j130j1xxmlhtml5基础路线等-->精通高级程序移动游戏search资料中国网站应用教程视频论坛discuz132190

THE END
1.超简单PHP入门学习在PHP中,单引号字符串通常比双引号字符串执行得更快,因为它们不需要解析变量和转义序列。因此,如果字符串中不包含变量或需要解析的特殊字符,使用单引号可以提高性能。 多行字符串: 单引号:单引号字符串不支持跨越多行,它们必须在一行内定义。 双引号:双引号字符串可以跨越多行,但行尾的换行符会被包含在字符串中https://blog.csdn.net/2401_89170370/article/details/144434134
2.PHP新手必看!329个入门到精通的实战秘籍,你get了吗?php深入理解命名空间 (`namespace`)、异常处理 (`try-catch`) 和流行的PHP框架(如Laravel或Symfony),让你的代码更优雅、高效。 329个教程,每一步都精心设计,只为帮助你从菜鸟到高手的飞跃。别忘了,实践是检验真理的唯一标准,动手试试吧! 祝你在PHP的世界里越走越远,成为下一个编程明星!https://bk.taobao.com/k/php_760/e89a8ecd3fffd75fd07a5b8f2aeb9ffe.html
3.PHP官方文档新增在线运行代码功能!腾讯云开发者社区PHP官方文档最近新增的在线运行代码功能,这是一个非常实用的特性,它允许开发者在文档中直接编写、编辑和运行PHP代码,从而更快速地验证代码的正确性、进行功能测试或学习新的PHP特性。 其效果如下: 在PHP官方文档的手册部分,现在包含了在线运行代码的功能。用户可以在示例代码区域看到一个【Run Code】按钮。点击该按钮后https://cloud.tencent.com/developer/article/2479286
4.从零开始:PHP基础教程系列第13篇:构建简单的Web应用phprequire'db.php';if($_SERVER['REQUEST_METHOD']=='POST'){$username=$_POST['username'];$password=password_hash($_POST['password'],PASSWORD_DEFAULT);$sql="INSERT INTO users (username, password) VALUES (:username, :password)";$stmt=$pdo->prepare($sql);try{$stmt->bindParam(':usernamehttps://blog.51cto.com/u_11035746/12839339
5.深入浅出PHP:快速掌握PHP编程核心知识故事背景与主角形象首度曝光,2018年预约盛宴开启PHP以其高效、灵活的特点,成为了许多开发者的首选,本文将带领读者深入了解PHP的世界,从基础语法到核心概念,再到实际案例的应用,帮助初学者和有经验的开发者快速掌握PHP编程的核心知识,无论你是编程新手还是希望深化PHP技能的开发者,这篇文章都将为你提供有价值的独家揭秘http://wap.idoga.cn/gonglue/11d391319.html
6.PHP的基本语法第21节94CTO搜一搜7. 函数:函数是一段可重复使用的代码块。PHP允许开发者定义自己的函数,这些函数可以在其他代码中被调用,从而简化代码并提高可读性。 8. 面向对象编程:PHP也支持面向对象编程,允许开发者通过类和对象来组织和管理代码。 9. 调试工具:为了更有效地开发和调试PHP应用程序,PHP提供了多种调试工具,如`var_dump`、`prinhttps://www.94cto.com/search/content/id/139669
7.PHP教程菜鸟教程菜鸟教程'PHP 教程'..https://m.runoob.com/php/
8.PHP教程菜鸟教程PHP 教程 PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。 PHP 是免费的,并且使用非常广泛。同时,对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。 适用于PHP初学者的学习线路和建议PHP 开发工具推荐 PHP 在线工具 通过实例学习 PHP 我http://doc.yaojieyun.com/www.runoob.com/php/php-tutorial.html
9.IT问答网站,IT问答社区,菜鸟编程在线编程,菜鸟教程php,菜鸟教程IT问答网站是专业的it问答平台,是it技术问答网站,IT问答社区、菜鸟教程官网。IT问答网提供菜鸟编程在线编程,菜鸟教程php,菜鸟教程python,菜鸟教程java,菜鸟教程htmlhttps://www.itwenda.com/
10.菜鸟工具,为开发设计人员提供在线工具,网址导航,提供在线PHP菜鸟工具,为开发设计人员提供在线工具,网址导航,提供在线PHP、Python、 CSS、JS 调试,中文简繁体转换,进制转换等工具。致力于打造国内专业WEB开发工具,集成开发环境,WEB开发教程。.. 百度关键词 前10名 前20名 前30名 前40名 前50名 0 0 0 0 0 http://baihengguoji.com/tools/seo-lookup/www.jyshare.com
11.seo综合信息www.cainiaojc.comTDK查询结果菜鸟教程(www.cainiaojc.com)是编程技术的基础教程,是初学者入门,技术人员不可多得的参考教程和手册,包含大量关于如何使用HTML、CSS、JavaScript、SQL、Python、PHP、Bootstrap、Java、XML等的在线实例。 百度关键词 前10名 前20名 前30名 前40名 前50名 http://haohanjz.com/tools/seo-lookup/www.cainiaojc.com
12.免费python在线观看源码php简介:菜鸟教程是一个提供多种编程语言教程的网站,其中包括Python教程,适合初学者。 使用方法: 访问菜鸟教程官网(https://www.runoob.com/)。 在搜索框中输入“Python”或“Python教程”。 浏览相关教程,学习过程中可以参考教程中的源码。 3. LeetCode https://blog.yyzq.team/post/462783.html
13.PHP教程开始学习 PHP!通过在线实例学习 PHP 我们的 “运行实例” 工具降低了 PHP 的学习难度,它可以同时显示出 PHP 源代码以及代码的 HTML 输出。 实例 <!DOCTYPE html> <?php echo "我的第一段 PHP 脚本!"; ?> 运行实例 请点击“运行实例”,看看它是如何工作。PHP 参考手册 在W3School,我们为您https://www.w3school.com.cn/php/index.asp
14.菜鸟教程php在线编辑器怎么用?Worktile社区在菜鸟教程的PHP在线编辑器中,我们可以方便地进行PHP代码的编写和运行。下面是使用菜鸟教程PHP在线编辑器的步骤: 1. 打开菜鸟教程的官网(www.runoob.com)并点击页面上方的“工具”菜单。2. 在工具页面中找到PHP在线编辑器,并点击进入。3. 在编辑器的代码区域中,可以直接输入你的PHP代码。可以在代码区域的左侧选择https://worktile.com/kb/ask/195512.html
15.W3CAPI在线教程菜鸟教程W3C在线文档教程平台W3CAPI,提供W3C菜鸟教程和专业级软件教程,内容有基础API文档教程:HTML、CSS、javascript、MySql、C、PHP及PHPAPI、Java及JavaAPI,SpringAPI等;技术详解/知识分享:Tomcat、Java、架构设计、软件工程、计算机网络等;项目开发讲解:CMS系统,MVC系统http://w3capi.com/
16.菜鸟工具c.runoob.com在线工具网站菜鸟工具 - 不止于工具。菜鸟工具,为开发设计人员提供在线工具,提供在线PHP、Python、 CSS、JS 调试,中文简繁体转换,进制转换等工具。致力于打造国内专业WEB开发工具,集成开发环境,WEB开发教程。.. 网站首页截图: 编译工具 PHP 在线工具 在线编译、运行 PHP 代码 https://hao.77shw.com/daohang/24.html
17.菜鸟工具为开发设计人员提供在线工具菜鸟工具,为开发设计人员提供在线工具,网址导航,提供在线PHP、Python、 CSS、JS 调试,中文简繁体转换,进制转换等工具。致力于打造国内专业WEB开发工具,集成开发环境,WEB开发教程。 菜鸟工具官网网址:https://www.jyshare.com/ 菜鸟工具是一个综合性的在线工具网站,提供了大量的实用小工具,涵盖了编程、设计、办公等多https://www.bgrdh.com/sites/29317.html
18.菜鸟教程菜鸟教程-菜鸟鸭(cainiaoya.com)是一个程序员编程学习网站,提供Java,PHP,Python,vue,HTML,CSS,JS,jQuery,C,Sql,Mysql等丰富的前后端、服务端、数据库和移动端开发技术,希望能通过这些知识文档、使用手册和菜鸟笔记,帮助大家在IT技术领域不断成长和进步。https://www.cainiaoya.com/
19.巅云学苑PHP中文网自学平台社区php菜鸟培训视频教程巅云学苑-世界上最好的语言PHP自学平台,拥有12年php开发实战经验的工程师,分享海量PHP视频教程,包括PHP框架培训教程,旨在打造由浅入深、通俗易懂的PHP菜鸟培训中文网社区。https://www.citclub.cn/
20.美图秀秀美图秀秀是苹果安卓手机装机必备APP,目前全球用户已超过5亿!独有的照片特效、强大的人像美容、丰富的拍摄模式、好玩有趣的贴图等功能,让你随时随地记录、分享美图……https://xiuxiu.meitu.com/
21.菜鸟教程菜鸟教程(cainiaoplus.com)是编程技术基础教程的加强版,是软件开发工程师必备的参考教程和手册,涵盖了HTML、CSS、JavaScript、NodeJS、SQL、Python、PHP、Bootstrap、Java、SpringBoot、SpringCloud、XML、C++、Linux、Docker等诸多在线实例,助您享受学习编程的乐趣。https://www.cainiaoplus.com/
22.菜鸟教程菜鸟教程(cainiaoplay.com)是面向全球中文开发者的基础教程分享平台,是国内较大的优秀编程开发学习网站之一,提供优质专业的编程学习资料,专注于IT技术分享,是程序员的好帮手,全新丰富的html、css、js、vue、node.js、React、.net、java、springboot、python、go、php、https://cainiaoplay.com/
23.php菜鸟,php菜鸟在线对于初学者来说,PHP菜鸟在线就像是一座宝藏岛。在这里,你可以找到各种各样的学习资源,无论你是喜欢看视频学习,还是更喜欢阅读文字教程,都能够找到适合自己的学习方式。而且,这些教程都是由经验丰富的PHP程序员亲自编写,内容丰富、通俗易懂,让你能够快速入门,掌握PHP编程的基本技能。 https://www.nzw6.com/25377.html
24.菜鸟教程程序编程描述:菜鸟教程提供了编程的基础技术教程,介绍了HTML、CSS、Javascript、Python、Java、Ruby、C、PHP 、MySQL等各种编程语言的基础知识。 同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。百度权重 360权重 神马权重 搜狗权重 谷歌PR AlexaRank264 关注热度478 入站次数0 出站次数0https://www.699ys.com/views/626.html
25.Android开发者珍藏必备学习资料篇开发在线工具 介绍:和上面的功能几乎一样,绝对,平时开发好助手,感受一下: 推荐指数:5颗星 地址:https://tool.lu/c/developer 文字教程 Google Android官方培训课程中文版 介绍:Google爸爸出的学习Android手册,你还在质疑什么,这才是最权威的教程。 推荐指数:5颗星 地址:http://hukai.me/android-training-course-https://www.imooc.com/article/68264