Chrome 中 :首字母的奇怪行为
Odd behavior of :first-letter in Chrome
本文关键字:Chrome 更新时间:2023-09-26
将看似无害的类添加到具有 :first 字母的类的元素中会导致在某些情况下,第一个字母呈现不正确。元素最初具有类"unindent",然后添加了类"menuitemon"。小提琴 http://jsfiddle.net/pgf3reyt/4/显示这在一个元素上工作,而不是在另一个元素上工作。在火狐中工作正常。
p.unindent {
color: #555555;
background-color: #e6e6e6;
border-bottom: 1px solid #d3d3d3;
border-left: 1px solid rgba(0,0,0,0); /* so things are the same size so we don't develop scroll bars*/
border-right: 1px solid rgba(0,0,0,0);
border-top: 1px solid rgba(0,0,0,0);
padding-top: 2px;
padding-bottom: 2px;
padding-left: 25px;
padding-right: 5px;
margin-top: 0;
margin-bottom: 0;
}
p.unindent:first-letter {
margin-left: -20px;
}
p.unindent.menuitemon {
color: #e6e6e6;
background: #555555;
border: 1px solid #222222;
border-radius: 4px;
}
有人可以指出我可能做错了什么导致这种情况吗?
你没有做错任何事。显然,Chrome 已经决定,对于版本 41,它将搞砸重新绘制:first-letter
伪元素(顺便说一下,Chrome 因重绘错误而臭名昭著)。如果在标记中声明"menuitemon"类,则呈现具有负边距的伪元素没有问题。只有当你动态添加它时,它才会搞砸。
幸运的是,与影响 Chrome 39 -> 40 的级联分辨率错误不同,我能够通过在元素上使用负text-indent
而不是在:first-letter
上使用负边距来解决此问题:
p.unindent {
text-indent: -20px;
/* ... */
}
/*
p.unindent:first-letter {
margin-left: -20px;
}
*/
伪元素(:首字母)仅在父元素是块容器框时才有效(换句话说,它不适用于显示的第一个字母:inline; 元素。
必须将伪的父级设置为
.parent {display:block}
.menutitle {
/* font-size: 1.2em; */
font-weight: bold;
/* font-style: italic; */
margin-left: 0;
}
当我评论这两行时,它工作正常
编辑
不,它只解决了一半的问题
代码笔
相关文章:
- Chrome WebKitGetUserMedia
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- 在chrome.tabs.onCreated之后加载HTML页面
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- chrome扩展更改主机/域警告
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 激活chrome上的chrome.notifications对象
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- JS可以在Chrome中工作,但不能在Firefox中工作
- Chrome加载旧版本的Javascript文件
- 试图阻止Chrome通过扩展关闭
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- chrome在WebSocket握手期间获取新错误