2016-05-19 8 views
0

Ich habe Probleme, Etiketten direkt unter einem Span-Element zu platzieren. Wenn dies eine Eingabe wäre, für die ich das Label benötigt, würde ich dem Eingabeelement ein name-Attribut zuweisen und dem Label ein for = "name" -Attribut zuweisen. Es ist mir jedoch nicht möglich, einem Bereich ein Namensattribut zuzuweisen.Wie platziere ich ein Label direkt unter einer Spanne?

Ich muss eine Spanne verwenden, weil ich diese IcoMoon-Symbole verwenden möchte, die innerhalb einer Spanne platziert werden müssen.

Zur Zeit bin ich mit dem Etikett entweder links oder rechts der Spannweite fest. Ich kann nicht scheinen, dass es unter dem Span-Element zentriert ist.

Hier ist mein Code:

@font-face { 
 
\t font-family:icomoon; 
 
\t src:url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.eot?-m9wrda); 
 
\t src:url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.eot?#iefix-m9wrda) format("embedded-opentype"), 
 
      
 
     url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.ttf?-m9wrda) format("truetype"), 
 
     url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.woff?-m9wrda) format("woff"), 
 
     url(fonts/2ad343be.icomoon.svg#icomoon) format("svg"),url(fonts/69e79c77.icomoon.woff) format("woff"), 
 
     url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.svg?-m9wrda#icomoon) format("svg"); 
 
       
 
} 
 
.icon-bubbles{ 
 
    font-family: 'icomoon'; 
 
    speak: none; 
 
    font-style: normal; 
 
    font-weight: normal; 
 
    font-variant: normal; 
 
    text-transform: none; 
 
    line-height: 1; 
 
    -webkit-font-smoothing: antialiased; 
 
    -moz-osx-font-smoothing: grayscale; 
 
    font-size:36px; 
 
    color:#f00; 
 
    border: 1px solid white; 
 
} 
 

 
.icon-bubbles:before { 
 
    content: "\e613"; 
 
} 
 

 
#back { 
 
    width: 400px; 
 
    height: 200px; 
 
    background: black; 
 
    color: white; 
 
} 
 

 
table { 
 
    border-collapse: collapse; 
 
    margin-left: 5%; 
 
} 
 

 
table, th, td { 
 
    border: 1px solid white; 
 
    height: 80px; 
 
} 
 

 
label { 
 
    border: 1px solid white; 
 
}
<div id="back"> 
 
    <br> 
 
    <table border> 
 
    <tr> 
 
     <td> 
 
     <span class="icon-bubbles"></span> 
 
     <label>Label Text</label> 
 
     </td> 
 
     <td> 
 
     <span class="icon-bubbles"></span> 
 
     <label>Label Text</label> 
 
     </td> 
 
     <td> 
 
     <span class="icon-bubbles"></span> 
 
     <label>Label Text</label> 
 
     </td> 
 
    </tr> 
 
    </table> 
 
</div>

Hier ist ein Link auf die JSFiddle: http://jsfiddle.net/8Lffy7sg/

+2

Welchen Sinn macht die Verwendung von Label-Elementen, wenn Sie kein Eingabefeld haben ...? – CBroe

+0

Sie müssen ** icomoon nicht auf einer Spanne verwenden, jedes Element, das ein ': before' (fast alles außer Eingaben, Bilder, ...) haben kann, kann auch eine Icon-Klasse haben, also es sollte auch auf Ihren Etiketten gut funktionieren. Persönlich verwende ich immer ein "i" -Element, wie es fontawesome macht. – Pevara

Antwort

3

You shouldn't be using the table element for layout for one thing, da table nur für tabellarische Daten verwendet werden soll. Aus diesem Grund habe ich den HTML-Code so umstrukturiert, dass er div verwendet. Als nächstes möchten Sie nur das Element span als display:block haben, wodurch das Element wie ein div wirkt und einen Zeilenumbruch für die folgenden Elemente verursacht.

Darüber hinaus sind Etiketten für die Verwendung in Formularen, Etikett ein input Feld konzipiert. Wenn Sie nur einen Text mit der span verbunden wünschen, verwenden Sie einfach einen anderen span oder einen p Tag.

