问题
How would I negate or remove a parents text-decoration style? For example in the following, both the text and the anchor have a text-decoration of line-through, is there a way to not have that applied to the anchor tag?
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red;">Not Dead Text</a>
</span>
NOTE: wrapping the inner text in a span isn't an easy option with what I have so I'm looking for a solution based on the css styles if possible.
回答1:
The following line in the accepted answer is incorrect:
Any text decoration setting on a descendant box can never “undo” the text decorations of an ancestor box.
Never say never, right?
I have not found a solution for IE yet (unless you happen to be working with a scenario where the strikethrough is set on a <TD>
) however it is possible for other browsers, although you will have to battle the side-effects of the solution.
See for yourself at http://result.dabblet.com/gist/3713284/
In short: just add display:table;
to the child's style. For some reason in FF you can use any of table
, block
, list-item
or table-caption
but these don't work in Safari/Chrome.
It uses the code below:
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red;">Undesired strikethrough</a>
</span>
<div style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: table;">display: table in a div</a>
</div>
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: table;">display: table in a span</a>
</span>
<span style="text-decoration:line-through; display: block;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: table;">display: table in a span with "display:block;"</a>
</span>
<span style="text-decoration:line-through; display: table-cell;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: table;">display: table in a span with "display:table-cell;"</a>
</span>
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: list-item;">display: list-item</a>
</span>
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red; display: table-caption;">display: table-caption;</a>
</span>
回答2:
I just found, that if you set position: absolute for block, it will work both in chrome and FF:
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red;">This not works</a>
</span>
<br/>
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="position: absolute;margin-left: 5px;text-decoration:underline;color:Red;">This works</a>
</span>
Ugly, but can help in some cases;
回答3:
I don't believe it's possible. From SitePoint:
Also, text decorations on inline boxes are rendered along the entire box, even if it contains descendant boxes. This, too, may appear similar to inheritance. Any text decoration setting on a descendant box can never “undo” the text decorations of an ancestor box.
回答4:
This works as well: display: inline-block
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:Red;">This not works</a>
</span>
<br/>
<span style="text-decoration:line-through;">
Dead Text
<a href="#" style="text-decoration:underline;color:blue;display:inline-block">This works</a>
</span>
来源:https://stackoverflow.com/questions/1261955/inherited-text-decoration-style