anki填空题卡片模板

博主分享了如何在Anki中创建填空题卡片的经验,包括模板设计和功能特点。卡片支持Android和Windows平台,主要内容字段与相关知识字段分开,正面显示全内容,背面为填空题形式,可点击显示答案。提供了正面、背面的代码示例以及CSS样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始使用anki了,想在零碎时间背点东西。找了很多填空题代码,都没有看到合适的,最终决定自己摸索着改了一版。目前测试是Android和win都可正常使用。
模板题型:填空题(带划线)
主要功能:空格处划线,并每个空格可以点击出现答案。
主要样式
anki填空题模板

使用了两个字段:内容和相关知识。
内容就是所需背诵的知识点内容,相关知识可以填入扩展知识。

1、正面
anki模板win正面
2、背面
anki模板win背面

根据本人的使用需求是把全内容显示设置成了正面,填空划线设置成了背面,这样可以先背再检验是否已记住主要内容,如有需要可以正背面代码互换。
相关知识在正面采用的是全显示的方式,背面可以选择点击相关知识出现内容,根据情况选择是否需要二次背诵。
背面使用的是 anki填空题点一个显示一个,能够实现点击出现一个一个空验证。

代码
1、正面(全显示,挖空部分显示红色并有下划线)

	<div class="h2 xleft" id="div0" style="display:none; ">{{内容}}</div>
	<div class="h2 xleft" id="div1" style="display:block;">{{内容}}</div>

{{#相关知识}}
<br><div class="slide">
	<div class="h1 zcolor zleft">
	<span class="zimg"><height="24" width="24" /></span>
	相关知识:
	</div>
	<div class="h2 zleft">{{相关知识}}</div></div>
{{/相关知识}}


<input class="btn" type="button" onclick="showAndHidden();" value="" style="display:none;" />

<div style="display:none">{{cloze:内容}}</div>


<script type="text/javascript">

var arr = new Array,arr1 = new Array,arr2 = new Array;

/
    [].forEach.call(document.querySelectorAll('#div0'),
      function(V0) {
         V0.innerHTML = V0.innerHTML.replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,
               function(cloze) {
                   var div30='<span id="div3" οnclick="toggle(this)" class="cloze" cloze="@CLOZE@" cloze1="@CLOZE@1" cloze2="@CLOZE@2" wor="wor2">@......@</span>';
var dd1=cloze.indexOf("::"),dd2=cloze.lastIndexOf("::"),dd3=cloze.length,cc=0,cc1=0,cc2=0;
                   var word = cloze.substring(dd1+2, dd3-2);
                   var word1,word2;
                   switch(dd2-dd1){
                     case 0: word1=word;word2="<uu>  </uu>";  break;
                     case 1: word1=word;word2="<uu>  </uu>";  break;
                     case 2: word1=word;word2="<uu>  </uu>";  break;
                     default:
                        if(dd3-dd2==4){word1=word;word2="<uu>&emsp;&emsp;</uu>";}
                           else{word1=cloze.substring(dd1+2, dd2);word2="<uu>&nbsp;&nbsp;"+cloze.substring(dd2+2, dd3-2)+"&nbsp;&nbsp;</uu>";}}
                  cc=arr.push(word)-1; cc1=arr1.push(word1)-1;cc2=arr2.push(word2)-1;
                  return div30.replace( '@CLOZE@',cc).replace( '@CLOZE@1',cc1).replace( '@CLOZE@2',cc2).replace( '@......@', word2);
  }); });
/

/
    [].forEach.call(document.querySelectorAll('#div1'),
       function(V2) {
          V2.innerHTML = V2.innerHTML.replace(/(\{\{[c]\d+\:\:[^\{|\}]+?)\:\:[^\{|\}]*?\}\}/g,"$1}}").replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,'<span class="cloze">'+"$1"+'</span>');
 });
 //

//
     function toggle(id) {

       if (id.getAttribute('wor')=="wor2") {
    	 
                   id.innerHTML = arr1[id.getAttribute('cloze1')]; 
                   id.setAttribute('wor',"wor1");

                  return;}
        if (id.getAttribute('wor')=="wor1"){

           id.innerHTML = arr2[id.getAttribute('cloze2')]; 
           id.setAttribute('wor',"wor2");

          return;}}
/


//
     function showAndHidden(){
        var div0=document.getElementById("div0");
        var div1=document.getElementById("div1");
        if(div0.style.display=='block') {div0.style.display='none';}
             else {div0.style.display='block';}
        if(div1.style.display=='none') {div1.style.display='block';}
             else {div1.style.display='none';}
      }

</script>

2、背面

	<div class="h2 xleft" id="div0" style="display:block;">{{内容}}</div>
	<div class="h2 xleft" id="div1" style="display:none; ">{{内容}}</div>