@font-face { 
 
    font-family: icomoon; 
 
    src: url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.eot?-m9wrda); 
 
    src: url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.eot?#iefix-m9wrda) format("embedded-opentype"), url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.ttf?-m9wrda) format("truetype"), url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.woff?-m9wrda) format("woff"), url(fonts/2ad343be.icomoon.svg#icomoon) format("svg"), url(fonts/69e79c77.icomoon.woff) format("woff"), url(http://s3.amazonaws.com/icomoon.io/4/IcoMoonApp/icomoon.svg?-m9wrda#icomoon) format("svg"); 
 
} 
 

 
.icon-bubbles { 
 
    font-family: 'icomoon'; 
 
    speak: none; 
 
    font-style: normal; 
 
    font-weight: normal; 
 
    font-variant: normal; 
 
    text-transform: none; 
 
    line-height: 1; 
 
    -webkit-font-smoothing: antialiased; 
 
    -moz-osx-font-smoothing: grayscale; 
 
    font-size: 36px; 
 
    color: #f00; 
 
    border: 1px solid white; 
 
} 
 

 
.icon-wrapper { 
 
    float: left; 
 
} 
 

 
.icon-wrapper span { 
 
    display: block; 
 
} 
 

 
.icon-bubbles:before { 
 
    content: "\e613"; 
 
} 
 

 
#back { 
 
    width: 400px; 
 
    height: 200px; 
 
    background: black; 
 
    color: white; 
 
} 
 

 
label { 
 
    border: 1px solid white; 
 
}
<div id="back"> 
 
    <div class="icon-wrapper"> 
 
    <span class="icon-bubbles"></span> 
 
    <label>Label Text</label> 
 
    </div> 
 
    <div class="icon-wrapper"> 
 
    <span class="icon-bubbles"></span> 
 
    <label>Label Text</label> 
 
    </div> 
 
    <div class="icon-wrapper"> 
 
    <span class="icon-bubbles"></span> 
 
    <label>Label Text</label> 
 
    </div> 
 
</div>

+0

Ich würde von der Wahl für "icon-wrapper" als Klassenname abraten, da icomoon ein '[class^=" Symbol "] selektor iirc verwendet, und sie könnten kollidieren – Pevara

+0

Nun, das ist eine dumme Wahl für icomoon, dass sie solche verwenden eine Namenskonvention, so dass es so leicht kollidieren würde ... egal, der Name ist willkürlich, es könnte alles sein. –

+0

Nicht sicher, ob es dumm ist, wenn es die Menge an CSS drastisch reduziert, wenn die Anzahl der Icons zunimmt. Auch nicht sicher, ob es tatsächlich kollidieren wird, nur gedacht, dass es hier erwähnenswert wäre. Lieber sicher als es tut mir leid ... – Pevara

0

Sie könnten versuchen, die <span> und die <label> jedes in einem div mit width:100% und text-align:center wie folgt setzen:

<div style="width:100%;text-align:center"> 

     <span class="icon-bubbles"></span> 
</div> 

<div style="width:100%;text-align:center"> 

     <label>Label Text</label> 
</div> 

+0

Ich verstehe, dass Sie das style-Attribut der Einfachheit halber verwenden, um den Punkt zu vermitteln, aber die Verwendung des style-Attributs für HTML-Elemente ist eine schlechte Übung und sollte ** IMMER ** vermieden werden. –

+0

Stimmen Sie zu, aber abhängig davon, in welcher Umgebung er/sie arbeitet, könnten Inline-Stile nützlich sein. – cthefinal

+0

Ich stimme nicht zu, dass HTML, CSS und JS immer getrennt sein sollten. –

1

Ich habe die folgende CSS:

td { 
    text-align: center; 
} 

Welche jedes td Element seinen Inhalt gemacht Anzeige zentriert.

Ich habe auch:

.icon-bubbles { 
    display: block; 
    margin: 10px 30px; 
} 

, die jeweils .icon-bubbles Display als Blockelement macht (was einen Zeilenumbruch und zwingt die label unter dem Symbol). Ich habe Ihre Margen reduziert, damit Sie das Beispiel besser sehen können.

Sie können die JSFiddle here anzeigen.

+0

Dies funktioniert mit der Tabellenimplementierung, die ich versucht habe zu tun . Das andere Beispiel verlangt, dass ich alles in divs umwandle, was viel komplizierter ist. Vielen Dank! –

+0

@bicycle_guy es ist egal, was Sie verwenden, 'div' oder' td', beides würde funktionieren, aber Sie sollten es wirklich in 'div' ändern, da' table' für Layout 100% falsch für Websites ist und ist aus Erreichbarkeitsgründen schrecklich. –

Verwandte Themen