3 Things (Almost) No One Knows About CSS

I was quoting your post not the quiz :smile:

Anyway all elements are display:inline by default until the UA applies its own styles so there is always more going on under the hood than you think. :wink:

Here’s another not so straight forward question.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
table tr > td {
	background:green;
}
table td {
	background:blue;
}
table td:first-child {
	background:yellow;
}
table > tr > td:first-child {
	background:red;
}
</style>
</head>

<body>
<table>
    <tr>
				<td>Test</td>
    </tr>
</table>
</body>
</html>

What colour will the td background be.

2 Likes

Not correctly then. I specifically say “background (by itself)”. This does actually mean no other properties. I guess you can change displays since you aren’t limited in the HTML you can use so I’m fine with that.

I’m aware of the displays default but I’m talking about the padding invalidating your code. It fails the quiz since the padding is needed for your example and my post, and the quiz specifically ask for what property can do the overlap by itself. Aside from default displays for elements and whatnot, background can’t do it.

I was avoiding any specifics to the quiz in case any one was trying it out but I take your point.

I was only playing devils advocate and if you remove the background from my post there appears to be no overlap but adding the background shows an overlap. It’s another misunderstood part of CSS and would have been good as a separate question :slight_smile:

2 Likes

You’re a sadist, O’Brien. :stuck_out_tongue:

In my eyes it’s narrowed down to 2 results instantly (ok technically 3 but that 3rd one has obviously less specificity) which is then left to specificity to determine the winner.

Sadist indeed.

I didn’t know if the green or yellow would win out. I had to try it.

says of both > and :first-child

You can use these to make selectors that are more specific.

But it doesn’t say which is more specific.

I thought order might have an effect, but no.

1 Like

Off the top of my head, only combinators do not have specificity. So >, +, etc.

It’s not an HTML element, class, ID, pseudo class, or pseudo element. So thus it HAS no specificity :slight_smile: .

You could have

table tr > td{}
table tr td{}

And the only thing that would ever allow the first rule to work is if you put it latter (ok ignore !important.)

So that means that the table tr>td{} is 0003 specificity while the table td:first-child{} is 0012 specificity. Order will not matter there.

Surprises me that the last one isn’t more specific than the second last, though, even if you rule out the child selectors.

The child selectors seem to cancel out the value of the selector, which seems weird to me.

The page will automatically insert <tbody> into the page (if not present already) so no matter what table>tr is IMPOSSIBLE. Invalidating that entire option.

1 Like

Ugh. Haha! That makes sense. Now I really hate that O’Brien person. :stuck_out_tongue:

It is a really good question, though. Great way to trip people up. :slight_smile:

1 Like

Yes, I found that out the hard way a long time ago :smile:

That’s what I’m here for :smile:

3 Likes

I was one to confuse a pseudo-element with a pseudo-class (my result was 92%). Haven’t done any CSS-from-scratch long time (usually using Bootstrap).

The last is the most specific and, if not for the browser inserting a THEAD element, would be selected.

Perhaps this should be a separate thread, but …
Are there a lot of variances from one browser to another in specificity?
Specificity seems to be pretty clear
http://www.w3.org/TR/css3-selectors/#specificity

No, specificity is universal and never varies.

tbody*
But it isn’t inserted, thus this option cannot be considered as an option. You’re correct though it WOULD be selected if not for the browsers inserting tbody. That fact alone though makes that option invalid. If the last option started with “tbody” instead of “table”, then yes that would win out. But it doesn’t :wink: .

table>tr will never select anything since in no possible universe will the browser not insert <tbody> before any rows.

3/3 of those questions in article and 100% on CSS Core on the first try. Some questions were a bit tricky :slight_smile: Nice quiz overall: with careful reading and understanding there were no ambiguities.

Regarding ideas for more tricky questions: I have some, but most of them won’t fit into the format with the number of predefined answers (and I’m not that good at coming up with false answers, haha). But, one of my favorite questions: “When the styles of siblings can have an impact on the position of the absolute positioned element?”

Well done :smile:

92% on the html one first try. Both html and css quizzes done in less than 15 minutes. Even though the answers aren’t posted, there is a lot of benefit to be gained from these quizzes. Great remedy for the “Imposter Syndrome”, especially if you are a full-stack free-lancer and have no way of gauging if you are keeping up with the industry on average. Plus they are a lot of fun.

2 Likes

I just have to say I didn’t assume that :hover was a pseudo-element, I was thinking that I’d apply a pseudo-element TO the anchor on :hover to create the shadow, which seems like a perfectly valid scenario. So I think that question should be re-evaluated, or at least consider re-wording or replacing that particular answer. :^)

I’m not sure I understand. A pseudo-element is a piece of content that doesn’t correspond to an actual HTML element; I’m not sure what you mean when you say you’d apply a pseudo-element to the anchor. Do you mean you would target a pseudo-element (such as :before or :after) of the anchor?

No immediate plans, but I really enjoy it so I’ll certainly be looking for excuses. :slight_smile:

3 Likes