Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to force span to use parent font-family in CSS

When HTML span has CSS font-family, I can't force it to use parent font-family

.Parent {
  font-family: tahoma !important;
}

.Child {
  font-family: cursive, geneva;
}
<div class="Parent">
  <span class="Child">Text</span>
</div>

Why span don't use parent font-family?

How can I make this work?

like image 390
Mohammad Avatar asked Dec 03 '15 14:12

Mohammad


People also ask

How do you override span?

The reason is that in the CSS cascade, any CSS declaration in a style attribute has higher specificity than anything you can get with a CSS rule in a style element or in a linked style sheet. Therefore, the only way to override such a rule is to use !

How can use font-family in span tag in HTML?

The style font-family can be applied on all tags for text, i.e. besides the common text section like <DIV> and <SPAN>, it can also be used for tage like table rows and table cells, <TR> and <TD>.

How do I force a font in HTML?

To change font type purely with HTML, use the CSS font-family property. Set it to the value you want and place it inside a style attribute. Then add this style attribute to an HTML element, like a paragraph, heading, button, or span tag.

Can we use multiple font-family in CSS?

Multiple variations of a font family can be declared by changing the font-weight and src property of @font-face rule.


2 Answers

You could select all the children elements using .parent * and then set font-family to inherit. This will effectively override the child element font and force all children elements to inherit the value of whatever the closest parent element's font is.

.parent {
  font-family: tahoma;
}
.child {
  font-family: cursive, geneva;
}
.parent * {
  font-family: inherit;
}
<div class="parent">
  <span class="child">Text</span>
</div>

And if you only want to target the .child element, you would obviously change the selector to .parent .child.

Depending on what you're trying to achieve, it's also worth mentioning that you can use the direct child selector, >, in order to only target direct children: .parent > *.

.parent {
  font-family: tahoma;
}
.descendant {
  font-family: cursive, geneva;
}
.parent > * {
  font-family: inherit;
}
<div class="parent">
  <span class="descendant">Direct child. <em class="descendant">Not a direct child</em></span>
</div>
like image 63
Josh Crozier Avatar answered Oct 08 '22 03:10

Josh Crozier


CSS priority goes something like this:

  1. Rules on this element marked with !important
  2. High to low rule scoring based on the number of ID tags, classes, etc., for rules applying to this element.
  3. The browser's default user agent styles.
  4. For rules that are inherited by default, like font-family (but not others like background-color), the current value of the parent(s).

What your child node is getting is not number 1. in that list, but 4. The !important flag is making sure that the parent has that font set, but that importance does not carry over to children. You could set font-family: inherit !important if you really, really want every element to take its parent font.

Word of advice, though: Only use !important in extreme situations. You can often one-up another CSS rule's priority in a much more gentle way.

like image 23
Katana314 Avatar answered Oct 08 '22 03:10

Katana314