一、准备工作

meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV。

meerkat原理

1.1 需要准备的软件

  • unix/Linux系统(自带)
  • CMake(自带)
  • PERL 5.8.1及以上(自带)
  • BioPERL 1.5.0及以上(自行安装)
  • R 2.3.1及以上(自带)
  • samtools 0.1.5到0.1.19(不支持新版本samtools)
  • BWA 0.6.2.(已经可以支持新版本的BWA,但是 split read alignment 的时候必须用0.6.2版本)
  • NCBI blast 2.2.24及以上(自行安装)
  • Primer32.2.0及以上(自行安装)

1.2 需要准备的文件

  • 参考基因组fasta文件(单独放在文件夹),运行perl脚本,用BioPerl的Bio:DB::Fasta进行处理
#!/bin/perl
use Bio::DB::Fasta;
# Create database from a directory of Fasta files
my $db = Bio::DB::Fasta->new('/home/ywliao/utilities/UCSC/hg19_FA');
my @ids = $db->get_all_primary_ids;
  • bwa index 对基因组文件建立的index
  • samtools faidx 对基因组文件建立的index
samtools faidx hg19ref_order.fa 
  • UCSC下载的参考基因注释文件,knowGene.txt 用sort refGene.txt -k 3,3 -k 5,5n > refGene_sorted.txt命令进行sort
sort knownGene.txt -k 3,3 -k 5,5n > hg19_knowGene_sorted.txt 

1.3 照着manual 安装。

下载meerkat压缩包,解压。进入meerkat文件夹。

  • build mybamtools, 生成lib文件夹,文件夹包含着需要链接的动态库
cd ./src/
tar xjvf mybamtools.tbz
cd mybamtools
mkdir build
cd build
cmake ..
make
  • build bamreader
tar xjvf bamreader.tbz
cd bamreader
# Edit Makefile and set BTROOT to the path to which mybamtools was extracted.
#vi Makefile
#BTROOT = /home/ywliao/bin/Meerkat/src/mybamtoolsmake mv ./bamreader ../../bin

结果报错,作如下调试

make clean (清除刚才的安装)
#修改makefile
#from: ... -lbamtools -lbamtools-utils
#to: ... -lbamtools -lbamtools-utils -lz<br>make

编译成功,但是运行./bamreader 继续报错

解决方法如下

export LD_LIBRARY_PATH=/home/ywliao/bin/Meerkat/src/mybamtools/lib

将mybamtools/lib路径加入LD_LIBRARY_PATH变量即可。

  • build dre
tar xjvf dre.tbz
cd dre
#Edit Makefile and set BTROOT to the path to which mybamtools was extracted.
#vi Makefile
#BTROOT = /home/ywliao/bin/Meerkat/src/mybamtools/
make mv ./dre ../../bin/
  • build sclus
tar xjvf sclus.tbz
cd sclus
make
mv ./sclus ../../bin/

二、预处理

