::first-letter 仅对块级容器中首个非空白非标点字符生效,需配合 float: left、font-size、line-height: 1、margin-right 及父元素 display: flow-root 清除浮动;中文需注意前导标点与字体宽度影响。
直接用 ::first-letter 配合 float: left 就能实现首字母浮动效果,但实际用起来容易出错——不是文字错位,就是样式不生效,关键在细节控制。
::first-letter 有时不生效这个伪元素只对「块级容器中的第一个文字字符」起作用,且有严格前提:
p、div),行内元素(如 span)无效::first-letter 就会跳过)display: inline 或 display: flex,伪元素会被禁用float: left 后文字紧贴不上?补这些样式仅设 float 容易让后续文字上浮到首字母右侧但不包裹、行高塌陷、甚至重叠。必须搭配以下控制:
::first-letter 显式设置 font-size(推荐使用 em 或 rem,避免固定像素破坏响应性)line-height: 1 防止首字母上下留白过大margin-right 留出文字间距(例如 0.2em),别依赖默认空白p 元素建议加 overflow: hidden 或 display: flow-root 清除浮动影响,避免父容器高度坍缩/* 示例:标准首字下沉浮动 */
p {
display: flow-root; /* 推荐替代 overflow: hidden */
}
p::first-letter {
float: left;
font-size: 3em;
line-height: 1;
margin-right: 0.2em;
font-weight: bold;
}中文没有“首字母”概念,但 ::first-letter 对汉字同样有效——它选的是第一个 Unicode 字符。不过要注意:
float 后可能挤压右侧文字,可加 shape-outside: circle() 或调整 width 控制环绕形状max-font-size(配合 clamp())或媒体查询降级最常被忽略的是父容器的 displa 模式和浮动清除方式——没加 
flow-root 或等效处理,整个段落布局就可能意外错乱。