Positionskreis in der Tabellenzelle mit einem div - html, css

Ich bin neu in HTML und CSS und habe eine interessanteProblem. Ich möchte einen roten Kreis mit einer Höhe und einer Breite von 40 Pixeln in einer Tabellenzelle positionieren und diese Höhe und Breite unabhängig von der Höhe oder Breite der Tabellenzelle beibehalten. Es würde also so aussehen:

Bildbeschreibung hier eingeben

Mit dem Kreis immer zentriert und die gleiche Größe und der Rest der Zelle als Leerzeichen. Ich möchte das auch, wenn möglich, mit nur einer CSS-Klasse wie folgt tun:

   td.circle {
background: #f00;
width: 40px;
height: 40px;
right:50%;
bottom: 50%;
vertical-align: middle;
transform: translate (50%,50%);
border-radius: 50%;
}

Im Moment, der Code, den ich habe, erweitert die Kreise mit und die Höhe mit der Breite oder Höhe der Zelle, gibt es eine Möglichkeit, dies zu verhindern?

Antworten:

2 für die Antwort № 1

Wenn du kein div in die td und verwenden Sie das als Ihren Kreis, dann klingt es wie ein Job für ein Pseudo-Element.

table {
width: 80%;
margin: 1em auto;
}
td {
border: 1px solid grey;
}
td.circle:before {
content: attr(data-char);
display: block;
background: #f00;
width: 40px;
height: 40px;
line-height:40px;
text-align:center;
vertical-align: middle;
border-radius: 50%;
margin:0 auto;
}
<table>
<tr>
<td class="circle" data-char="H"></td>
<td class="circle" data-char="I"></td>
<td class="circle" data-char="J"></td>
<td class="circle" data-char="K"></td>
</tr>
</table>

2. Lösung

Ich kann ehrlich sagen, dass ich das lieber über eine tatsächlich Hintergrundbild aber wenn es reines CSS sein muss und wir keine Elemente innerhalb der td wir können einen begrenzten kreisförmigen radialen Gradienten verwenden.

.circle {
background-image:
-webkit-radial-gradient(
circle,
red, red 20px, transparent 20px
);
background-image:
radial-gradient(
circle,
red, red 20px, transparent 20px
);
border:1px solid grey;
}

table {
width: 80%;
margin: 1em auto;
table-layout: fixed;
text-align: center;
}

td {
height: 40px;
}
<table>
<tr>
<td class="circle">1</td>
<td class="circle">2</td>
<td class="circle">3</td>
<td class="circle">4</td>
</tr>
</table>


1 für die Antwort № 2

Du kannst das mit einem Div machen.

table {
width: 50%;
}
td {
border: 1px solid;
text-align: center;
vertical-align: middle;
width: 25%;
height: 80px;
}
.circle {
content: "";
background: transparent;
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
border: 3px solid red;
border-radius: 50%;
}
<table>
<tr>
<td><div class="circle">H</div></td>
<td><div class="circle">I</div></td>
<td><div class="circle">J</div></td>
<td><div class="circle">K</div></td>
</tr>
</table>

Update basierend auf einem Kommentar.

Hier ist eine Alternative zu Paulie's Pseudo position: absolute, obwohl ich immer noch empfehlen zu verwenden <td class="circle" data-char="H"></td> stattdessen. Es gibt bessere Kontrolle, da der Buchstabe innerhalb des Pseudo ist, nicht draußen, wie dieser sein muss.

table {
width: 50%;
}
td {
border: 1px solid;
text-align: center;
vertical-align: middle;
width: 25%;
height: 80px;
position: relative;
}
.circle:before {
content: "";
background: transparent;
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
border: 3px solid red;
border-radius: 50%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
<table>
<tr>
<td class="circle">H</td>
<td class="circle">I</td>
<td class="circle">J</td>
<td class="circle">K</td>
</tr>
</table>


Speisekarte