fix(nav): 「我的短语」输入框被撑成 200px 高 #17
用户原话:「地址设置,短语那里,输入框怎么那么高啊。」
病根:模板把 input 包在 .field 里,而 .field 本身又是 .inline-form 的 flex 子项。
.field 是 flex-direction: column ⇒ 主轴是垂直方向,
于是 `.inline-form .input { flex: 1 1 200px }` 的 flex-basis
落在了**高度**上,再叠加 flex-grow 继续拉长。
.inline-form 的 align-items:center 又让它垂直居中,
看起来就是"一个很高的输入框 + 旁边孤零零一个按钮"。
线上实测(部署前,Playwright 量真实 rect):
短语输入框 h = 200.00px ← 正好等于 flex-basis
同页正常 input h = 45.80px
差 154.20px
修法:换用专属类 .nav-phrase-form,不动通用规则。
· 外层横向 flex(输入区 + 按钮),只把输入区当 flex 子项;
· 输入区内部仍走 .field 的纵向堆叠,并显式把内部 .input 的 flex 收回去
(这一条是关键:不收的话 flex-basis 又跑回垂直轴);
· 按钮 align-self:flex-end 跟输入框底对齐(tip 在下方,居中会显得按钮浮起来);
· 窄屏 ≤480px 按钮换行靠左。
为什么不去改 .inline-form 那条通用规则:
全站另有 15 处在用 .inline-form,且都是"input 直接当水平子项"的正确用法,
改通用规则会波及那些页面。本处是**孤例**(唯一把 .field 嵌进去的)。
验证(线上真实页面):
· 短语输入框 200.00px → 45.80px,与同页正常 input 差 0.0px
· label/input/tip 仍垂直堆叠;按钮与 input 垂直交叠 7.7px
· 回归:个人设置/任务看板/任务详情/笔记/名册/日程/微信读书/导航,
11 个 .inline-form 内的 input 全部 45.80px,零偏离
This commit is contained in:
@@ -4935,6 +4935,40 @@ button.btn, a.btn, summary.btn, .seg-btn, .icon-btn, .rv-act-btn, .cs-btn, .bf-b
|
||||
/* 隐藏中的条目淡一点,一眼能看出"它还在、只是不显示" */
|
||||
.nav-sortrow.is-off { opacity: .55; }
|
||||
.nav-sortrow.is-dragging { box-shadow: var(--shadow-l); border-color: var(--brand-2); }
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
地址设置:「我的短语」表单(工单 #17)
|
||||
|
||||
🔴 为什么不用 `.inline-form`(用户 2026-10-28:「输入框怎么那么高啊」):
|
||||
`.inline-form .input { flex: 1 1 200px }` 是为「input 直接当水平 flex 子项」
|
||||
设计的。本表单要把 label / input / tip 竖直堆叠,input 必须包进 `.field`
|
||||
(`flex-direction: column`)—— 一包进去,`flex-basis: 200px` 就落在
|
||||
**垂直主轴**上,输入框被撑成 200px 高的一条。
|
||||
|
||||
做法:外层横向 flex(左:输入区,右:按钮),只把**输入区**当 flex 子项;
|
||||
输入区内部仍走 `.field` 的纵向堆叠,并显式把 `.input` 的 flex 收回默认。
|
||||
⚠️ 不要改 `.inline-form` 那条通用规则:全站另有 15 处在用,且都是
|
||||
"input 直接当子项"的正确用法,改它会波及那些页面。
|
||||
------------------------------------------------------------ */
|
||||
.nav-phrase-form {
|
||||
display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap;
|
||||
margin: 0;
|
||||
}
|
||||
/* 输入区是横向主轴上的那个伸缩项(宽度在这里定,不是让内部 input 定) */
|
||||
.nav-phrase-form > .field { flex: 1 1 260px; min-width: 0; max-width: 380px; }
|
||||
/* 🔴 关键:把 input 从"flex 子项"退化成普通块,否则 flex-basis 又跑到垂直轴上 */
|
||||
.nav-phrase-form > .field > .input {
|
||||
flex: 0 0 auto; width: 100%; max-width: none;
|
||||
/* 单行高度:与全站 .input 一致(10px 上下 padding + 14px 字 + 1px 边框) */
|
||||
height: auto; min-height: 0;
|
||||
}
|
||||
/* 按钮跟输入框底对齐(不是与整块 field 居中)—— tip 在下方,居中会显得按钮浮起来 */
|
||||
.nav-phrase-form > .btn-row { flex: 0 0 auto; margin: 0; align-self: flex-end; }
|
||||
/* 窄屏:按钮换到下一行并靠左,不挤压输入框 */
|
||||
@media (max-width: 480px) {
|
||||
.nav-phrase-form > .field { flex: 1 1 100%; max-width: none; }
|
||||
.nav-phrase-form > .btn-row { width: 100%; }
|
||||
}
|
||||
.nav-drag {
|
||||
flex: 0 0 auto; cursor: grab; color: var(--faint); font-size: 13px;
|
||||
letter-spacing: -1px; user-select: none; padding: 0 2px;
|
||||
|
||||
Reference in New Issue
Block a user