Anki自定义闪卡模板表格打乱文本格式问题求助
Anki闪卡模板排版异常排查与解决
我在设计Anki闪卡模板时遇到无法定位原因的排版异常问题,以下是相关代码和修复方案:
闪卡正面代码
<div class="front"> {{#Title}}<div class="title">{{Title}}</div>{{/Title}} <div class="subtitle">Details</div> <table id="clozed"> <tr> <td class="heading">Origin</td> <td>{{cloze:Text1}}</td> </tr> <tr> <td class="heading">Insertion</td> <td>{{cloze:Text2}}</td> </tr> <tr> <td class="heading">Innervation</td> <td>{{cloze:Text3}}</td> </tr> <tr> <td class="heading">Action</td> <td>{{cloze:Text4}}</td> </tr> </table> </div> <script> // Scroll to cloze function scrollToCloze () { const cloze1 = document.getElementsByClassName("cloze")[0]; const rect = cloze1.getBoundingClientRect(); const absTop = rect.top + window.pageYOffset; const absBot = rect.bottom + window.pageYOffset; if (absBot >= window.innerHeight) { const height = rect.top - rect.bottom const middle = absTop - (window.innerHeight/2) - (height/2); window.scrollTo(0, middle); }; } if ( document.readyState === 'complete' ) { setTimeout(scrollToCloze, 1); } else { document.addEventListener('DOMContentLoaded', function() { setTimeout(scrollToCloze, 1); }, false); } </script>
闪卡背面代码
<div class="back"> {{#Title}}<div class="title">{{Title}}</div>{{/Title}} <div class="subtitle">Details</div> <table id="clozed"> <tr> <td class="heading">Origin</td> <td>{{cloze:Text1}}</td> </tr> <tr> <td class="heading">Insertion</td> <td>{{cloze:Text2}}</td> </tr> <tr> <td class="heading">Innervation</td> <td>{{cloze:Text3}}</td> </tr> <tr> <td class="heading">Action</td> <td>{{cloze:Text4}}</td> </tr> </table> </div> <script> // Remove cloze syntax from revealed hint var hint = document.getElementById("original"); if (hint) { var html = hint.innerHTML.replace(/\[\[oc(\d+)::(.*?)(::(.*?))?\]\]/mg, "<span class='cloze'>$2</span>"); hint.innerHTML = html }; // Scroll to cloze function scrollToCloze () { const cloze1 = document.getElementsByClassName("cloze")[0]; const rect = cloze1.getBoundingClientRect(); const absTop = rect.top + window.pageYOffset; const absBot = rect.bottom + window.pageYOffset; if (absBot >= window.innerHeight) { const height = rect.top - rect.bottom const middle = absTop - (window.innerHeight/2) - (height/2); window.scrollTo(0, middle); }; } if ( document.readyState === 'complete' ) { setTimeout(scrollToCloze, 1); } else { document.addEventListener('DOMContentLoaded', function() { setTimeout(scrollToCloze, 1); }, false); } // Reveal full list var olToggle = function() { var orig = document.getElementById('original'); var clozed = document.getElementById('clozed'); var origHtml = orig.innerHTML orig.innerHTML = clozed.innerHTML clozed.innerHTML = origHtml } </script>
CSS样式代码
html { /* scrollbar always visible in order to prevent shift when revealing answer*/ overflow-y: scroll; } .card { border: 1px solid #404040; padding: 8px; font-weight: normal; font-size: 16px; text-align: left; color: black; background-color: white; } /* general layout */ .text { /* center left-aligned text on card */ column-count: 2; display: inline-block; align: center; text-align: left; margin: auto; max-width: 40em; } .hidden { /* guarantees a consistent width across front and back */ font-weight: bold; display: block; line-height:0; height: 0; overflow: hidden; visibility: hidden; } .title { background-color: #edcac5; color: #000000; font-weight: bold; font-size: 20px; margin-bottom: 10px; text-align: center; } .subtitle { background-color: #3b3b3d; color: #FFFFFF; font-weight: bold; font-size: 16px; padding: 3px; margin-bottom: 5px; text-align: center; } .heading { color: #6395ff; font-weight: bold; text-align: left; width: 30%; } table { table-layout: fixed; width: 100%; } td { word-wrap: break-word; } /* clozes */ .cloze { /* regular cloze deletion */ font-weight: bold; color: #FFFFFF; } .card21 #btn-reveal{ /* no need to display reveal btn on last card */ display:none; } /* additional fields */ .extra{ margin-top: 0.5em; margin: auto; max-width: 40em; } .extra-entry{ margin-top: 0.8em; font-size: 0.9em; text-align:left; } .extra-descr{ margin-bottom: 0.2em; font-weight: bold; font-size: 1em; } #btn-reveal { font-size: 0.5em; display:none; } .mobile #btn-reveal { font-size: 0.8em; display:none; }
问题根因
你为table设置了width:100%,但table的父元素(front/back容器)没有设置宽度规则,无法继承卡片的可用宽度,导致table的100%宽度只能自适应内容宽度,无法撑满卡片空间。
修复方案
在CSS中添加以下规则即可解决排版异常:
.front, .back { width: 100%; box-sizing: border-box; } /* 可选优化:优化表格显示效果,避免内容贴边 */ table#clozed { border-collapse: collapse; margin: 8px 0; } td { padding: 4px 6px; vertical-align: top; }
如果修改后仍存在列宽挤压问题,可以把table规则中的table-layout: fixed改为table-layout: auto,让浏览器自动分配列宽适配内容。
内容的提问来源于stack exchange,提问作者Nil
相关产品推荐
相关产品推荐

