Ik heb verschillende dezelfde HTML-elementen achter elkaar:
<span>1</span>
<span>2</span>
<span>3</span>
Ik ben op zoek naar de beste manier om ruimte TUSSEN de elementen toe te voegen met behulp van alleen CSS
[no space] [1] [space 10px] [2] [space 10px] [3] [no space]
Aanvullend:
- Schrijf de browsercompatibiliteit van uw bonnen op
UPDATE
Het lijkt erop dat ik onduidelijk was. Ik wil GEEN EXTRA HTML-MARKUP gebruiken zoals
<span></span> <span></span> <span class="last_span"></span>
Ik wil geen tabellen gebruiken
Ik wil dat de eerste en de laatste reeks automatisch worden getarget door CSS
Ik wil geen javascript gebruiken
Optionele vereiste: laatste span kan NIET LAATSTE KIND van de bovenliggende tag zijn, maar het zal de LAATSTE OVEREENKOMST van de bovenliggende tag zijn. Spans hebben geen andere tags ertussen.
Antwoord 1, autoriteit 100%
Een goede manier om dit te doen is als volgt:
span + span {
margin-left: 10px;
}
Elke span
voorafgegaan door een span
(dus elke span
behalve de eerste) heeft margin-left: 10px
.
Hier is een meer gedetailleerd antwoord op een vergelijkbare vraag: Scheidingstekens tussen elementen zonder hacks
Antwoord 2, autoriteit 12%
Gebruik gewoon marge of opvulling.
In jouw specifieke geval zou je margin:0 10px
alleen op de 2e <span>
kunnen gebruiken.
UPDATE
Hier is een mooie CSS3-oplossing (jsFiddle):
span {
margin: 0 10px;
}
span:first-of-type {
margin-left: 0;
}
span:last-of-type {
margin-right: 0;
}
Geavanceerde elementselectie met behulp van selectors zoals :nth-child()
, :last-child
, :first-of-type
, enz. . wordt ondersteund sinds Internet Explorer 9.
Antwoord 3, autoriteit 9%
voeg deze regels toe aan de bovenliggende container:
display: grid
grid-auto-flow: column
grid-column-gap: 10px
Goede referentie: https://cssreference.io/
Browsercompatibiliteit: https://gridbyexample.com/browsers/
Antwoord 4, autoriteit 5%
Je kunt elementen stylen door de eerste uit te sluiten, slechts in één regel code:
span ~ span {
padding-left: 10px;
}
Je hoeft geen lessen te wijzigen.
Antwoord 5, autoriteit 4%
U kunt profiteren van het feit dat span
een inline element is
span{
word-spacing:10px;
}
Deze oplossing werkt echter niet als u meer dan één woord tekst in uw spanwijdte heeft
Antwoord 6, autoriteit 2%
span:not(:last-child) {
margin-right: 10px;
}
Antwoord 7
Je kunt zo schrijven:
span{
margin-left:10px;
}
span:first-child{
margin-left:0;
}
Antwoord 8
<span>
is een inline element, dus je kunt er geen spaties op maken zonder het blokniveau te maken.
Probeer dit
Horizontaal
span{
margin-right: 10px;
float: left;
}
Verticaal
span{
margin-bottom: 10px;
}
Compatibel met alle browsers.
Antwoord 9
U moet uw elementen in een container stoppen en vervolgens nieuwe CSS3-functies gebruiken, zoals css grid, gratis cursusen gebruik vervolgens grid-gap:value
die is gemaakt voor uw specifieke probleem
span{
border:1px solid red;
}
.inRow{
display:grid;
grid-template-columns:repeat(auto-fill,auto);
grid-gap:10px /*This add space between elements, only works on grid items*/
}
.inColumn{
display:grid;
grid-template-rows:repeat(auto-fill,auto);
grid-gap:15px;
}
<div class="inrow">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
<div class="inColumn">
<span>4</span>
<span>5</span>
<span>6</span>
</div>
Antwoord 10
Of, in plaats van de marge in te stellen en deze te negeren, kunt u deze gewoon meteen goed instellen met de volgende combinatie:
span:not(:first-of-type) {
margin-left: 5px;
}
span:not(:last-of-type) {
margin-right: 5px;
}
Antwoord 11
Als u verschillende items wilt uitlijnen en u wilt graag dezelfde marge aan alle kanten hebben, kunt u het volgende gebruiken. Elk element binnen container
, ongeacht het type, krijgt dezelfde omringende marge.
.container {
display: flex;
}
.container > * {
margin: 5px;
}
Als u items op een rij wilt uitlijnen, maar het eerste element de meest linkse rand van container
wilt laten raken en alle andere elementen op gelijke afstanden wilt plaatsen, kunt u dit gebruiken:
.container {
display: flex;
}
.container > :first-child {
margin-right: 5px;
}
.container > *:not(:first-child) {
margin: 5px;
}
Antwoord 12
span.middle {
margin: 0 10px 0 10px; /*top right bottom left */
}
<span>text</span> <span class="middle">text</span> <span>text</span>