首页
友链
统计
留言
更多
直播
壁纸
推荐
我的毛线
哔哔点啥
院长科技
Search
1
pxe 自动化安装系统
645 阅读
2
本站官方群:894703859------|诚邀各位大佬的入驻!
638 阅读
3
软件安装
465 阅读
4
新款螺旋帽子编织#夏凉帽#合股线夏凉帽编织
402 阅读
5
10 个Linux Awk文本处理经典案例
376 阅读
linux
yaml
iptables
shell
ansible
ssl
awk
sed
pxe
prometheus
Nginx
k8s
fish
dev
go占位符
clickhouse
html标签
vue基础
html表格
vue项目
vscode
css基础
css定位
css精灵图
code
html5
project
js
jQuery
面向对象
编织
编织视频
常用工具
微软
登录
/
注册
Search
标签搜索
基础
js
Nginx
css
webapi
jQuery
面向对象
command
项目
ansible
用户权限
go
html
文件管理
命令
k8s
shell
pxe
awk
vscode
JustDoIt
累计撰写
114
篇文章
累计收到
4
条评论
首页
栏目
linux
yaml
iptables
shell
ansible
ssl
awk
sed
pxe
prometheus
Nginx
k8s
fish
dev
go占位符
clickhouse
html标签
vue基础
html表格
vue项目
vscode
css基础
css定位
css精灵图
code
html5
project
js
jQuery
面向对象
编织
编织视频
常用工具
微软
页面
友链
统计
留言
直播
壁纸
推荐
我的毛线
哔哔点啥
院长科技
搜索到
114
篇与
的结果
2022-03-27
此内容被密码保护
加密文章,请前往内页查看详情
2022年03月27日
58 阅读
0 评论
0 点赞
2022-03-22
iptables详解(5):iptables匹配条件总结之二(常用扩展模块)
iptables详解(5):iptables匹配条件总结之二(常用扩展模块)本章 转载来自大佬朱双印引用地址 iptables在本博客中,从理论到实践,系统的介绍了iptables,如果你想要从头开始了解iptables,可以查看iptables文章列表,直达链接如下iptables零基础快速入门系列前文已经总结了iptables中的基本匹配条件,以及简单的扩展匹配条件,此处,我们来认识一些新的扩展模块。 iprange扩展模块之前我们已经总结过,在不使用任何扩展模块的情况下,使用-s选项或者-d选项即可匹配报文的源地址与目标地址,而且在指定IP地址时,可以同时指定多个IP地址,每个IP用”逗号”隔开,但是,-s选项与-d选项并不能一次性的指定一段连续的IP地址范围,如果我们需要指定一段连续的IP地址范围,可以使用iprange扩展模块。 使用iprange扩展模块可以指定”一段连续的IP地址范围”,用于匹配报文的源地址或者目标地址。iprange扩展模块中有两个扩展匹配条件可以使用–src-range–dst-range没错,见名知意,上述两个选项分别用于匹配报文的源地址所在范围与目标地址所在范围。 示例如下:上例表示如果报文的源IP地址如果在192.168.1.127到192.168.1.146之间,则丢弃报文,IP段的始末IP使用”横杠”连接,–src-range与–dst-range和其他匹配条件一样,能够使用”!”取反,有了前文中的知识作为基础,此处就不再赘述了。 string扩展模块使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。比如,如果报文中包含字符”OOXX”,我们就丢弃当前报文。首先,我们在IP为146的主机上启动http服务,然后在默认的页面目录中添加两个页面,页面中的内容分别为”OOXX”和”Hello World”,如下图所示,在没有配置任何规则时,126主机可以正常访问146主机上的这两个页面。那么,我们想要达到的目的是,如果报文中包含”OOXX”字符,我们就拒绝报文进入本机,所以,我们可以在126上进行如下配置。上图中,’-m string’表示使用string模块,’–algo bm’表示使用bm算法去匹配指定的字符串,’ –string “OOXX” ‘则表示我们想要匹配的字符串为”OOXX”设置完上图中的规则后,由于index.html中包含”OOXX”字符串,所以,146的回应报文无法通过126的INPUT链,所以无法获取到页面对应的内容。那么,我们来总结一下string模块的常用选项–algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但是我们必须指定一个。–string:用于指定需要匹配的字符串。 time扩展模块我们可以通过time扩展模块,根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件。比如,”我想要自我约束,每天早上9点到下午6点不能看网页”,擦,多么残忍的规定,如果你想要这样定义,可以尝试使用如下规则。上图中”-m time”表示使用time扩展模块,–timestart选项用于指定起始时间,–timestop选项用于指定结束时间。 如果你想要换一种约束方法,只有周六日不能看网页,那么可以使用如下规则。没错,如你所见,使用–weekdays选项可以指定每个星期的具体哪一天,可以同时指定多个,用逗号隔开,除了能够数字表示”星期几”,还能用缩写表示,例如:Mon, Tue, Wed, Thu, Fri, Sat, Sun 当然,你也可以将上述几个选项结合起来使用,比如指定只有周六日的早上9点到下午6点不能浏览网页。 聪明如你一定想到了,既然有–weekdays选项了,那么有没有–monthdays选项呢?必须有啊!使用–monthdays选项可以具体指定的每个月的哪一天,比如,如下图设置表示指明每月的22号,23号。 前文已经总结过,当一条规则中同时存在多个条件时,多个条件之间默认存在”与”的关系,所以,下图中的设置表示匹配的时间必须为星期5,并且这个”星期5″同时还需要是每个月的22号到28号之间的一天,所以,下图中的设置表示每个月的第4个星期5 除了使用–weekdays选项与–monthdays选项,还可以使用–datestart 选项与-datestop选项,指定具体的日期范围,如下。上图中指定的日期范围为2017年12月24日到2017年12月27日 上述选项中,–monthdays与–weekdays可以使用”!”取反,其他选项不能取反。 connlimit扩展模块使用connlimit扩展模块,可以限制每个IP地址同时链接到server端的链接数量,注意:我们不用指定IP,其默认就是针对”每个客户端IP”,即对单IP的并发连接数限制。比如,我们想要限制,每个IP地址最多只能占用两个ssh链接远程到server端,我们则可以进行如下限制。上例中,使用”-m connlimit”指定使用connlimit扩展,使用”–connlimit-above 2″表示限制每个IP的链接数量上限为2,再配合-p tcp –dport 22,即表示限制每个客户端IP的ssh并发链接数量不能高于2。centos6中,我们可以对–connlimit-above选项进行取反,没错,老规矩,使用”!”对此条件进行取反,示例如下上例表示,每个客户端IP的ssh链接数量只要不超过两个,则允许链接。但是聪明如你一定想到了,上例的规则并不能表示:每个客户端IP的ssh链接数量超过两个则拒绝链接(与前文中的举例原理相同,此处不再赘述,如果你不明白,请参考之前的文章)。也就是说,即使我们配置了上例中的规则,也不能达到”限制”的目的,所以我们通常并不会对此选项取反,因为既然使用了此选项,我们的目的通常就是”限制”连接数量。centos7中iptables为我们提供了一个新的选项,–connlimit-upto,这个选项的含义与”! –commlimit-above”的含义相同,即链接数量未达到指定的连接数量之意,所以综上所述,–connlimit-upto选项也不常用。 刚才说过,–connlimit-above默认表示限制”每个IP”的链接数量,其实,我们还可以配合–connlimit-mask选项,去限制”某类网段”的链接数量,示例如下:(注:下例需要一定的网络知识基础,如果你还不了解它们,可以选择先跳过此选项或者先去学习部分的网络知识)上例中,”–connlimit-mask 24″表示某个C类网段,没错,mask为掩码之意,所以将24转换成点分十进制就表示255.255.255.0,所以,上图示例的规则表示,一个最多包含254个IP的C类网络中,同时最多只能有2个ssh客户端连接到当前服务器,看来资源很紧俏啊!254个IP才有2个名额,如果一个IP同时把两个连接名额都占用了,那么剩下的253个IP连一个连接名额都没有了,那么,我们再看看下例,是不是就好多了。上例中,”–connlimit-mask 27″表示某个C类网段,通过计算后可以得知,这个网段中最多只能有30台机器(30个IP),这30个IP地址最多只能有10个ssh连接同时连接到服务器端,是不是比刚才的设置大方多了,当然,这样并不能避免某个IP占用所有连接的情况发生,假设,报文来自192.168.1.40这个IP,按照掩码为27进行计算,这个IP属于192.168.1.32/27网段,如果192.168.1.40同时占用了10个ssh连接,那么当192.168.1.51这个IP向服务端发起ssh连接请求时,同样会被拒绝,因为192.168.1.51这个IP按照掩码为27进行计算,也是属于192.168.1.32/27网段,所以他们共享这10个连接名额。 聪明如你一定明白了,在不使用–connlimit-mask的情况下,连接数量的限制是针对”每个IP”而言的,当使用了–connlimit-mask选项以后,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制,这样就能够灵活许多,不是吗? limit扩展模块刚才认识了connlimit模块,现在来认识一下limit模块。connlimit模块是对连接数量进行限制的,limit模块是对”报文到达速率”进行限制的。用大白话说就是,如果我想要限制单位时间内流入的包的数量,就能用limit模块。我们可以以秒为单位进行限制,也可以以分钟、小时、天作为单位进行限制。比如,限制每秒中最多流入3个包,或者限制每分钟最多流入30个包,都可以。那么,我们来看一个最简单的示例,假设,我们想要限制,外部主机对本机进行ping操作时,本机最多每6秒中放行一个ping包,那么,我们可以进行如下设置(注意,只进行如下设置有可能无法实现限制功能,请看完后面的内容)上例中,”-p icmp”表示我们针对ping请求添加了一条规则(ping使用icmp协议),”-m limit”表示使用limit模块, “–limit 10/minute -j ACCEPT”表示每分钟最多放行10个包,就相当于每6秒钟最多放行一个包,换句话说,就是每过6秒钟放行一个包,那么配置完上述规则后,我们在另外一台机器上对当前机器进行ping操作,看看是否能够达到限制的目的,如下图所示。我们发现,刚才配置的规则并没有如我们想象中的一样,ping请求的响应速率完全没有发生任何变化,为什么呢?我们一起来分析一下。我们再来回顾一下刚才配置的规则。其实,我们可以把上图中的规则理解为如下含义。每6秒放行一个包,那么iptables就会计时,每6秒一个轮次,到第6秒时,达到的报文就会匹配到对应的规则,执行对应的动作,而上图中的动作是ACCEPT。那么在第6秒之前到达的包,则无法被上述规则匹配到。之前总结过,报文会匹配链中的每一条规则,如果没有任何一条规则能够匹配到,则匹配默认动作(链的默认策略)。既然第6秒之前的包没有被上述规则匹配到,而我们又没有在INPUT链中配置其他规则,所以,第6秒之前的包肯定会被默认策略匹配到,那么我们看看默认策略是什么。现在再想想,我想你应该明白为什么刚才的ping的响应速率没有变化了。因为,上例中,第六秒的报文的确被对应的规则匹配到了,于是执行了”放行”操作,第6秒之前的报文没有被上图中配置的规则匹配到,但是被默认策略匹配到了,而恰巧,默认动作也是ACCEPT,所以,相当于所有的ping报文都被放行了,怪不得与没有配置规则时的速率一毛一样了。那么,知错就改,聪明如你一定想到了,我们可以修改INPUT链的默认策略,或者在上例限制规则的后面再加入一条规则,将”漏网之鱼”匹配到即可,示例如下。如上图所示,第一条规则表示每分钟最多放行10个icmp包,也就是6秒放行一个,第6秒的icmp包会被上例中的第一条规则匹配到,第6秒之前的包则不会被第一条规则匹配到,于是被后面的拒绝规则匹配到了,那么,此刻,我们再来试试,看看ping的报文放行速率有没有发生改变。如下图所示刚开始还真吓我一跳,难道配置的规则还是有问题?结果发现,只有前5个ping包没有受到限制,之后的ping包已经开始受到了规则的限制了。从上图可以看出,除了前5个ping包以外,之后的ping包差不多每6秒才能ping通一次,看来,之后的ping包已经受到了规则的控制,被限制了流入防火墙的速率了,那么,前5个ping包是什么鬼?为什么它们不受规则限制呢?其实,这个现象正好引出另一个话题,出现上图中的情况,是因为另一个选项:”–limit-burst”limit-burst选项是干什么用的呢?我们先用不准确的大白话描述一遍,”–limit-burst”可以指定”空闲时可放行的包的数量”,其实,这样说并不准确,但是我们可以先这样大概的理解,在不使用”–limit-burst”选项明确指定放行包的数量时,默认值为5,所以,才会出现上图中的情况,前5个ping包并没有受到任何速率限制,之后的包才受到了规则的限制。 如果想要彻底了解limit模块的工作原理,我们需要先了解一下”令牌桶”算法,因为limit模块使用了令牌桶算法。我们可以这样想象,有一个木桶,木桶里面放了5块令牌,而且这个木桶最多也只能放下5块令牌,所有报文如果想要出关入关,都必须要持有木桶中的令牌才行,这个木桶有一个神奇的功能,就是每隔6秒钟会生成一块新的令牌,如果此时,木桶中的令牌不足5块,那么新生成的令牌就存放在木桶中,如果木桶中已经存在5块令牌,新生成的令牌就无处安放了,只能溢出木桶(令牌被丢弃),如果此时有5个报文想要入关,那么这5个报文就去木桶里找令牌,正好一人一个,于是他们5个手持令牌,快乐的入关了,此时木桶空了,再有报文想要入关,已经没有对应的令牌可以使用了,但是,过了6秒钟,新的令牌生成了,此刻,正好来了一个报文想要入关,于是,这个报文拿起这个令牌,就入关了,在这个报文之后,如果很长一段时间内没有新的报文想要入关,木桶中的令牌又会慢慢的积攒了起来,直到达到5个令牌,并且一直保持着5个令牌,直到有人需要使用这些令牌,这就是令牌桶算法的大致逻辑。 那么,就拿刚才的”令牌桶”理论类比我们的命令,”–limit”选项就是用于指定”多长时间生成一个新令牌的”,”–limit-burst”选项就是用于指定”木桶中最多存放几个令牌的”,现在,你明白了吗??示例如下上例表示,令牌桶中最多能存放3个令牌,每分钟生成10个令牌(即6秒钟生成一个令牌)。之前说过,使用”–limit”选项时,可以选择的时间单位有多种,如下/second/minute/hour/day比如,3/second表示每秒生成3个”令牌”,30/minute表示每分钟生成30个”令牌”。我不知道我到底解释清楚没有,我感觉我解释清楚了,哥们儿你赶紧动手试试吧。 小结老规矩,为了方便以后回顾,我们将上文中提到的命令总结如下。 iprange模块包含的扩展匹配条件如下–src-range:指定连续的源地址范围–dst-range:指定连续的目标地址范围 #示例 iptables -t filter -I INPUT -m iprange --src-range 192.168.1.127-192.168.1.146 -j DROP iptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.127-192.168.1.146 -j DROP iptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.127-192.168.1.146 -j DROP string模块常用扩展匹配条件如下–algo:指定对应的匹配算法,可用算法为bm、kmp,此选项为必需选项。–string:指定需要匹配的字符串 #示例 iptables -t filter -I INPUT -p tcp --sport 80 -m string --algo bm --string "OOXX" -j REJECT iptables -t filter -I INPUT -p tcp --sport 80 -m string --algo bm --string "OOXX" -j REJECT time模块常用扩展匹配条件如下–timestart:用于指定时间范围的开始时间,不可取反–timestop:用于指定时间范围的结束时间,不可取反–weekdays:用于指定”星期几”,可取反–monthdays:用于指定”几号”,可取反–datestart:用于指定日期范围的开始日期,不可取反–datestop:用于指定日期范围的结束时间,不可取反 #示例 iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time ! --monthdays 22,23 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT connlimit 模块常用的扩展匹配条件如下–connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。–connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制,如果不明白可以参考上文的详细解释。 #示例 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT limit模块常用的扩展匹配条件如下–limit-burst:类比”令牌桶”算法,此选项用于指定令牌桶中令牌的最大数量,上文中已经详细的描述了”令牌桶”的概念,方便回顾。–limit:类比”令牌桶”算法,此选项用于指定令牌桶中生成新令牌的频率,可用时间单位有second、minute 、hour、day。 #示例 #注意,如下两条规则需配合使用,具体原因上文已经解释过,忘记了可以回顾。 iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT iptables -t filter -A INPUT -p icmp -j REJECT 希望这篇文章能够对你有所帮助~~~
2022年03月22日
96 阅读
0 评论
0 点赞
2022-03-15
Go语言fmt占位符
占位符 说明 %T 查看类型 %v 输入相应值的默认格式 %b 查看二进制 %o 查看八进制 %d 查看十进制 %x 查看十六进制,字母形式为小写 a-f %X 查看十六进制,字母形式为小写 A-F %U 查看Unicode格式 %p 查看指针 package main import "fmt" func main() { var name = "Vitas" var age = 18 var sex = "male" fmt.Printf("name:%v\n",name) fmt.Printf("age:%v\n",age) fmt.Printf("sex:%v\n",sex) fmt.Printf("name的类型:%T\n",name) fmt.Printf("age的类型:%T\n",age) fmt.Printf("sex的类型:%T\n",sex) fmt.Printf("age的二进制:%b\n",age) fmt.Printf("age的八进制:%o\n",age) fmt.Printf("age的十进制:%d\n",age) fmt.Printf("age的十六进制:%x\n",age) fmt.Printf("name的指针:%p\n",&name) } 打印结果如下 name:Vitas age:18 sex:male name的类型:string age的类型:int sex的类型:string age的二进制:10010 age的八进制:22 age的十进制:18 age的十六进制:12 name的指针:0xc00008e1e0
2022年03月15日
214 阅读
0 评论
1 点赞
2022-03-15
css浮动
一、其他样式1、圆角边框在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。border-radius 属性用于设置元素的外边框圆角。语法: border-radius:length; 参数值可以为数值或百分比的形式 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50% 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用 2、盒子阴影CSS3 中新增了盒子阴影,我们可以使用 box-shadow 属性为盒子添加阴影。语法: box-shadow: h-shadow v-shadow blur spread color inset; 3、文字阴影在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。语法: text-shadow: h-shadow v-shadow blur color; 二、浮动1、传统网页布局的三种方式 CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序): 普通流(标准流) 浮动 定位这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。 注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式) 。2、标准流(普通流/文档流)所谓的标准流: 就是标签按照规定好默认方式排列 块级元素会独占一行,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em 等 以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式。3、为什么需要浮动? 总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式. 浮动最典型的应用:可以让多个块级元素一行内排列显示。 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。4、什么是浮动? float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。语法: 选择器 { float: 属性值; } 5、浮动特性加了浮动之后的元素,会具有很多特性,需要我们掌握的.1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置)2、浮动的元素会一行内显示并且元素顶部对齐注意: 浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。3、浮动的元素会具有行内块元素的特性 浮动元素的大小根据内容来决定 浮动的盒子中间是没有缝隙的6、浮动元素经常和标准流父级搭配使用为了约束浮动元素位置, 我们网页布局一般采取的策略是: 先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧三、常见网页布局浮动布局注意点1、浮动和标准流的父盒子搭配。先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置2、一个元素浮动了,理论上其余的兄弟元素也要浮动。一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.四、清除浮动1、为什么需要清除浮动? 由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。2、清除浮动本质清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度注意: 如果父盒子本身有高度,则不需要清除浮动 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。 父级有了高度,就不会影响下面的标准流了 3、清除浮动样式语法: 选择器{clear:属性值;} 我们实际工作中, 几乎只用 clear: both;清除浮动的策略是: 闭合浮动.4、清除浮动的多种方式4.1、额外标签法额外标签法也称为隔墙法,是 W3C 推荐的做法。使用方式: 额外标签法会在浮动元素末尾添加一个空的标签。html 例如 <div style="clear:both"></div>,或者其他标签(如<br />等)。 优点: 通俗易懂,书写方便 缺点: 添加许多无意义的标签,结构化较差 注意: 要求这个新的空标签必须是块级元素。总结: 1、清除浮动本质是? 清除浮动的本质是清除浮动元素脱离标准流造成的影响 2、清除浮动策略是? 闭合浮动. 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子. 3、额外标签法? 隔墙法, 就是在最后一个浮动的子元素后面添 4、加一个额外标签, 添加 清除浮动样式. 实际工作可能会遇到,但是不常用4.2、父级添加 overflow 属性可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。例如:overflow:hidden | auto | scroll; 优点:代码简洁缺点:无法显示溢出的部分注意:是给父元素添加代码4.3、父级添加after伪元素:after 方式是额外标签法的升级版。给父元素添加: .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7 专有 */ *zoom: 1; } 优点:没有增加标签,结构更简单缺点:照顾低版本浏览器代表网站: 百度、淘宝网、网易等4.4、父级添加双伪元素给父元素添加 .clearfix:before,.clearfix:after { content:""; display:table; } .clearfix:after { clear:both; } .clearfix { *zoom:1; } 优点:代码更简洁缺点:照顾低版本浏览器代表网站:小米、腾讯等总结为什么需要清除浮动? 父级没高度。 子盒子浮动了。 影响下面布局了,我们就应该清除浮动了。 五、PS 切图1、图层切图最简单的切图方式:右击图层 → 导出 → 切片。 2、切片切图2.1、利用切片选中图片 利用切片工具手动划出 2.2、导出选中的图片文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储 。 3、PS插件切图 Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 "导出 web 所用格式" 以及使用切片工具进行挨个切图的繁琐流程。官网:http://www.cutterman.cn/zh/cutterman注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版,所以大家需要安装完整版本。
2022年03月15日
129 阅读
0 评论
1 点赞
2022-03-15
YAML中多行字符串的配置方法
有时候我们会在配置文件中配置一段文字说明,这种时候通常会出现两种需求: 文字中可能出现段落,希望在配置中按段落方式编写,显示打印的时候也能出现段落换行。 文字很长,为方便编辑,可能在配置文件中分段写,但是显示的时候不喜欢出现配置中的段落换行。简单的说,就是: 配置与显示,都严格按段落展示 配置按段落,显示不需要按段落假设,我们需要配置这样一段文字: I am a coder.My blog is didispace.com. 下面,就针对上面的两种情况来看看可以怎么来实现:配置与显示,都严格按段落展示这个需求下,我们希望配置和显示都按句子换行,就是这样:I am a coder. My blog is didispace.com. 方法一:直接使用\n来换行这样写:string: "I am a coder.\n\ My blog is didispace.com." 最终输出:I am a coder. My blog is didispace.com. 通过\n在显示的时候换行,通过配置行末的\让这个字符串换行继续写(这个必须有,如果没有第二行行首会多一个空格)。注意:这里必须使用双引号来定义字符串,不能用单引号。因为单引号是不支持\n换行的。方法二:使用|、|+、|-在方法一种,其实我们在文字中加入了几个转义符号,其实对于阅读并不方便。在方法二中,将介绍更适合阅读的几种形式:string: | I am a coder. My blog is didispace.com. string: |+ I am a coder. My blog is didispace.com. string: |- I am a coder. My blog is didispace.com. 如上面一共有三种配置都会自动按配置中所写的换行来换行,但是在文末会有一些区别,有的会增加一个空行,有的不会,有的会新增两个空行,具体说明如下: |:文中自动换行 + 文末新增一空行 |+:文中自动换行 + 文末新增两空行 |-:文中自动换行 + 文末不新增行 配置按段落,显示不需要按段落这个需求下,我们希望配置里是按行写的,但是显示是如下面这样在一行的:I am a coder.My blog is didispace.com. 方法一:直接在字符串中换行写最粗暴的写法,反正不用换行,那就直接写了:string: 'I am a coder. My blog is didispace.com.' 这里不论用双引号还是单引号都是可以的。因为不存在需要转移的内容,所以总体还算清晰。方法二:使用>、>+、>-比较好的表述方式就是使用>、>+、>-来定义,比如下面这几种:string: > I am a coder. My blog is didispace.com. string: >+ I am a coder. My blog is didispace.com. string: >- I am a coder. My blog is didispace.com. 这三种都不会对配置中的换行进行实际换行,但是依然在文末的处理会有一些小区别,具体如下: >:文中不自动换行 + 文末新增一空行 >+:文中不自动换行 + 文末新增两空行 >-:文中不自动换行 + 文末不新增行
2022年03月15日
301 阅读
0 评论
0 点赞
2022-03-15
什么是Nginx
Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。Nginx 有哪些优点? 跨平台、配置简单。 非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发。 内存消耗小:开启 10 个 Nginx 才占 150M 内存。 成本低廉,且开源。 稳定性高,宕机的概率非常小。 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上 Nginx应用场景? http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。 nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。 Nginx怎么处理请求的?server { # 第一个Server区块开始,表示一个独立的虚拟主机站点 listen 80; # 提供服务的端口,默认80 server_name localhost; # 提供服务的域名主机名 location / { # 第一个location区块开始 root html; # 站点的根目录,相当于Nginx的安装目录 index index.html index.html; # 默认的首页文件,多个用空格分开 } 首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的 ip 地址端口,再 listen 监听)。 然后,再 fork(一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为子进程 )出多个子进程出来。 之后,子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。 接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。 最后,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了。 Nginx 是如何实现高并发的?如果一个 server 采用一个进程(或者线程)负责一个request的方式,那么进程数就是并发数。那么显而易见的,就是会有很多进程在等待中。等什么?最多的应该是等待网络传输。而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。Nginx是如何利用的呢,简单来说:同样的 4 个进程,如果采用一个进程负责一个 request 的方式,那么,同时进来 4 个 request 之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第 5 个request进来了。就无法及时反应了,因为 4 个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个 request ,就新开个进程来处理。回想下,BIO 是不是存在酱紫的问题?Nginx 不这样,每进来一个 request ,会有一个 worker 进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发 request ,并等待请求返回。那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:如果 upstream 返回了,告诉我一声,我再接着干。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走。这就是为什么说,Nginx 基于事件模型。由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即:webserver 刚好属于网络 IO 密集型应用,不算是计算密集型。异步,非阻塞,使用 epoll ,和大量细节处的优化。也正是 Nginx 之所以然的技术基石。什么是正向代理?一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。正向代理总结就一句话:代理端代理的是客户端。例如说:我们使用的OpenVPN 等等。什么是反向代理?反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理总结就一句话:代理端代理的是服务端。“反向代理服务器的优点是什么?反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。Nginx目录结构有哪些?[root@localhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参数的配置文件 │ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件 │ ├── fastcgi_params # fastcgi的参数文件 │ ├── fastcgi_params.default │ ├── koi-utf │ ├── koi-win │ ├── mime.types # 媒体类型 │ ├── mime.types.default │ ├── nginx.conf # Nginx主配置文件 │ ├── nginx.conf.default │ ├── scgi_params # scgi相关参数文件 │ ├── scgi_params.default │ ├── uwsgi_params # uwsgi相关参数文件 │ ├── uwsgi_params.default │ └── win-utf ├── fastcgi_temp # fastcgi临时数据目录 ├── html # Nginx默认站点目录 │ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面 │ └── index.html # 默认的首页文件 ├── logs # Nginx日志目录 │ ├── access.log # 访问日志文件 │ ├── error.log # 错误日志文件 │ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件 ├── proxy_temp # 临时目录 ├── sbin # Nginx命令目录 │ └── nginx # Nginx的启动命令 ├── scgi_temp # 临时目录 └── uwsgi_temp # 临时目录 Nginx配置文件nginx.conf有哪些属性模块?worker_processes 1; # worker进程的数量 events { # 事件区块开始 worker_connections 1024; # 每个worker进程支持的最大连接数 } # 事件区块结束 http { # HTTP区块开始 include mime.types; # Nginx支持的媒体类型库文件 default_type application/octet-stream; # 默认的媒体类型 sendfile on; # 开启高效传输模式 keepalive_timeout 65; # 连接超时 server { # 第一个Server区块开始,表示一个独立的虚拟主机站点 listen 80; # 提供服务的端口,默认80 server_name localhost; # 提供服务的域名主机名 location / { # 第一个location区块开始 root html; # 站点的根目录,相当于Nginx的安装目录 index index.html index.htm; # 默认的首页文件,多个用空格分开 } # 第一个location区块结果 error_page 500502503504 /50x.html; # 出现对应的http状态码时,使用50x.html回应客户 location = /50x.html { # location区块开始,访问50x.html root html; # 指定对应的站点目录为html } } ...... cookie和session区别? 共同: 存放用户信息。存放的形式:key-value格式 变量和变量内容键值对。 区别: cookie 存放在客户端浏览器 每个域名对应一个cookie,不能跨跃域名访问其他cookie 用户可以查看或修改cookie http响应报文里面给你浏览器设置 钥匙(用于打开浏览器上锁头) session: 存放在服务器(文件,数据库,redis) 存放敏感信息 锁头 为什么 Nginx 不使用多线程?Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。nginx和apache的区别轻量级,同样起web服务,比apache占用更少的内存和资源。抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞性的,在高并发下nginx能保持低资源,低消耗高性能。高度模块化的设计,编写模块相对简单。最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。什么是动态资源、静态资源分离?动态资源、静态资源分离,是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离。为什么要做动、静分离?在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do 等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js 等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗?当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问这里我们将静态资源放到 Nginx 中,动态资源转发到 Tomcat 服务器中去。当然,因为现在七牛、阿里云等 CDN 服务已经很成熟,主流的做法,是把静态资源缓存到 CDN 服务中,从而提升访问速度。相比本地的 Nginx 来说,CDN 服务器由于在国内有更多的节点,可以实现用户的就近访问。并且,CDN 服务可以提供更大的带宽,不像我们自己的应用服务,提供的带宽是有限的。什么叫 CDN 服务?CDN ,即内容分发网络。其目的是,通过在现有的 Internet中 增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度。一般来说,因为现在 CDN 服务比较大众,所以基本所有公司都会使用 CDN 服务。Nginx怎么做的动静分离?只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:(操作都是在Linux上)location /image/ { root /usr/local/static/; autoindex on; } 步骤:# 创建目录 mkdir /usr/local/static/image # 进入目录 cd /usr/local/static/image # 上传照片 photo.jpg # 重启nginx sudo nginx -s reload 打开浏览器 输入 server_name/image/1.jpg 就可以访问该静态图片了Nginx负载均衡的算法怎么实现的?策略有哪些?为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。Nginx负载均衡实现的策略有以下五种: 1 .轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。 upstream backserver { server 1112; server 1113; } 2.权重 weight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。 # 权重越高,在被访问的概率越大,如上例,分别是20%,80%。 upstream backserver { server 1112 weight=2; server 1113 weight=8; } 3.ip_hash( IP绑定) 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题 upstream backserver { ip_hash; server 1112:88; server 1113:80; } fair(第三方插件)必须安装upstream_fair模块。 对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。# 哪个服务器的响应速度快,就将请求分配到那个服务器上。 upstream backserver { server server1; server server2; fair; } 5.url_hash(第三方插件)必须安装Nginx的hash软件包 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } 如何用Nginx解决前端跨域问题?使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。Nginx虚拟主机怎么配置?`1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台3、基于ip的虚拟主机。基于虚拟主机配置域名需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件; # 当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件 server { listen 80; server_name www.lijie.com; location / { root data/www; index index.html index.htm; } } # 当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件 server { listen 80; server_name bbs.lijie.com; location / { root data/bbs; index index.html index.htm; } } 基于端口的虚拟主机使用端口来区分,浏览器使用域名或ip地址:端口号 访问# 当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件 server { listen 8080; server_name 8080.lijie.com; location / { root data/www; index index.html index.htm; } } # 当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080 server { listen 80; server_name www.lijie.com; location / { proxy_pass http://127.0.0.1:8080; index index.html index.htm; } } location的作用是什么?location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。location的语法能说出来吗?注意:~ 代表自己输入的英文字母Location正则案例# 优先级1,精确匹配,根路径 location =/ { return 400; } # 优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写 location ^~ /av { root /data/av/; } # 优先级3,区分大小写的正则匹配,匹配/media*****路径 location ~ /media { alias /data/static/; } # 优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里 location ~* .*\.(jpg|gif|png|js|css)$ { root /data/av/; } # 优先7,通用匹配 location / { return 403; } 限流怎么做的?Nginx限流就是限制用户请求速度,防止服务器受不了限流有3种 正常限制访问频率(正常流量) 突发限制访问频率(突发流量) 限制并发连接数Nginx的限流都是基于漏桶流算法 实现三种限流算法 1、正常限制访问频率(正常流量):限制一个用户发送的请求,我Nginx多久接收一个请求。 Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。# 定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; # 绑定限流维度 server{ location /seckill.html{ limit_req zone=zone; proxy_pass http://lj_seckill; } } 1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。 2、突发限制访问频率(突发流量):限制一个用户发送的请求,我Nginx多久接收一个。 上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数:# 定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; # 绑定限流维度 server{ location/seckill.html{ limit_req zone=zone burst=5 nodelay; proxy_pass http://lj_seckill; } } 为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我Nginx就漏掉不接受你的请求 3、 限制并发连接数Nginx中的 ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下:http { limit_conn_zone $binary_remote_addr zone=myip:10m; limit_conn_zone $server_name zone=myServerName:10m; } server { location / { limit_conn myip 10; limit_conn myServerName 100; rewrite / http://www.rumenz.net permanent; } } 上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。漏桶流算法和令牌桶算法知道?一文搞定,手撸Springboot + aop + Lua分布式限流的最佳实践_vincent-CSDN博客_springboot如何限流漏桶算法:漏桶算法思路很简单,我们把水比作是请求,漏桶比作是系统处理能力极限,水先进入到漏桶里,漏桶里的水按一定速率流出,当流出的速率小于流入的速率时,由于漏桶容量有限,后续进入的水直接溢出(拒绝请求),以此实现限流。springboot + aop + Lua分布式限流的最佳实践令牌桶算法:令牌桶算法的原理也比较简单,我们可以理解成医院的挂号看病,只有拿到号以后才可以进行诊病。系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时,则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。springboot + aop + Lua分布式限流的最佳实践Nginx配置高可用性怎么配置?当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用Nginx配置代码:server { listen 80; server_name www.rumenz.com; location / { ### 指定上游服务器负载均衡服务器 proxy_pass http://backServer; ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间 proxy_connect_timeout 1s; ###nginx发送给上游服务器(真实访问的服务器)超时时间 proxy_send_timeout 1s; ### nginx接受上游服务器(真实访问的服务器)超时时间 proxy_read_timeout 1s; index index.html index.htm; } } Nginx怎么判断别IP不可访问?# 如果访问的ip地址为11115,则返回403 if ($remote_addr = 11115) { return 403; } 在nginx中,如何使用未定义的服务器名称来阻止处理请求?只需将请求删除的服务器就可以定义为:服务器名被保留一个空字符串,他在没有主机头字段的情况下匹配请求,而一个特殊的nginx的非标准代码被返回,从而终止连接。怎么限制浏览器访问?## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500 if ($http_user_agent ~ Chrome) { return 500; } Rewrite全局变量是什么?$remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客户端port,如:50472 $remote_user //已经经过Auth Basic Module验证的用户名 $host //请求主机头字段,否则为服务器名称,如:blog.sakmon.com $request //用户请求信息,如:GET ?a=1&b=2 HTTP/1.1 $request_filename //当前请求的文件的路径名,由root或alias和URI request组合而成,如:/2013/81.html $status //请求的响应状态码,如:200 $body_bytes_sent // 响应时送出的body字节数数量。即使连接中断,这个数据也是精确的,如:40 $content_length // 等于请求行的“Content_Length”的值 $content_type // 等于请求行的“Content_Type”的值 $http_referer // 引用地址 $http_user_agent // 客户端agent信息,如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 $args //与$query_string相同 等于当中URL的参数(GET),如a=1&b=2 $document_uri //与$uri相同 这个变量指当前的请求URI,不包括任何参数(见$args) 如:/2013/81.html $document_root //针对当前请求的根路径设置值 $hostname //如:centos53.localdomain $http_cookie //客户端cookie信息 $cookie_COOKIE //cookie COOKIE变量的值 $is_args //如果有$args参数,这个变量等于”?”,否则等于”",空值,如? $limit_rate //这个变量可以限制连接速率,0表示不限速 $query_string // 与$args相同 等于当中URL的参数(GET),如a=1&b=2 $request_body // 记录POST过来的数据信息 $request_body_file //客户端请求主体信息的临时文件名 $request_method //客户端请求的动作,通常为GET或POST,如:GET $request_uri //包含请求参数的原始URI,不包含主机名,如:/2013/81.html?a=1&b=2 $scheme //HTTP方法(如http,https),如:http $uri //这个变量指当前的请求URI,不包括任何参数(见$args) 如:/2013/81.html $request_completion //如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty),如:OK $server_protocol //请求使用的协议,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1 $server_addr //服务器IP地址,在完成一次系统调用后可以确定这个值 $server_name //服务器名称,如:blog.sakmon.com $server_port //请求到达服务器的端口号,如:80 Nginx 如何实现后端服务的健康检查?方式一,利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。方式二(推荐),利用nginx_upstream_check_module 模块对后端节点做健康检查。Nginx 如何开启压缩?开启nginx gzip压缩后,网页、css、js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验。虽然会消耗cpu资源,但是为了给用户更好的体验是值得的。开启的配置如下:将以上配置放到nginx.conf的http{ … }节点中。http { # 开启gzip gzip on; # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩 gzip_min_length 1k; # gzip 压缩级别 1-10 gzip_comp_level 2; # 进行压缩的文件类型。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on; } 保存并重启nginx,刷新页面(为了避免缓存,请强制刷新)就能看到效果了。以谷歌浏览器为例,通过F12看请求的响应头部:我们可以先来对比下,如果我们没有开启zip压缩之前,我们的对应的文件大小,如下所示:现在我们开启了gzip进行压缩后的文件的大小,可以看到如下所示:gzip压缩前后效果对比:jquery原大小90kb,压缩后只有30kb。gzip虽然好用,但是以下类型的资源不建议启用。 1、图片类型原因:图片如jpg、png本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。(Tips:可以试试将一张jpg图片压缩为zip,观察大小并没有多大的变化。虽然zip和gzip算法不一样,但是可以看出压缩图片的价值并不大) 2、大文件原因:会消耗大量的cpu资源,且不一定有明显的效果。 ngx_http_upstream_module的作用是什么?ngx_http_upstream_module用于定义可通过fastcgi传递、proxy传递、uwsgi传递、memcached传递和scgi传递指令来引用的服务器组。什么是C10K问题?C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。Nginx是否支持将请求压缩到上游?您可以使用Nginx模块gunzip将请求压缩到上游。gunzip模块是一个过滤器,它可以对不支持gzip编码方法的客户机或服务器使用内容编码:gzip来解压缩响应。如何在Nginx中获得当前的时间?要获得Nginx的当前时间,必须使用SSI模块、和date_local的变量。Proxy_set_header THE-TIME $date_gmt;用Nginx服务器解释-s的目的是什么?用于运行Nginx -s参数的可执行文件。如何在Nginx服务器上添加模块?在编译过程中,必须选择Nginx模块,因为Nginx不支持模块的运行时间选择。生产中如何设置worker进程的数量呢?在有多个cpu的情况下,可以设置多个worker,worker进程的数量可以设置到和cpu的核心数一样多,如果在单个cpu上起多个worker进程,那么操作系统会在多个worker之间进行调度,这种情况会降低系统性能,如果只有一个cpu,那么只启动一个worker进程就可以了。nginx状态码 499:服务端处理时间过长,客户端主动关闭了连接。 502 服务器错误下面是502的一些可能性 (1).FastCGI进程是否已经启动(2).FastCGI worker进程数是否不够(3).FastCGI执行时间过长fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; (4).FastCGI Buffer不够,nginx和apache一样,有前端缓冲限制,可以调整缓冲参数 fastcgi_buffer_size 32k; fastcgi_buffers 8 32k; (5). Proxy Buffer不够,如果你用了Proxying,调整 proxy_buffer_size 16k; proxy_buffers 4 16k 转载引用出处https://www.toutiao.com/i7074868404070662693/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1647313048&app=news_article&utm_source=weixin&utm_medium=toutiao_android&use_new_style=1&req_id=2022031510572701021004914907E6D22A&share_token=0ff6a301-6b03-4ebe-ae13-2bb074b93cf1&group_id=7074868404070662693
2022年03月15日
186 阅读
0 评论
0 点赞
2022-03-13
css特性
一、css三大特性1、层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则: 样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式 样式不冲突,不会层叠 2、继承性 CSS中的继承: 子标签会继承父标签的某些样式,如文本颜色和字号。恰当地使用继承可以简化代码,降低 CSS 样式的复杂性。子元素可以继承父元素的样式: (text-,font-,line-这些元素开头的可以继承,以及color属性)继承性口诀:龙生龙,凤生凤,老鼠生的孩子会打洞行高的继承性: body { font:12px/1.5 Microsoft YaHei; } 行高可以跟单位也可以不跟单位 如果子元素没有设置行高,则会继承父元素的行高为 1.5 此时子元素的行高是:当前子元素的文字大小 * 1.5 body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高 3、优先级当同一个元素指定多个选择器,就会有优先级的产生。 选择器相同,则执行层叠性 选择器不同,则根据选择器权重执行 选择器优先级计算表格:优先级注意点: 权重是有4组数字组成,但是不会有进位。 可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推.. 等级判断从左向右,如果某一位数值相同,则判断下一位数值。 可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大. 继承的权重是0, 如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是 0。 权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重。 div ul li ------> 0,0,0,3 .nav ul li ------> 0,0,1,2 a:hover -----—> 0,0,1,1 .nav a ------> 0,0,1,1 二、盒子模型1、网页布局的本质网页布局的核心本质: 就是利用 CSS 摆盒子。网页布局过程: 先准备好相关的网页元素,网页元素基本都是盒子 Box 。 利用 CSS 设置好盒子样式,然后摆放到相应位置。 往盒子里面装内容 2、盒子模型(Box Model)组成 盒子模型:把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容3、边框(border)3.1、边框的使用1、border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色;2、语法: border : border-width || border-style || border-color; 边框样式 border-style 可以设置如下值: none:没有边框即忽略所有边框的宽度(默认值) solid:边框为单实线(最为常用的) dashed:边框为虚线 dotted:边框为点线 3、边框的合写分写边框简写: border: 1px solid red; 边框分开写法: border-top: 1px solid red; /* 只设定上边框, 其余同理 */ 3.2、表格的细线边框1、border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。2、语法: border-collapse:collapse; collapse 单词是合并的意思border-collapse: collapse; 表示相邻边框合并在一起3.3、边框会影响盒子实际大小边框会额外增加盒子的实际大小。因此我们有两种方案解决: 测量盒子大小的时候,不量边框。 如果测量的时候包含了边框,则需要 width/height 减去边框宽度 4、内边距(padding)4.1、内边距的使用方式1、padding 属性用于设置内边距,即边框与内容之间的距离。2、语法:合写属性:分写属性:4.2、内边距会影响盒子实际大小1、当我们给盒子指定 padding 值之后,发生了 2 件事情: 内容和边框有了距离,添加了内边距。 padding影响了盒子实际大小。 2、内边距对盒子大小的影响: 如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。 如何盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小。 3、解决方案: 如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。5、外边距(margin)5.1、外边距的使用方式margin 属性用于设置外边距,即控制盒子和盒子之间的距离。5.2、外边距典型应用外边距可以让块级盒子水平居中的两个条件: 盒子必须指定了宽度(width)。 盒子左右的外边距都设置为 auto 。 常见的写法,以下三种都可以:margin-left: auto; margin-right: auto; margin: auto; margin: 0 auto; 注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。5.3、外边距合并使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。主要有两种情况:1、相邻块元素垂直外边距的合并 当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。解决方案:尽量只给一个盒子添加 margin 值。2、嵌套块元素垂直外边距的塌陷 对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。解决方案: 可以为父元素定义上边框。 可以为父元素定义上内边距。 可以为父元素添加 overflow:hidden。 5.4、清除内外边距 网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。 * { padding:0; /* 清除内边距 */ margin:0; /* 清除外边距 */ } 注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了三、PS 基本操作 因为网页美工大部分效果图都是利用 PS(Photoshop)来做的,所以以后我们大部分切图工作都是在 PS 里面完成。 部分操作: 文件→打开 :可以打开我们要测量的图片 Ctrl+R:可以打开标尺,或者 视图→标尺 右击标尺,把里面的单位改为像素 Ctrl+ 加号(+)可以放大视图, Ctrl+ 减号(-)可以缩小视图 按住空格键,鼠标可以变成小手,拖动 PS 视图 用选区拖动 可以测量大小 Ctrl+ D 可以取消选区,或者在旁边空白处点击一下也可以取消选区
2022年03月13日
153 阅读
0 评论
0 点赞
2022-03-11
css选择器
一、emmet语法1、简介 Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法。 快速生成HTML结构语法 快速生成CSS样式语法2、快速生成HTML结构语法 生成标签 直接输入标签名 按tab键即可 比如 div 然后tab 键, 就可以生成 <div></div> 如果想要生成多个相同标签 加上 * 就可以了 比如 div*3 就可以快速生成3个div 如果有父子级关系的标签,可以用 > 比如 ul > li就可以了 如果有兄弟关系的标签,用 + 就可以了 比如 div+p 如果生成带有类名或者id名字的, 直接写 .demo 或者 #two tab 键就可以了 如果生成的div 类名是有顺序的, 可以用 自增符号 $ 如果想要在生成的标签内部写内容可以用 花括号 { } 表示 3、快速生成CSS样式语法CSS 基本采取简写形式即可 比如 w200 按tab 可以 生成 width: 200px; 比如 lh26px 按tab 可以生成 line-height: 26px;4、快速格式化代码Vscode 快速格式化代码: shift+alt+f也可以设置 当我们 保存页面的时候自动格式化代码:1)文件 ------.>【首选项】---------->【设置】;2)搜索emmet.include;3)在settings.json下的【工作区设置】中添加以下语句: "editor.formatOnType": true, "editor.formatOnSave": true二、css的复合选择器1、什么是复合选择器? 在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,可以更准确、更高效的选择目标元素(标签) 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等2、后代选择器 (重要)定义: 后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。语法: 上述语法表示选择元素 1 里面的所有元素 2 (后代元素)。语法说明: 元素1 和 元素2 中间用空格隔开 元素1 是父级,元素2 是子级,最终选择的是元素2 元素2 可以是儿子,也可以是孙子等,只要是元素1 的后代即可 元素1 和 元素2 可以是任意基础选择器 例子:3、子选择器 (重要)定义: 子元素选择器(子选择器)只能选择作为某元素的最近一级子元素。 (简单理解就是选亲儿子元素)语法: 上述语法表示选择元素1 里面的所有直接后代(子元素) 元素2。语法说明: 元素1 和 元素2 中间用 大于号 隔开 元素1 是父级,元素2 是子级,最终选择的是元素2 元素2 必须是亲儿子,其孙子、重孙之类都不归他管. 你也可以叫他 亲儿子选择器 例子:4、并集选择器 (重要)定义: 并集选择器可以选择多组标签, 同时为他们定义相同的样式,通常用于集体声明。并集选择器是各选择器通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分。语法: 上述语法表示选择元素1 和 元素2。语法说明: 元素1 和 元素2 中间用逗号隔开 逗号可以理解为和的意思 并集选择器通常用于集体声明 例子:5、伪类选择器定义: 伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。语法: 伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。6、链接伪类选择器定义: 伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。语法: 伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。 a:link 没有点击过的(访问过的)链接 a:visited 点击过的(访问过的)链接 a:hover 鼠标经过的那个链接 a:active 鼠标正在按下还没有弹起鼠标的那个链接链接伪类选择器注意事项 为了确保生效,请按照 LVHA 的循顺序声明 :link-:visited-:hover-:active。 记忆法:love hate 或者 lv 包包 hao 。 因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。链接伪类选择器实际工作开发中的写法:7、:focus 伪类选择器定义: :focus 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标,一般情况 类表单元素才能获取例子:复合选择器总结三、css的显示模式1、什么是元素的显示模式定义: 元素显示模式就是元素(标签)以什么方式进行显示,比如自己占一行,比如一行可以放多个。作用: 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。2、元素显示模式的分类2.1、块元素常见的块元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li> 标签是最典型的块元素。块级元素的特点: 比较霸道,自己独占一行。 高度,宽度、外边距以及内边距都可以控制。 宽度默认是容器(父级宽度)的100%。 是一个容器及盒子,里面可以放行内或者块级元素。 注意: 文字类的元素内不能放块级元素<p> 标签主要用于存放文字,因此 <p> 里面不能放块级元素,特别是不能放<div> 同理, <h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素 2.2、行内元素常见的行内元素:<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span> <span> 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。行内元素的特点: 相邻行内元素在一行上,一行可以显示多个。 高、宽直接设置是无效的。 默认宽度就是它本身内容的宽度。 行内元素只能容纳文本或其他行内元素。 注意:链接里面不能再放链接特殊情况链接 里面可以放块级元素,但是给 转换一下块级模式最安全2.3、行内块元素常见的行内块标签:<img />、<input />、<td> 它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素。行内块元素的特点: 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。 一行可以显示多个(行内元素特点)。 默认宽度就是它本身内容的宽度(行内元素特点)。 高度,行高、外边距以及内边距都可以控制(块级元素特点)。 2.4、元素显示模式总结 学习元素显示模式的主要目的就是分清它们各自的特点,当我们网页布局的时候,在合适的地方用合适的标签元素。3、元素显示模式的转换简单理解: 一个模式的元素需要另外一种模式的特性 比如想要增加链接 <a> 的触发范围。转换方式 转换为块元素:display:block; 转换为行内元素:display:inline; 转换为行内块:display: inline-block; 4、单行文字垂直居中的代码解决方案: 让文字的行高等于盒子的高度 就可以让文字在当前盒子内垂直居中简单理解: 行高的上空隙和下空隙把文字挤到中间了, 如果行高小于盒子高度,文字会偏上, 如果行高大于盒子高度,则文字偏下。四、css的背景通过 CSS 背景属性,可以给页面元素添加背景样式。背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。1、背景颜色样式名称: background-color 定义元素的背景颜色使用方式:其他说明: 元素背景颜色默认值是 transparent(透明)2、背景图片样式名称: background-image 定义元素的背景图片使用方式:其他说明: 实际开发常见于 logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景) 注意:背景图片后面的地址,千万不要忘记加 URL, 同时里面的路径不要加引号。3、背景平铺样式名称: background-repeat 设置元素背景图像的平铺使用方式:4、背景图片位置样式名称: background-position 属性可以改变图片在背景中的位置使用方式: 参数代表的意思是:x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位其他说明:1、参数是方位名词 如果指定的两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐2、参数是精确单位 如果参数值是精确坐标,那么第一个肯定是 x 坐标,第二个一定是 y 坐标 如果只指定一个数值,那该数值一定是 x 坐标,另一个默认垂直居中3、参数是混合单位 如果指定的两个值是精确单位和方位名词混合使用,则第一个值是 x 坐标,第二个值是 y 坐标5、背景图片固定样式名称: background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动。使用方式: 其他说明: background-attachment 后期可以制作视差滚动的效果。6、背景样式合写背景合写样式: background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;使用方式:7、背景色半透明CSS3 提供了背景颜色半透明的效果。使用方式: 最后一个参数是 alpha 透明度,取值范围在 0~1之间 我们习惯把 0.3 的 0 省略掉,写为 background: rgba(0, 0, 0, .3); 注意: 背景半透明是指盒子背景半透明,盒子里面的内容不受影响 CSS3 新增属性,是 IE9+ 版本浏览器才支持的,但是现在实际开发,我们不太关注兼容性写法了,可以放心使用 8、背景总结
2022年03月11日
190 阅读
0 评论
0 点赞
2022-03-09
本站官方群:894703859------|诚邀各位大佬的入驻!
运维开发微服务自动化
2022年03月09日
638 阅读
0 评论
3 点赞
2022-03-07
css基础
css基础css简介CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。 CSS 让我们的网页更加丰富多彩,布局更加灵活自如。简单理解:CSS 可以美化 HTML , 让 HTML 更漂亮, 让页面布局更简单。 CSS 最大价值: 由 HTML 专注去做结构呈现,样式交给 CSS,即 结构 ( HTML ) 与样式( CSS ) 相分离 css语法规范1.使用 HTML 时,需要遵从一定的规范,CSS 也是如此。要想熟练地使用 CSS 对网页进行修饰,首先需要了解CSS 样式规则。 2.CSS 规则由两个主要的部分构成:选择器以及一条或多条声明。 1.选择器是用于指定 CSS 样式的 HTML 标签,花括号内是对该对象设置的具体样式2.属性和属性值以“键值对”的形式出现3.属性是对指定的对象设置的样式属性,例如字体大小、文本颜色等4.属性和属性值之间用英文“:”分开5.多个“键值对”之间用英文“;”进行区分例如:```所有的样式,都包含在 <style> 标签内,表示是样式表。<style> 一般写到 </head> 上方 <head> <style> h4 { color: blue; font-size: 100px; } </style> </head> ``` css代码风格: 1. 样式格式书写 1.紧凑格式 h3 { color: deeppink;font-size: 20px;} 2.展开格式 h3 { color: pink; font-size: 20px; } 强烈推荐第二种格式, 因为更直观。 2. 样式大小写风格 1.小写格式 h3 { color: pink; } 2.大写格式 H3 { COLOR: PINK; } 强烈推荐样式选择器,属性名,属性值关键字全部使用小写字母,特殊情况除外。 3. 样式空格风格 1. h3 { color: pink; } 属性值前面,冒号后面,保留一个空格 选择器(标签)和大括号中间保留空格 css选择器的作用答:选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说,就是选择标签用的。 找到所有的 h1 标签。 选择器(选对人)设置这些标签的样式,比如颜色为红色(做对事)。css基础选择器基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器标签选择器:标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。 语法:标签选择器{属性:属性值...}作用:标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。###类选择器如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器.语法:.类名 {属性1: 属性值1;...}结构需要用class属性来调用 class 类的意思<div class="类名"> 变红色 </div>1.如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器。2.类选择器在 HTML 中以 class 属性表示,在 CSS 中,类选择器以一个点“.”号显示。3.类选择器使用“.”(英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)。4.可以理解为给这个标签起了一个名字,来表示。5.长名称或词组可以使用中横线来为选择器命名。6.不要使用纯数字、中文等命名,尽量使用英文字母来表示。7.命名要有意义,尽量使别人一眼就知道这个类名的目的。8.命名规范:见附件( Web 前端开发规范手册.doc)###多类名选择器我们可以给一个标签指定多个类名,从而达到更多的选择目的。 这些类名都可以选出这个标签.简单理解就是一个标签有多个名字.多类名的具体使用: 注意: 1.在标签class 属性中写 多个类名 2.多个类名中间必须用空格分开 3.这个标签就可以分别具有这些类名的样式 id选择器:id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML 元素以 id 属性来设置 id 选择器,CSS 中 id 选择器以“#" 来定义。 语法: #id名 { 属性1: 属性值1; ... } 注意:id 属性只能在每个 HTML 文档中出现一次 id选择器和类选择器的区别:1.类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用。 2.id 选择器好比人的身份证号码,全中国是唯一的,不得重复。 3.id 选择器和类选择器最大的不同在于使用次数上。 4.类选择器在修改样式中用的最多,id 选择器一般用于页面唯一性的元素上,经常和 JavaScript 搭配使用。 通配符选择器:语法: * { 属性1: 属性值1; ... } 通配符选择器不需要调用, 自动就给所有的元素使用样式 特殊情况才使用,后面讲解使用场景(以下是清除所有的元素标签的内外边距,后期讲) margin: 0; padding: 0; } 选择器总结css字体属性:字体大小:CSS 使用 font-size 属性定义字体大小。 语法:p { font-size: 20px; } 1.px(像素)大小是我们网页的最常用的单位 2.谷歌浏览器默认的文字大小为16px 3.不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小 4.可以给 body 指定整个页面文字的大小 字体粗细:CSS 使用 font-weight 属性设置文本字体的粗细。 语法:p { font-weight: bold; } 1.学会让加粗标签(比如 h 和 strong 等) 不加粗,或者其他标签加粗2.实际开发时,我们更喜欢用数字表示粗细字体样式:CSS 使用 font-style 属性设置文本的风格。 语法: p { font-style: normal; } 字体的综合写法字体属性可以把以上文字样式综合来写, 这样可以更节约代码:body { font: font-style font-weight font-size/line-height font-family;} 使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开 不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用字体总结:css文本属性:文本颜色:color 属性用于定义文本的颜色。 语法:div { color: red; } 开发中最常用的是十六进制文本对齐:text-align 属性用于设置元素内文本内容的水平对齐方式。div { text-align: center; } 修饰文本: div { text-decoration:underline; } 重点记住如何添加下划线 ? 如何删除下划线 ? 其余了解即可.文本缩进 div { text-indent:20px; } div { text-indent:2em; } em 是一个相对单位,就是当前元素(font-size) 1 个文字的大小, 如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。 行间距:line-height 属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离 p { line-height: 26px; } 行高的文本分为 上间距 文本高度 下间距 = 行间距 css样式表:按照 CSS 样式书写的位置(或者引入的方式),CSS 样式表可以分为三大类: 行内样式表(行内式) 行内样式表(内联样式表)是在元素标签内部的 style 属性中设定 CSS 样式。适合于修改简单样式. 语法: <div style="color: red; font-size: 12px;">青春不常在,抓紧谈恋爱</div> 1.style 其实就是标签的属性 在双引号中间,写法要符合 CSS 规范 2.可以控制当前的标签设置样式 3.由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只有对当前元素添加简单样式的时候,可以考虑使用 4.使用行内样式表设定 CSS,通常也被称为行内式引入 内部样式表(嵌入式) 内部样式表(内嵌样式表)是写到html页面内部. 是将所有的 CSS 代码抽取出来,单独放到一个 <style> 标签中 语法: <style> div { color: red; font-size: 12px; } </style> 1.<style> 标签理论上可以放在 HTML 文档的任何地方,但一般会放在文档的<head>标签中 2.通过此种方式,可以方便控制当前整个页面中的元素样式设置 3.代码结构清晰,但是并没有实现结构与样式完全分离 4.使用内部样式表设定 CSS,通常也被称为嵌入式引入,这种方式是我们练习时常用的方式 外部样式表(链接式)实际开发都是外部样式表. 适合于样式比较多的情况. 核心是:样式单独写到CSS 文件中,之后把CSS文件引入到 HTML 页面中使用. 引入外部样式表分为两步: 1. 新建一个后缀名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。 2. 在 HTML 页面中,使用<link> 标签引入这个文件。 语法: <link rel="stylesheet" href="css文件路径"> Chrome调试工具:1.Ctrl+滚轮 可以放大开发者工具代码大小。2.左边是 HTML 元素结构,右边是 CSS 样式。3.右边 CSS 样式可以改动数值(左右箭头或者直接输入)和查看颜色。4.Ctrl + 0 复原浏览器大小。5.如果点击元素,发现右侧没有样式引入,极有可能是类名或者样式引入错误。6.如果有样式,但是样式前面有黄色叹号提示,则是样式属性书写错误。
2022年03月07日
152 阅读
0 评论
1 点赞
2022-03-03
html基础标签
HTML基础我们接下来是进行的网页开发网页的相关概念: 什么是网页? 什么是HTML? 网页的形成? 什么是网页:1.网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。 2.网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页的组成:1.网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常我们看到的网页,常见以 .htm 或 .html 后缀结尾的文件,因此将其俗称为 HTML 文件。 什么是HTML:1.HTML 指的是超文本标记语言 (Hyper Text Markup Language) ,它是用来描述网页的一种语言。 2.HTML 不是一种编程语言,而是一种标记语言 (markup language)。 标记语言是一套标记标签 (markup tag)。 网页的总结:1.网页是图片、链接、文字、声音、视频等元素组成, 其实就是一个html文件(后缀名为html) 2.网页生成制作: 有前端人员书写 HTML 文件, 然后浏览器打开,就能看到了网页. 3.HTML: 超文本标记语言, 用来制作网页的一门语言. 有标签组成的. 比如 图片标签 链接标签 视频标签等… 浏览器:常用的浏览器 IE 火狐 谷歌 苹果 欧朋 浏览器是网页显示、运行的平台。常用的浏览器有 IE、火狐(Firefox)、谷歌(Chrome)、Safari和Opera等。平时称为五大浏览器。 查看浏览器市场份额:http://tongji.baidu.com/data/browser浏览器内核(渲染引擎) 负责读取网页内容,整理讯息,计算网页的显示方式并显示页面 目前国内一般浏览器都会采用 Webkit/Blink 内核,如 360、UC、QQ、搜狗等。 web标准: Web 标准是由 W3C 组织和其他标准化组织制定的一系列标准的集合。W3C(万维网联盟)是国际最著名的标准化组织。 为什么需要Web标准: 浏览器不同,它们显示页面或者排版就有些许差异 遵循 Web 标准除了可以让不同的开发人员写出的页面更标准、更统一外,还有以下优点:1.让 Web 的发展前景更广阔。2.内容能被更广泛的设备访问。3.更容易被搜寻引擎搜索。4.降低网站流量费用。5.使网站更易于维护。6.提高页面浏览速度。 web标准的构成:主要包括 《结构Structure》 、《表现(Presentation)》和《行为(Behavior)》三个方面。 Web 标准提出的最佳体验方案:结构、样式、行为相分离。简单理解:结构写到 HTML 文件中, 表现写到 CSS 文件中, 行为写到 JavaScript 文件中1.结构类似身体2.表现类似外观装饰3.行为类似行为动作4.相比较而言, 三者中结构最重要.HTML标签的导读:HTML语法规则:1.HTML 标签是由尖括号包围的关键词,例如 <html>。 2.HTML 标签通常是成对出现的,例如 <html> 和 </html> ,我们称为**双标签**。 3.签。标签对中的第一个标签是开始标签,第二个标签是结束标签。 有些特殊的标签必须是单个标签(极少情况),例如,我们称为单标签。标签的关系:双标签关系可以分为两类:包含关系和并列关系 包含标签: <head> <title> </title> </head> 并列关系: 基本结构标签:每个网页都会有一个基本的结构标签(也称为骨架标签),页面内容也是在这些基本标签上书写 开发工具:VSCode的使用:1. 双击打开软件。2. 新建文件(Ctrl + N )。3. 保存(Ctrl + S ), 注意移动要保存为 .html 文件4. Ctrl + 加号键 ,Ctrl + 减号键 可以放大缩小视图5. 生成页面骨架结构。 输入! 按下 Tab 键。6. 利用插件在浏览器中预览页面:单击鼠标右键,在弹出窗口中点击“Open In Default Browser”。DOCTYPE 文档类型声明标签,告诉浏览器这个页面采取html5版本来显示页面.lang 语言种类用来定义当前文档显示的语言。en定义语言为英语zh-CN定义语言为中文简单来说,定义为en 就是英文网页, 定义为 zh-CN 就是中文网页其实对于文档显示来说,定义成en的文档也可以显示中文,定义成zh-CN的文档也可以显示英文这个属性对浏览器和搜索引擎(百度.谷歌等)还是有作用的字符集1.字符集 (Character set)是多个字符的集合。以便计算机能够识别和存储各种文字。2.在标签内,可以通过 标签的 charset 属性来规定 HTML 文档应该使用哪种字符编码。3.4.charset 常用的值有:GB2312 、BIG5 、GBK 和 UTF-8,其中 UTF-8 也被称为万国码,基本包含了全世界所有国家需要用到的字符.5.注意:上面语法是必须要写的代码,否则可能引起乱码的情况。一般情况下,统一使用“UTF-8”编码,尽量统一写成标准的 "UTF-8",不要写成 "utf8" 或 "UTF8"。语义化标签:学习标签是有技巧的,重点是记住每个标签的语义。简单理解就是指标签的含义,即这个标签是用来干嘛的。 什么是语义化标签:根据标签的语义,在合适的地方给一个最为合理的标签,可以让页面结构更清晰。 下图没有语义化标签: 添加语义标签:常用的标签:标题标签**标题标签 <h1> - <h6>(重要)** 为了使网页更具有语义化,我们经常会在页面中用到标题标签。HTML 提供了 6 个等级的网页标题,即<h1> - <h6> 。 具体实现: <h1> 我是一级标题 </h1> 特点: 1.加了标题的文字会变的加粗,字号也会依次变大。 2. 一个标题独占一行。 来!!!左边。。。右边。。。中间: <h1>标题一共六级选,</h1> <h2>文字加粗一行显。</h2> <h3>由大到小依次减,</h3> <h4>从重到轻随之变。</h4> <h5>语法规范书写后,</h5> <h6>具体效果刷新见。</h6> 段落标签:在网页中,要把文字有条理地显示出来,就需要将这些文字分段显示。在 HTML 标签中,<p>标签用于定义段落,它可以将整个网页分为若干个段落。 具体实现: <p> 我是一个段落标签 </p> 特点: 1. 文本在一个段落中会根据浏览器窗口的大小自动换行。 2. 段落和段落之间保有空隙。 换行标签在 HTML 中,一个段落中的文字会从左到右依次排列,直到浏览器窗口的右端,然后才自动换行。如果希望某段文本强制换行显示,就需要使用换行标签 <br />。 具体实现: <br /> 特点: 1. <br /> 是个单标签。 2. <br /> 标签只是简单地开始新的一行,跟段落不一样,段落之间会插入一些垂直的间距。 文本格式化标签:在网页中,有时需要为文字设置粗体、斜体 或下划线等效果,这时就需要用到 HTML 中的文本格式化标签,使文字以特殊的方式显示。 div和span标签<div> 和 <span> 是没有语义的,它们就是一个盒子,用来装内容的。 具体实现: <div> 这是头部 </div> <span> 今日价格 </span> 特点: 1. <div> 标签用来布局,但是现在一行只能放一个<div>。 大盒子 2. <span> 标签用来布局,一行上可以多个 <span>。小盒子 图片标签:在 HTML 标签中,<img> 标签用于定义 HTML 页面中的图像。 具体实现: <img src="图像URL" /> 解释: src 是<img>标签的必须属性,它用于指定图像文件的路径和文件名。 所谓属性:简单理解就是属于这个图像标签的特性。 图像标签的其他属性: 图像标签注意点:1.图像标签可以拥有多个属性,必须写在标签名的后面。2.属性之间不分先后顺序,标签名与属性、属性与属性之间均以空格分开。3.属性采取键值对的格式,即 key=“value" 的格式,属性 =“属性值”。路径:分为相对路径和绝对路径: **路径之相对路径** 相对路径:以引用文件所在位置为参考基础,而建立出的目录路径。 这里简单来说,图片相对于 HTML 页面的位置 特点:相对路径是从代码所在的这个文件出发,去寻找目标文件的,而我们这里所说的上一级 、下一级和同一级就是 图片相对于 HTML 页面的位置。路径之绝对路径:绝对路径:1.是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。例如,“D:\web\img\logo.gif”链接标签: 链接的语法格式 <a href="跳转目标" target="目标窗口的弹出方式"> 文本或图像 </a> 属性: 1.href:用于指定链接目标的url地址 2.target:用于指定链接页面的打开方式_self默认值 _blank新窗口打开 3.#:空链接 链接分类:1.外部链接: 例如 < a href="http:// www.baidu.com "> 百度。2.内部链接:网站内部页面之间的相互链接. 直接链接内部页面名称即可,例如 < a href="index.html"> 首页 。3.空链接: 如果当时没有确定链接目标时,< a href="#"> 首页 。4.下载链接: 如果 href 里面地址是一个文件或者压缩包,会下载这个文件。5.网页元素链接: 在网页中的各种网页元素,如文本、图像、表格、音频、视频等都可以添加超链接.6.锚点链接: 点我们点击链接,可以快速定位到页面中的某个位置. 在链接文本的 href 属性中,设置属性值为 #名字 的形式,如<a href="#two"> 第2集 </a> 找到目标位置标签,里面添加一个 id 属性 = 刚才的名字 ,如:<h3 id="two">第2集介绍</h3> 注释如果需要在 HTML 文档中添加一些便于阅读和理解但又不需要显示在页面中的注释文字,就需要使用注释标签。 HTML中的注释以“”结束。具体实现: 快捷键: ctrl + /一句话: 注释标签里面的内容是给程序猿看的, 这个代码是不执行不显示到页面中的.添加注释是为了更好地解释代码的功能,便于相关开发人员理解和阅读代码,程序是不会执行注释内容的特殊字符:在 HTML 页面中,一些特殊的符号很难或者不方便直接使用,此时我们就可以使用下面的字符来替代。 重点记住:空格 、大于号、 小于号 这三个, 其余的使用很少,如果需要回头查阅即可。
2022年03月03日
142 阅读
0 评论
1 点赞
2022-03-02
html表格
html表格表格表格的主要作用1.表格主要用于显示、展示数据,因为它可以让数据显示的非常的规整,可读性非常好。特别是后台展示数据的时候,能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理 2.表格不是用来布局页面的,而是用来展示数据的。 3.表格的具体用法: <table> <tr> <td>单元格内的文字</td> ... </tr> ... </table> ``` 1.<table> </table> 是用于定义表格的标签。 2.<tr> </tr> 标签用于定义表格中的行,必须嵌套在 <table> </table>标签中。 3.<td> </td> 用于定义表格中的单元格,必须嵌套在<tr></tr>标签中。 4.字母 td 指表格数据(table data),即数据单元格的内容。 ``` 表头单元格标签: 表头标签的具体实现: ``` <table> <tr> <th>姓名</th> ... </tr> ... </table> ``` ``` 1.一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示. <th> 标签表示 HTML 表格的表头部分(table head 的缩写) 2.一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示. <th> 标签表示 HTML 表格的表头部分(table head 的缩写) 3.表头单元格也是单元格,常用于表格第一行突出重要性,表头单元格里面的文字会加粗居中 ``` 表格属性:1.表格标签这部分属性我们实际开发我们不常用,后面通过 CSS 来设置. ## 完成下面综合案例 思路:先制作表格的结构.1.第一行里面是 th 表头单元格2.第二行开始里面是 td 普通单元格单元格里面可以放任何元素3.文字链接图片等都可以后书写表格属性1.用到宽度高度边框cellpadding 和 cellspacing2.表格浏览器中对齐 align表格结构标签:使用场景: 因为表格可能很长,为了更好的表示表格的语义,可以将表格分割成 表格头部和表格主体两大部分. 在表格标签中,分别用:<thead>标签 表格的头部区域、<tbody>标签 表格的主体区域. 这样可以更好的分清表格结构。 总结:1. <thead></thead>:用于定义表格的头部。 内部必须拥有 标签。 一般是位于第一行。2. <tbody></tbody>:用于定义表格的主体,主要用于放数据本体 。3. 以上标签都是放在 <table></table> 标签中。合并单元格:特殊情况下,可以把多个单元格合并为一个单元格, 这里同学们会最简单的合并单元格即可. 1.合并单元格方式 2.目标单元格 3.合并单元格的步骤 如下图: 合并单元格方式:跨行合并:rowspan="合并单元格的个数" 最上侧单元格为目标单元格, 写合并代码跨列合并:colspan="合并单元格的个数" 最左侧单元格为目标单元格, 写合并代码合并单元格三步曲:先确定是跨行还是跨列合并。找到目标单元格. 写上合并方式 = 合并的单元格数量。比如:<td colspan=“2”></td>。删除多余的单元格。表格总结 表格学习整体可以分为三大部分:表格的相关标签 table thead body tr th td表格的相关属性 cellspacing cellpadding width height border合并单元格 rowspan colspan列表表格是用来显示数据的,那么列表就是用来布局的。 列表最大的特点就是整齐、整洁、有序,它作为布局会更加自由和方便。 根据使用情景不同,列表可以分为三大类:无序列表、有序列表和自定义列表。 无序: <ul> 标签表示 HTML 页面中项目的无序列表,一般会以项目符号呈现列表项,而列表项使用 <li> 标签定义。无序列表的基本语法格式如下: <ul> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> ... </ul> 无序列表的各个列表项之间没有顺序级别之分,是并列的。 <ul></ul> 中只能嵌套 <li></li>,直接在 <ul></ul> 标签中输入其他标签或者文字的做法是不被允许的。 <li> 与 </li> 之间相当于一个容器,可以容纳所有元素。 无序列表会带有自己的样式属性,但在实际使用时,我们会使用 CSS 来设置。 有序: 有序列表即为有排列顺序的列表,其各个列表项会按照一定的顺序排列定义。在 HTML 标签中,<ol> 标签用于定义有序列表,列表排序以数字来显示,并且使用 <li> 标签来定义列表项。有序列表的基本语法格式如下: <ol> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> ... </ol> <ol></ol>中只能嵌套<li></li>,直接在<ol></ol> 标签中输入其他标签或者文字的做法是不被允许的。 <li> 与 </li>之间相当于一个容器,可以容纳所有元素。 有序列表会带有自己样式属性,但在实际使用时,我们会使用 CSS 来设置。 自定义:自定义列表的使用场景:自定义列表常用于对术语或名词进行解释和描述,定义列表的列表项前没有任何项目符号。在 HTML 标签中,<dl> 标签用于定义描述列表(或定义列表),该标签会与 <dt>(定义项目/名字)和 <dd>(描述每一个项目/名字)一起使用。语法如下:<dl> <dt>名词1</dt> <dd>名词1解释1</dd> <dd>名词1解释2</dd> </dl>列表总结表单现实中的表单:为什么需要表单:使用表单目的是为了收集用户信息。 在我们网页中, 我们也需要跟用户进行交互,收集用户资料,此时就需要表单。 表单的组成:在 HTML 中,一个完整的表单通常由表单域、表单控件(也称为表单元素)和 提示信息3个部分构成。 表单域:表单域是一个包含表单元素的区域。 在 HTML 标签中, <form> 标签用于定义表单域,以实现用户信息的收集和传递。 <form> 会把它范围内的表单元素信息提交给服务器. 实现代码: <form action=“url地址” method=“提交方式” name=“表单域名称">各种表单元素控件</form> 表单域的常用属性:基础班来说,我们暂时不用表单域提交数据,只需要写上 form 标签即可. 就业班等学习服务器编程阶段会重新讲解.这里只需要记住两点:1.在我们写表单元素之前,应该有个表单域把他们进行包含.2.表单域是 form标签.表单控件(表单元素)<input> 表单元素在英文单词中,input 是输入的意思,而在表单元素中 <input> 标签用于收集用户信息。在 <input> 标签中,包含一个 type 属性,根据不同的 type 属性值,输入字段拥有很多种形式(可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等)。 <input type="属性值" /> <input /> 标签为单标签 type 属性设置不同的属性值用来指定不同的控件类型type 属性的属性值及其描述如下:除 type 属性外,<input>标签还有其他很多属性,其常用属性如下:<label> 标签<label> 标签为 input 元素定义标注(标签)。<label> 标签用于绑定一个表单元素, 当点击<label> 标签内的文本时,浏览器就会自动将焦点(光标)转到或者选择对应的表单元素上,用来增加用户体验.语法:<label for="sex">男</label> <input type="radio" name="sex" id="sex" /> 核心: <label> 标签的 for 属性应当与相关元素的 id 属性相同。 <select> 表单元素使用场景: 在页面中,如果有多个选项让用户选择,并且想要节约页面空间时,我们可以使用<select>标签控件定义下拉列表。语法: <select> <option>选项1</option> <option>选项2</option> <option>选项3</option> ... </select> <textarea> 表单元素 使用场景: 当用户输入内容较多的情况下,我们就不能使用文本框表单了,此时我们可以使用 <textarea> 标签。 在表单元素中,<textarea> 标签是用于定义多行文本输入的控件。 使用多行文本输入控件,可以输入更多的文字,该控件常见于留言板,评论。 语法:<textarea rows="3" cols="20"> 文本内容 \</textarea> 通过 <textarea> 标签可以轻松地创建多行文本输入框。cols=“每行中的字符数” ,rows=“显示的行数”,我们在实际开发中不会使用,都是用 CSS 来改变大小。表单元素我们学习了三大组 input 输入表单元素 select 下拉表单元素 textarea 文本域表单元素.这三组表单元素都应该包含在form表单域里面,并且有 name 属性.具体代码: <form> <input type=“text " name=“username”> <select name=“jiguan”> <option>北京</option> </select> <textarea name= "message"> </textarea> </form> 有三个名字非常相似的标签:表单域 form 使用场景: 提交区域内表单元素给后台服务器文件域 file 是input type 属性值 使用场景: 上传文件文本域 textarea 使用场景: 可以输入多行文字, 比如留言板 网站介绍等…4. 我们当前阶段不需要提交表单元素,所以我们只负责表单元素的外观形态即可.完成综合案例查阅文档:经常查阅文档是一个非常好的学习习惯。 推荐的网址: 百度: http://www.baidu.com W3C : http://www.w3school.com.cn/ MDN: https://developer.mozilla.org/zh-CN/
2022年03月02日
231 阅读
0 评论
0 点赞
1
...
8
9
10