Chrome 中 :first-letter 的奇怪行为
Odd behavior of :first-letter in Chrome
向具有包含 :first-letter 的 class 的元素添加看似无害的 class 会导致第一个字母在某些情况下呈现不正确。一个元素原来有class"unindent",然后加入class"menuitemon"。 fiddle http://jsfiddle.net/pgf3reyt/4/ 显示这适用于一个元素,而不适用于另一个元素。在 Firefox 中运行正常。
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;
}
有人可以指出我可能做错了什么导致这个吗?
.menutitle {
/* font-size: 1.2em; */
font-weight: bold;
/* font-style: italic; */
margin-left: 0;
}
我评论那两行的那一刻它工作正常
编辑
不,它只解决了一半的问题
你没有做错任何事。显然 Chrome 已经决定对于版本 41,它会搞砸重绘 :first-letter
伪元素(顺便说一句,Chrome 是 臭名昭著的 用于重绘错误)。如果您在标记中声明 "menuitemon" class ,则呈现具有负边距的伪元素没有问题。只有当你动态添加它时,它才会搞砸。
幸运的是,不像, I was able to work around this very trivially by using a negative text-indent
on the element instead of a negative margin on :first-letter
:
p.unindent {
text-indent: -20px;
/* ... */
}
/*
p.unindent:first-letter {
margin-left: -20px;
}
*/
伪元素(:first-letter)仅在父元素为块状容器框时有效(换句话说,对display:inline;元素的首字母无效)
您必须将 pseudo 的父级设置为
.parent {display:block}
向具有包含 :first-letter 的 class 的元素添加看似无害的 class 会导致第一个字母在某些情况下呈现不正确。一个元素原来有class"unindent",然后加入class"menuitemon"。 fiddle http://jsfiddle.net/pgf3reyt/4/ 显示这适用于一个元素,而不适用于另一个元素。在 Firefox 中运行正常。
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;
}
有人可以指出我可能做错了什么导致这个吗?
.menutitle {
/* font-size: 1.2em; */
font-weight: bold;
/* font-style: italic; */
margin-left: 0;
}
我评论那两行的那一刻它工作正常
编辑
不,它只解决了一半的问题
你没有做错任何事。显然 Chrome 已经决定对于版本 41,它会搞砸重绘 :first-letter
伪元素(顺便说一句,Chrome 是 臭名昭著的 用于重绘错误)。如果您在标记中声明 "menuitemon" class ,则呈现具有负边距的伪元素没有问题。只有当你动态添加它时,它才会搞砸。
幸运的是,不像text-indent
on the element instead of a negative margin on :first-letter
:
p.unindent {
text-indent: -20px;
/* ... */
}
/*
p.unindent:first-letter {
margin-left: -20px;
}
*/
伪元素(:first-letter)仅在父元素为块状容器框时有效(换句话说,对display:inline;元素的首字母无效)
您必须将 pseudo 的父级设置为
.parent {display:block}