#manual明确指出不建议用默认参数
perl ./scripts/pre_process.pl [options]
-b FILE 已经sort和index的bam文件
-k INT 过滤掉的最小的覆盖度(过滤覆盖过多reads的位置,默认500;过滤mapped到着丝粒的reads,通过它显示出的覆盖次数,在肿瘤样品中应该观察拷贝数,应设置一个更高的数值,比如1500,以至于不忽略这些事件
-r INT 被用于计算分布的插入长度的幅度(默认1000),会生成一个pdf的分布图,显示插入片段长度的分布,0关掉这个函数
-n INT 每个read group被用于计算插入片段大小分布的reads数,0 使用全部reads,默认1000
-l INT 提取配对的softclip reads,或者其他配对的,但是有某一个mapped不上或者都mapped不上的reads,默认1。对于插入片段很小的,在sv断点上就会有reads覆盖,这样得到的reads就会部分比对或者比对不上。运行的时候,对于一个末端mapped上,另一个read末端部分比对上的reads对,会把部分比对read的unmapped部分提取出来和mapped的read组成人为的read对;对于一个末端比对上,一个末端unmapped的reads对,那么unmapped read 的起始和末端的序列分别提取和mapped的read组成两对人为的read对;-c 参数就是控制提取的部分的大小,这样人为的reads对重新mapping 到参考基因组。如果插入片段小但是read的长度长,那么就会很大的增加敏感性。对于短长度的read,应设置为0。对于bwa mem 出来的基因组,不需要重新mapping,所以可以关掉这一参数,在meerkat.pl中也一样。
-q INT 削减reads数,等同于bwa 的-q参数,默认15
-c INT 设置开始和末端剪下softclip 或者unmapped 的read的bp数,这些剪下的reads 用来比对参考基因组,寻找更小事件。应轻微小于1/2的read长度,默认参数适合长读长的人类基因组。
-s INT 设置开始和末端剪下softclip 或者unmapped 的read的bp数,这些剪下的reads 用来split reads mapping,必须和下一步meerkat的-s参数设置一样。在不牺牲mapping能力的情况下,值可以设的小一点。应该设置1/5到1/3的read长度。
-u INT 处理uu reads 对(双unmapped reads对,分成4对。默认0。如果测序质量够好,并且基因组没有什么重复的话,对于识别小事件非常有用,人类基因组建议关闭函数。
-f INT clip 比对时允许输出到XA标签的备择比对数量,默认100
-N INT clip和split reads必须Ns阈值,默认是5
-t INT bwa align用到的线程数
-R STR 包含黑名单reads的文件,一个group id 一行,如果对于一个group的单一比对reads少于30%,推荐不出这个group,如果group的
-I STR bwa_index路径,bwa index 生成的参考基因index路径,不是文件,用于bwa align,如果l(L发音)参数设为1的话应设置
-A STR 参考基因的fasta.fai文件,用于bwa align(查看代码发现就是上文提到的samtools建立的参考基因的fai文件)
-S STR samtools路径,如果不存在于环境变量的话
-W STR bwa途径,如果不存在于环境变量的话
-P STR 指定运行步骤,[ all | is | cl ],默认全部
is:提取unmapped,softclip reads,计算插入片段分布
cl: map soft clip 配对reads 到参考基因组,如果使用多线程的话,应分步,cl1运行多线程,cl2运行单线程
-h help
manual中给出的例子。
1. 50bp的reads,<10x TCGA 基因组
建议使用-s 18 -l 0 -q 0
估计50bp片段过小,所以-s 选项 以1/3 read 长度,短长度reads,-l设置为0,估计测序深度不深,所以 并不trimming reads,所以-q 设置为0
2. 101bp reads, 20-30x and 60-80x TCGA 基因组
建议使用-s 20 -k 1500 -q 15
如果是bwa mem出来的文件,建议使用-s 20 -k 1500 -q 15 -l 0
75-101bp的reads,-s 选项应该设置为1/5 read 长度,20,因为人类癌症基因,所以-k选项设为1500,测序深度够深,所以可以设置过滤的basequality为15。bwa mem mapping的数数据-l设置为0
3. TCGA WES 数据
建议使用-s 20 -k 10000 -q 5
-k 10000表示10000的copy number的reads也会留下,-q 5,就是过滤的basequality为5
这次我们实验室分析的数据,150bp 读长,测序深度8x,bwa mem 肿瘤数据,我选择参数为-s 30 -k 1500 -q 0 -l 0

perl /home/ywliao/bin/Meerkat/scripts/pre_process.pl -b $inputfile -k 1500 -t 20 -l 0 -q 0 -P is -A $hg19_fai -W $bwa_dir -s 30 -S $samtools_dir

perl /home/ywliao/bin/Meerkat/scripts/pre_process.pl -b $inputfile -k 1500 -t 20 -l 0 -q 0 -P cl1 -A $hg19_fai -W $bwa_dir -s 30 -S $samtools_dir

perl /home/ywliao/bin/Meerkat/scripts/pre_process.pl -b $inputfile -k 1500 -t 20 -l 0 -q 0 -P cl2 -A $hg19_fai -W $bwa_dir -s 30 -S $samtools_dir

运行meerkat

前面已经依序安装了meerkat 的环境和meerkat,运行了预处理一步,在相对应的bam文件目录下生成了大批文件,因此,当要用meerkat处理某个bam文件时,应先将该bam文件移动到专有的一个文件夹,manual中也建议这样用。

预处理生成的文件包括:

黑名单文件.gz

isinfo文件:包括插入大小信息

pdf文件:插入大小的分布图,unmapped reads长度的分布图,softclip reads长度分布图

pre.log文件:日志文件,包括输入的参数,输入输出信息,reads数,unallign reads数等

softclips.fq.gz: softlip reads文件,完整的read

softclips.rdist:softclip 的reads长度分布信息记录

unmapped.fq.gz:unmapped的reads 文件,完整的read

unmapped.rdist: unmapped的reads长度的分布信息

sr1.fq.gz : 从softclip read 或者 unmaped read 切下来的指定bp 的reads

sr2.fq.gz : 与sr1.fq配对的reads

一个文件夹包括1_1fq.gz,1_2fq.gz , 里面有不同长度的reads。每个read group 人工的reads 对

1.1  meerkat.pl
perl ./scripts/meerkat.pl [options]
-b FIle 已经sort过的bam文件
-k int [0/1]是否使用预处理产生的黑名单文件,默认1
-d FLT call discordant mate pairs 的标准差阈值,默认3.这个选项控制怎样寻找discordant read对,等同于定义最大的concordant fragment(配对的reads定位到的片段),计算方法是:中位插入大小+d x sd,如果插入大小分布图狭窄并对称,就使用默认参数,例如下面一二图。如果分布图偏宽,或者带着长尾,三四图,参数应设为5,对于高深度(>30x),尽管分布图狭窄,但是使用5会轻微好一点。如果峰窄,但是仍然带着一个尾部(图五),好像大部分TCGA数据那样,在meekat.pl这一步使用5比3更好
<img src="e31c18eb-9872-4c9a-ae8d-9a862aca9f97_files/4a514de1-be66-47e7-abd8-bd7a250cbd77.jpg" style="vertical-align: bottom; max-width: 100%;"> <img src="e31c18eb-9872-4c9a-ae8d-9a862aca9f97_files/7811316c-a85a-4ced-9e23-8475c7156f7e.jpg" style="vertical-align: bottom; max-width: 100%;"> <img src="e31c18eb-9872-4c9a-ae8d-9a862aca9f97_files/198fa504-d0b6-4df8-8f66-d79418680015.jpg" style="vertical-align: bottom; max-width: 100%;"> -c FLT 集簇discordant mate pair标准差阈值,默认和-d相同。控制怎样集簇,构建断点的置信区间。等同于定义覆盖断点的最大片段(中位插入大小+c x sd)。如果-d 选项是5或者小于5,使用用-c相同的参数,如果-d 很大,比如10,那么使用更小的-c,比如5。如果数据有很高的测序深度,或者有广泛的拷贝的变化,那么使用5而不是3来避免不能构建断点的置信区间。
-p FLT call一个事件支持的配对数阈值,默认2
-o INT 需要支持全长reads对的数目,默认是0,设定这个选项会降低小复杂事件的敏感度。如果使用-a 1 -l 1推荐使用-o 1 来避免重复序列导致的过多人工产物
-q INT call一个事件支持的split reads数,默认是1
-z INT 事件数的最大值,默认1,000,000,000
-s INT 从unmapped reads 开始和末端切下来的bp数,必须和与处理的-s 参数设置一样
-m INT [0/1],如果设定为1,使用meerkat 去去除duplicates,如果设为0,使用Picard 的 flag 'd‘ marked ,或者其他工具去除duplicates.bwa mem 的数据必须用picard mark duplicate ,所以要设为0.
-a INT [0/1],处理非单一比对,默认1。如果测序质量不好,或者测序深度不够,将参数设为0,这样全部成对的reads都被作为单一比对使用。这依赖bwa mapping 时生成的XT标签。如果没有XT标签,使用选项Q.
-u INT [0/1],使用bam文件的全部比对,如果BAM文件不是由BWA产生的,或者由bwa产生但是没有XT标签,那么开这个选项,开了这个选项会强制关闭-a选项。默认是0。开了这个选项之后应使用-Q 参数过滤低mapping reads,推荐-Q设置10,对于bwa比对过的bam,也可以继续过滤。
-Q INT 被使用的reads的最小mapping quality,默认是0
-g INT 在主要的bam文件使用的备择mapping数,默认使用全部。备择mapping 数之前通过bwa -N 参数输出到XA标签中。bwa mem 默认 输出备择mapping。
-f INT 在clipped 比对中考虑的备择mapping数,默认使用全部。
-l INT [0/1],是否考虑clipped 比对,默认1.和预处理一样,对于bwa mem 出来的基因组,不需要重新mapping.
-t INT 在bwa比对中用到的核数,默认1
-R STR 包括黑名单read group的文件,每一行一个read group ID
-F STR fasta文件夹路径
-S STR samtools路径,如果samtools不在环境变量中的话
-W STR bwa路径,如果bwa不在环境变量中的话
-B STR blastall 和 formatdb 的路径,如果不在环境变量的话
-P STR 指定运行顺序,dc|cl|mpd|alg|srd|rf|all,默认all,每一步运行都需要上一步的结果
dc: extract discordant read pairs,提取discordant read对
cl: construct clusters of discordant read pairs,将discordant read对建簇
mpd: call events based on read pairs,基于read 对call 事件
alg: align split reads to candidate break point regions,比对split read 到候选的断点区域。如果你有多核心的话,可以将alg步骤切为两步,alg1和alg2,alg1运行多线程,alg2运行单线程。
srd: confirm events based on split reads and filter results,基于split reads和过滤的结果对事件进行证明
rf: refine break points by local alignments,通过区域比对定义断点
all: run all above steps ,运行全部步骤
-h 帮助

manual 中的举例:

50bp reads,<10x 的TCGA 基因组 使用-s 18 -d 5 -a 0 -l 0 -q 1,猜测:reads 长度较小,所以取1/3 read 长度,-s 取18, TCGA 基因组,插入分布狭窄带尾,所以-d 设为5, 测序深度较低,reads 长度较短,所以尽量保留数据,-a 设为0, -l 设为0,-q 设的较低,1。

75-101bp reads, 30-40x TCGA 基因组 使用-s 20 -d 5 -p 3 -o 1 -a 0 -u 1 -Q 10,猜测:reads长度较长,取1/5read长度,-s 取20,TCGA 基因组,插入分布狭窄带尾,所以-d 设为5,长度较长,深度较深,因此降低敏感度,增加特异度,所以-p 设为3,-o 设为1,由于没有XT tag和XA tag ,因此-a 1 选项无法运行,因此设为-u 1 -a 0 -Q 10 。如果这是bwa mem的数据的话,参数应设为-s 20 -d 5 -p 3 -o 1 -m 0 -l 0,bwa mem 数据不需要重新比对softclips -l 0,必须用picard去除duplicate,-m设为0,估计这个是早版本的bwa,因此比对时可以生成XT标签,-a 默认为1。

101bp reads, 60-80x TCGA 基因组 使用-s 20 -d 5 -p 5 -o 3,75-101bp 使用-s 20,TCGA基因组使用-d 5,测序深度深,-o 设置更高3。

如果肿瘤基因组60x,相对应的正常基因组30x,那么使用60x的参数,常常用配对的正常组织中的black.list.gz 重命名并放到肿瘤bam文件处理的文件夹,替换cancer的blacklist.gz文件。


1.2 mechanism.pl
perl ./scripts/mechanism.pl [options]
-b FILE sort过的bam文件
-o INT [0/1]在TE包括rmsk类型 \"Other\",默认1
-t INT TE的最大值,默认100000
-z INT 被处理的SV的数量限制,默认1000000000
-R STR repeat注释路径,能够从UCSC下载
-h help

二、参照

manual中给出的数据,HapMap个体NA18507(42x深度,100bp读长,500bp插入大小),用10核bwa比对花费1.5天和10GB的内存。30x深度的肿瘤数据,要多于两天并且超过30G的内存,如果测序质量不太好,比如很多的嵌合比对和许多非单一mapped的reads,就会花费更多的时间和内存。、

三、结果

运行完预处理和meerkat.pl后,能够得到两个文件.intra.refined.typ.sorted和inter.refined.typ.sorted,运行完mechanism.pl后,会得到.variants文件,否则,就该回去看一下设置是否出现问题。
运行的肿瘤基因组文件的时候,一定要把正常组织的blacklist文件替换肿瘤基因组的blacklist文件,blacklist文件可以在预处理中生成。如果在预处理中出现错误信息“differing read lengths“,没有关系,仅仅是告诉你在一些read group中长度不一致。

四、包含的其他程序

4.1 转换variant 文件到vcf格式
perl ./scripts/meerkat2vcf.pl -i variantfile -o vcffile -H headerfile -F /db/hg18/hg18_fasta/
-F选项可以产生一个头文件
4.2 融合基因注释
perl ./scripts/fusions.pl -i variantfile -G /db/hg18/refGene_hg18_sorted.txt
4.3 为变异位点设计引物
使用primer.pl
-i FILE 输入文件,fusion.pl产生的融合文件
-o FILE 输出文件
-p STR 引物固定序列
-c INT 列数补偿,默认0,如果第一列存在如何事件的样品名称,那么设为1
-f INT 侧翼区域,默认500,设计引物所在的区域
-s STR 被“,”分隔的引物大小,默认20,23,25,27
-m STR 引物最小,最优,最大Tm值,","分隔,默认50,60,65
-n INT 对每一个引物片段,设计的音物个数,默认5
-r INT 掩盖repeat,默认0
-q INT 输出设计引物的侧翼序列
-F STR fasta文件文件夹路径
-P STR primer_core程序文件夹路径
-L STR bla文件夹t路径
-V STR blat服务器,例如fServer start 10.11.240.76 17777/reference/hg18/hg18.2bit -stepSize=5,服务器路径应该为10.11.240.76
-T STR blat端口,上面例子中的17777
-h help

全部音物都是由Primer3生成,对于每一个事件,挑出.1和.2,不同的取向认为是不同的事件,所以取引物的时候直接拷贝出来,不需要额外的反向互补,如果序列是小写字母,那么说明引物在重复序列。理论上,你应该用 1 blat hit 挑出小写的引物。如果blat hit 是0,意味着由太多hit了,所以不要挑选这种引物。有时候,即使引物是在重复序列上(小写字母),但是在基因组上仍然是单一比对的,(1 blat hit),因为是重复元件的变异,挑选这种引物是可以的。如果由一些引物PCR没有结果,你可以挑选2个正向引物,两个反向引物来同时进行4 个PCR 反应。引物设计的普遍规则仍然要使用,比如,你应该挑选TM 值相差不大并且GC含量不太极端的。
4.4  计算等位基因频率
使用discon.pl,这个脚本会告诉你全部断点的discordant 和 concordant的read对.
-i FILE 输入variants 文件,必须
-o FILE 输入文件,必须
-D INT 从bam文件中计算discordant pair的数目,默认0,基因分型的时候打开这个选项
-B FILE bam文件,必须
-C FILE 由Meerkat 产生的cluster文件,必须
-I FILE Meerkat 运行时产生的isinfo文件
-K FILE 包含要忽略的read group的文件名,一个read ID 一行,和 meerkat.pl的R参数一样
-S FILE samtools文件夹路径,如果samtools不再环境变量中
-d FLT call discordant read 对的标准差阈值,默认3
-Q INT 使用的reads 最小的mapping quality,默认0
-h help

perl ./scripts/discon.pl -d 5 -Q 10 -i $somaticg -o $somaticg_rp -B $cancer_bam -C
$cancer_cluster -I $cancer_isinfo -K $cancer_blacklistrg -S /home/ly55/opt/samtools/
结果文件里面每一个事件有一个 RP tag ,A_B_C_D格式
A:全长的discordant read 对数
B:从部分比对的reads中discordant的reads数
C:第一断点的concordant reads 数
D:第二断点的concordant reads数
A+B应该等与Meerkat得到的总的reads数

参考资料

meerkat manual

Meerkat软件的更多相关文章

  1. 生物结构变异分析软件meerkat 0.189使用笔记(一)

    一.准备工作     meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV. meerkat原理:参见http://compbio. ...

  2. DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享

    DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...

  3. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  4. 标准产品+定制开发:专注打造企业OA、智慧政务云平台——山东森普软件,交付率最高的技术型软件公司

    一.公司简介山东森普信息技术有限公司(以下简称森普软件)是一家专门致力于移动互联网产品.企业管理软件定制开发的技术型企业.公司总部设在全国五大软件园之一的济南齐鲁软件园.森普SimPro是由Simpl ...

  5. JAVA程序员常用软件整理下载

    ********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...

  6. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

  7. 易用BPM时代,软件开发者缘何选择H3?

    近年来,企业级软件开发市场暗流汹涌,呈现出多种态势.软件开发团队规模趋于小型化,工作方式趋于快捷化,超过半数的软件开发者在工作中会选择使用易用的软件开发工具.随着流程管理越来越受到企业的重视,流程开发 ...

  8. 从国内流程管理软件市场份额看中国BPM行业发展

    随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...

  9. 一个软件开发者的BPM之路

    我是小林,一名普通的软件工程师,从事BPM(业务流程管理)软件开发工作.我没有几十年的技术底蕴,无法像大牛们一样高谈阔论,品评BPM开发之道:也不是资深的流程管理专家,能与大家分析流程管理的时弊.我只 ...

随机推荐

  1. (9)打鸡儿教你Vue.js

    样式绑定 设置元素的样式 用 v-bind 来设置样式属性 class 与 style 是 HTML 元素的属性 <div v-bind:class="{ active: isActi ...

  2. golang-package fmt

    package fmt import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O.格式化动作('verb')源自C语言但更简单. Printing v ...

  3. Pytest权威教程21-API参考-02-标记(Marks)

    目录 标记(Marks) pytest.mark.filterwarnings pytest.mark.parametrize pytest.mark.skip pytest.mark.skipif ...

  4. 使用composer下载依赖包下载失败的解决方法

    下载好的composer默认的下载地址是国外的,在下载的过程中网络不好或者可能被墙,将下载的地址换成国内的地址即可 有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的 ...

  5. Win7如何设置怎样在局域网内共享打印机

    首先进入桌面,点击开始按钮,然后打开控制面板 2 在控制面板设置界面,找到“管理工具”选项 3 接着打开“计算机管理”   选择“本地用户和组”的Guest账户   确保Guest账户被禁用   下面 ...

  6. 为 Raft 引入 leader lease 机制解决集群脑裂时的 stale read 问题

    问题:当 raft group 发生脑裂的情况下,老的 raft leader 可能在一段时间内并不知道新的 leader 已经被选举出来,这时候客户端在老的 leader 上可能会读取出陈旧的数据( ...

  7. SpringMVC通过注解在数据库中自动生成表

    在application-persistence.xml中的<property name="hibernate.hbm2ddl.auto" value="${hib ...

  8. Perl关于分椰子的趣味问题

    话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子! 大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先晚上 ...

  9. html5中 input的pattern属性 和 details/summary元素

    html5--3.21 课程小结与其他新增元素 一.总结 一句话总结: input的pattern属性可以设置正则验证,比如检测学号的位数和数字区间 details/summary元素配合起来可以做元 ...

  10. html5中的fieldset/legend元素和keygen元素

    html5中的fieldset/legend元素和keygen元素 一.总结 一句话总结: fieldset/legend元素和figure和figcaption很像,只不过是作用于表单,前者表示内容 ...