I'm creating a form that has required fields. To mark these as required, I'm putting an asterisk (*) as a ::before
element and floating it right so it is by the top right hand corner of the field.
The issue I'm having is a few of these fields are positioned with CSS Grids and when I add a ::before
element to the grid, it is treated as another grid item and pushes everything over to a new grid row.
Why is CSS grids treating the ::before
element as another grid item? How would I make the asterisk be positioned like the input elements?
Here's the basic HTML/CSS:
html {
width: 75%;
}
ul {
list-style: none;
}
input {
width: 100%
}
.grid {
display: grid;
grid-template-columns: .33fr .33fr .33fr;
}
li.required::before {
content: '*';
float: right;
font-size: 15px;
}
<ul>
<li class="required">
<input type="text">
</li>
<li class="grid required">
<p>one</p>
<p>two</p>
<p>three</p>
</li>
<li class="required">
<input type="text">
</li>
</ul>
Here's a fiddle: https://jsfiddle.net/zbqucvt9/