{{#相关知识}}
<br><div class="slide">
	<div class="h1 zcolor zleft">
	<span class="zimg"><height="24" width="24" /></span>
	</div>
	<div class="h2 zleft">{{hint:相关知识}}</div></div>
{{/相关知识}}

<input class="btn" type="button" onclick="showAndHidden();" value="" style="display:none;" />

<div style="display:none">{{cloze:内容}}</div>


<script type="text/javascript">

var arr = new Array,arr1 = new Array,arr2 = new Array;

/
    [].forEach.call(document.querySelectorAll('#div0'),
      function(V0) {
         V0.innerHTML = V0.innerHTML.replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,
               function(cloze) {
                   var div30='<span id="div3" οnclick="toggle(this)" class="cloze" cloze="@CLOZE@" cloze1="@CLOZE@1" cloze2="@CLOZE@2" wor="wor2">@......@</span>';
var dd1=cloze.indexOf("::"),dd2=cloze.lastIndexOf("::"),dd3=cloze.length,cc=0,cc1=0,cc2=0;
                   var word = cloze.substring(dd1+2, dd3-2);
                   var word1,word2;
                   switch(dd2-dd1){
                     case 0: word1=word;word2="<uu>  </uu>";  break;
                     case 1: word1=word;word2="<uu>  </uu>";  break;
                     case 2: word1=word;word2="<uu>  </uu>";  break;
                     default:
                        if(dd3-dd2==4){word1=word;word2="<uu>&emsp;&emsp;</uu>";}
                           else{word1=cloze.substring(dd1+2, dd2);word2="<uu>&nbsp;&nbsp;"+cloze.substring(dd2+2, dd3-2)+"&nbsp;&nbsp;</uu>";}}
                  cc=arr.push(word)-1; cc1=arr1.push(word1)-1;cc2=arr2.push(word2)-1;
                  return div30.replace( '@CLOZE@',cc).replace( '@CLOZE@1',cc1).replace( '@CLOZE@2',cc2).replace( '@......@', word2);
  }); });
/

/
    [].forEach.call(document.querySelectorAll('#div1'),
       function(V2) {
          V2.innerHTML = V2.innerHTML.replace(/(\{\{[c]\d+\:\:[^\{|\}]+?)\:\:[^\{|\}]*?\}\}/g,"$1}}").replace(/\{\{[c]\d+\:\:([^\{|\}]+?)\}\}/g,'<span class="cloze">'+"$1"+'</span>');
 });
 //

//
     function toggle(id) {

       if (id.getAttribute('wor')=="wor2") {
    	 
                   id.innerHTML = arr1[id.getAttribute('cloze1')]; 
                   id.setAttribute('wor',"wor1");

                  return;}
        if (id.getAttribute('wor')=="wor1"){

           id.innerHTML = arr2[id.getAttribute('cloze2')]; 
           id.setAttribute('wor',"wor2");

          return;}}
/

     function showAndHidden(){
        var div0=document.getElementById("div0");
        var div1=document.getElementById("div1");
        if(div0.style.display=='block') {div0.style.display='none';}
             else {div0.style.display='block';}
        if(div1.style.display=='none') {div1.style.display='block';}
             else {div1.style.display='none';}
      }

</script>

3、 CSS


/* ----------各种样式---------- */

body { background-color: #fff; color: black; }
.card {
	font: 20px/30px yh;
	background-color:#fff;
}


.cloze {
	color: #ec6c4f;
	#font-weight: bold;
	border-bottom: 1px solid #ec6c4f;
	-webkit-animation: cloze 0.4s 0s;
	-webkit-animation-fill-mode: forwards;
}
.h1 { font: 22px/22px yh; padding: 0.3em 0em 0.3em 0.5em; }
.h2 { font: 20px/30px yh; padding: 0.3em 0em 0.3em 0.5em; }

.ximg { background: url(_x-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
.yimg { background: url(_y-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }
#.zimg { background: url(_z-day.svg); background-size: 100%; background-repeat: no-repeat; background-position: center; }

.btn {
	opacity: 0.8;
	right: 10px;
	bottom: 10px;
	height: 70px;
	width: 70px;
	border: none;
	background: url(_switch.png);
	background-size: 100%;
	position: fixed;
}
	.btn:active { opacity: 0.9; }
.hint { color: #333; }


/* ---------- 其他调整 ---------- */

a { color: #666; }
img { max-width: 100%; vertical-align: middle; }
	.chrome img { max-width: 100%; vertical-align: middle; }
ul,ol { margin-top: 0em; }
li { margin-left: -0.5em; }
i { font-family: palatino; padding: 0 3px 0 0; }
u { text-decoration: none; background-color: #ffff75; border-bottom: 2px solid #ec6c4f; }
uu { border-bottom: 1px solid #ec6c4f; }
hr { height: 1px; width: 100%; display: block; border: 0px solid #fff; vertical-align: middle; margin:5px 0px 10px 0px; background-color: #ccc;}
#time { font-family: yh; float: right; } 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值