I have created a page which is a login portal to three separate websites. On this page, I have displayed the three login portals to said websites. I am trying to style it all with css and as few classes as possible (I need to fine tune my css skills).
What I have created is a table with three rows and two columns called loginPortals:
<table class="loginPortals">
<tbody>
<tr>
<td>Picture 1</td>
<td>Login form 1</td>
</tr>
<tr>
<td>Picture 2</td>
<td>Login form 2</td>
</tr>
<tr>
<td>Picture 3</td>
<td>Login form 2</td>
</tr>
</tbody>
</table>
I’ve only just begun the styling of the table, so it’s very incomplete, however I’m struggling already. This is simplified, because I don’t know exactly how it’s going to look. Basically though, I want a border of some sort appearing between each row. The following doesn’t quite achieve this as I had wanted:
.loginPortals{
width:100%;
}
.loginPortals tbody:first-child td{
border-top:1px solid #000;
}
.loginPortals tbody tr td{
border-bottom:1px solid #000;
padding:1em 0;
}
The first-child selector isn’t working as I had thought it would. It is applying the top border to all the cells in all the rows. This is causing the line thickness to double in the middle of the rows.
How do I fix this so that the top border is only applied to the top row without creating extra classes or applying any inline style.
Thank you!
Joe
Your table borders need to be set to collapse:
You can then omit the
:first-childrule and just apply top and bottom borders for all your rows:Also, just for your information, this selector:
Means:
And not:
So since the
tbodyis the first and only child of.loginPortals, all thetdelements in all theirtrparents will be selected. See this answer for a visual explanation. You probably wanted this selector:But that’s not necessary because all you have to do is collapse your table borders.