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:
2026-10-28 11:57:36 +08:00
parent 34625cd7d7
commit eaa74bc593
2 changed files with 47 additions and 1 deletions
+34
View File
@@ -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;