页面里仿 DataGrid 表格时,.TDBT和.txLine是经常被直接搬来用的两组 CSS。样式表里明明写了border-right-width: 1px、height: 18px、background-color: #D0D0FF,预览一看,蓝色边框没出来,输入框高度被撑到 20 多像素,背景色要么整体发白要么干脆不出。这种样式不生效的问题,与其在 DevTools 里对着一堆覆盖规则慢慢试,不如把代码原样丢给 Codex,让它对照.TDBT的每条声明逐项排查。要跑通这套排障对话,先到 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 创建 API Key,再把 Codex 的 Base URL 指向 https://taotoken.net/api(末尾不要加 /v1)。TaoToken 在这里是 Codex 的兼容通道,一个 Key 就能直接复用到 ChatGPT/Anthropic 模型,省去官方额度不够时来回切 Key 的动作。
1. 先复现 .TDBT 样式假失效:把蓝色边框和背景色的检查项列出来
1.1 两个最典型的“没生效”现象
原代码里.TDBT的意图很明确:12px 字号、蓝色文字,右边和下边保留 1px 边框,左边和上边去掉,高度 18px,宽度 80px,背景色#D0D0FF。配合外层table的1px solid blue边框,看起来才像 DataGrid 的单元格。
实际预览时常见两类现象。第一类:table 外框出来了,但输入框背景发白,右、下边框看不见;第二类:输入框高度明显超过 18px,按钮和文本框对不齐,整行显得很高。这两类问题的根源不同,但都能在同一个小表格里同时出现。先把问题还原成最小代码:
<style> .TDBT { font-size: 12px; color: blue; border-top-width: 0px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 0px; height: 18px; width: 80px; background-color: #D0D0FF; cursor: hand; } </style> <table cellSpacing="0" cellPadding="0" style="border: 1px solid blue;"> <tr> <td> <input type="button" value="button" class="tdbt"> <input type="text" class="TDBT"> <input type="text" class="TDBT"> </td> </tr> </table>1.2 class=tdbt 与 .TDBT 的大小写陷阱
原 HTML 里写的是class=tdbt,CSS 里定义的是.TDBT。class属性的匹配在标准 HTML 里区分大小写,tdbt匹配不到.TDBT。如果页面恰好没有 DOCTYPE,浏览器可能退回怪癖模式,很多解析规则会变宽松,这时样式“碰巧正常”;一旦你在页面顶部补了<!DOCTYPE html>,浏览器改用标准模式,样式立刻失效。这个坑在扒老代码时尤其常见,而且只在某些浏览器环境下才暴露,很容易让人误判成“CSS 没加载”。
第二个隐藏点在外层。table上的cellSpacing=0是为了去掉单元格之间的空隙,否则td与td之间会有默认 2px 间距,DataGrid 的线条会断成两截;cellPadding=0则是去掉td内侧内边距。原代码把三个 input 放进同一个td,视觉上是一行控件挤在一起,而不是真正的“每格一个输入框”。排查时先把这两个属性当作硬性条件保留,后面让 Codex 对照时会省很多事。
2. 用 Codex 排查前,先把 Key 和 Base URL 指到 TaoToken
2.1 在 TaoToken 先创建一把排障用的 Key
排查对话会反复试 prompt,建议不要拿生产 Key 去试。打开 TaoToken,登录后在控制台的 API Keys 页面创建一把新 Key,复制下来的值就是下面的YOUR_API_KEY。这把 Key 同时负责 Codex 的认证和用量统计,后续修改模型、清空缓存都不影响它。
提示:官网落地页只负责注册、建 Key、看模型广场和用量;Codex 工具里填的接入地址是https://taotoken.net/api,两者不要混用。
2.2 Codex 的 config.toml 只改两个地方
Codex 读取~/.codex/config.toml作为全局配置。我们要做的是新增一个model_provider,再在会话里指定它:
# ~/.codex/config.toml model_provider = "tao" model = "YOUR_MODEL_ID" [model_providers.tao] name = "tao" base_url = "https://taotoken.net/api" wire_api = "chat" requires_openai_auth = falseYOUR_MODEL_ID需要以模型广场为准,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 的模型广场查当前提供的编码,不要照抄教程里的旧 ID。base_url一定不要拼/v1,也不要加任何 UTM 参数。Key 通过环境变量传给 Codex:
export OPENAI_API_KEY="YOUR_API_KEY"之后跑一句codex exec "回复 OK",能正常返回说明 Base URL、模型 ID、Key 三者都通了。再把这个 HTML 片段交给 Codex 做排障。
3. 让 Codex 逐项核对 .TDBT 的 border、height 与 background
3.1 给 Codex 一个限定范围的排障 prompt
把上面那段 HTML 原样贴进 Codex 会话,再补一句:现在要排查的页面是css style (table)里的仿 DataGrid 结构,不要扩展成整个页面重构。排障指令建议写成:
这段 HTML 在浏览器里预览时 .TDBT 的蓝色边框不显示、背景色 #D0D0FF 不生效、height:18px 被撑高。 请逐项检查 .TDBT 的 border-top-width、border-right-width、border-bottom-width、border-left-width、height、background-color, 以及外层 table 的 cellSpacing=0、cellPadding=0 是否匹配。 列出可能导致失效的浏览器行为,最后输出修正后的完整 html,保持 table 的 cellspacing="0" cellpadding="0" 结构。3.2 Codex 大概率会指出三个根因
第一个是border-style缺失。原 CSS 只写了border-right-width、border-bottom-width,并没有写border-right-style和border-bottom-style。CSS 里border-style的默认值是none,宽度即使设了 1px 也不会渲染出任何边框。Codex 会建议改成border-right: 1px solid blue; border-bottom: 1px solid blue;的简写形式。
第二个是height: 18px被盒模型撑高。input 在浏览器里的默认盒模型不是统一的,height只作用于内容区时,padding 和 border 会额外增加实际高度。要得到刚好 18px 的输入框,补上box-sizing: border-box才是正解。与之搭配的还有font-size: 12px和行高,行高如果高于 height,同样会把输入框顶高。
第三个就是 1.2 节提到的class大小写失配。Codex 在对照时会把 HTML 里的class="tdbt"和样式表里的.TDBT当成两个不同类名指出。统一写成class="TDBT"后,背景色才可能按#D0D0FF生效。另外,cursor: hand是旧 IE 的非标准写法,Chrome、Edge、Firefox 都不认,要鼠标悬停变手型,得写成cursor: pointer,Codex 通常会把这条一并标注出来。
4. .txLine 输入线样式排查:补齐 border-style 与 table 单元格结构
4.1 输入线失效的原因不在颜色,而在 style
.txLine想做的是“只有底部一条黑线的文本输入框”。原 CSS 里写了border-color: black black #000000,三个值是上、左右、下的颜色简写,但同样没有写border-style。就算颜色给了#000000,只要 bottom 的 style 还是none,下边框就不会画出来。修正时直接用简写:
.txLine { height: 18px; border: 0; border-bottom: 1px solid #000000; font-size: 16px; background-color: #FFFFEE; color: #0000FF; box-sizing: border-box; }4.2 table 结构重构:一行三列该有三个 td
原代码把三个 input 塞进一个td,再用一个<br>换行,这勉强能做出“两行控件”的效果,但 DataGrid 网格线会偏移。要还原表格语义,应该让每个输入控件单独占一个td,外层 table 保持cellspacing="0" cellpadding="0":
<table style="border: 1px solid blue;" cellspacing="0" cellpadding="0"> <tr> <td><input type="button" value="button" class="TDBT"></td> <td><input type="text" class="TDBT"></td> <td><input type="text" class="TDBT"></td> </tr> <tr> <td><input type="button" value="button" class="TDBT"></td> <td><input type="text" class="TDBT"></td> <td><input type="text" class="TDBT"></td> </tr> </table>4.3 完整修正后的 HTML 文件
把上面的 CSS 和表格合并成一个可直接本地打开的文件,存成tdbt-debug.html:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>TDBT 样式排障</title> <style> .TDBT { font-size: 12px; color: blue; border: 0; border-right: 1px solid blue; border-bottom: 1px solid blue; height: 18px; width: 80px; background-color: #D0D0FF; box-sizing: border-box; cursor: pointer; } .txLine { height: 18px; border: 0; border-bottom: 1px solid #000000; font-size: 16px; background-color: #FFFFEE; color: #0000FF; box-sizing: border-box; } </style> </head> <body> <table style="border: 1px solid blue;" cellspacing="0" cellpadding="0"> <tr> <td><input type="button" value="button" class="TDBT"></td> <td><input type="text" class="TDBT"></td> <td><input type="text" class="TDBT"></td> </tr> <tr> <td><input type="button" value="button" class="TDBT"></td> <td><input type="text" class="TDBT"></td> <td><input type="text" class="TDBT"></td> </tr> </table> <br> <nobr>请输入文字<input type="text" class="txLine"></nobr> </body> </html>这里把<img src="" width=360 height=1>去掉了,它原本只是为了撑出一个 1px 高的空行做视觉分隔,换成<br>更干净;nobr 是偏老的非标准标签,不影响布局,保留原意即可,如果要更规范可以把外层的nobr改成span并加上white-space: nowrap。
5. 本地验证页面效果后,回到控制台核对这次调用
5.1 浏览器里确认三个细节
双击打开tdbt-debug.html,重点看三处:表格外框是 1px 蓝色实线,单元格之间没有双线;每个.TDBT输入框只能看到右侧和底部的蓝线,背景为淡紫#D0D0FF,总高度接近 18px;.txLine输入框只有底部一条黑线,文字蓝色、背景米黄。如果还有偏差,把 DevTools 的 Computed 面板截图发给 Codex,让它对照样式继续改,不要自己在样式表里拿随机值试。
5.2 回控制台核对这次调用
刚才创建的YOUR_API_KEY会在 TaoToken 控制台里记录到这次对话的调用。你可以先到 TaoToken 模型对话 里用同一把 Key 发一条消息,确认模型 ID 和 Base URL 没填错;如果要长期让 Codex 排查这类页面样式,再打开 Coding Plan 看套餐是否够用。需要补 Key 就到 控制台 API Keys 创建,页面里选中的模型 ID 以模型广场当时列表为准。