2016-06-11 15 views
3

Ich versuche, eine Funktion zu erstellen, die mich einfach die zur Ausgabe ermöglicht Schlüsselnamen und Schlüsselwert eine einfachen zweidimensionalen Karte in CSS:Wie kann ich den Schlüsselnamen anstelle von Wert in map-get verwenden?

$people: (
    "Hellen": (
     age: "34", 
     sex: "female" 
    ), 
    "Patrick": (
     age: "23", 
     sex: "male" 
    ), 
    "George": (
     age: "10", 
     sex: "male" 
    ), 
    "Vicky": (
     age: "19", 
     sex: "female" 
    ) 
); 

Ich bin eine einfache Funktion zu schaffen abrufen diese Informationen:

@each $person-name, $person-details in $people { 
    $age: map-get($person-details, 'age'); 
    $sex: map-get($person-details, 'sex'); 

    .#{$person-name} { 

     height: 100 px; 
     width: 100 px; 
     background: #FF3C00; 
     margin: 0 auto; 

     &:before { 
      content:$person-name " " + $age " "; 
     } 

     &:after { 
      content: $sex; 
     } 

    } 

} 

HTML:

<div class="Hellen"></div> 

Ich kann jedoch keine Informationen finden, die sowohl den Schlüssel als auch den Wert als separate Objekte ausgeben. Ich kann nur den Wert lesen, den Schlüssel nicht mit dem folgenden:

$age: map-get($person-details, 'age'); 

Ergebnis:

Hellen 34 female 

statt: Hellen Alter: 34 Geschlecht: weiblich

Wie kann ich das bekommen Tastenbeschriftung mit oder ohne Wert?

+0

try 'map-Tasten()'? – twxia

+0

Es zeigt mir immer noch nicht, wie man den $ Schlüsselnamen anstelle des Wertes bekommt. Ich schaue mir hier an: [map-keys (("foo": 1, "bar": 2)) => "foo", "bar"] (http://sass-lang.com/documentation/Sass/) Script/Functions.html # map_keys-instance_method) – HGB

+0

'map-keys()' gibt Schlüsselzeichenfolgen zurück. Was bedeutet "$ Schlüsselname"? Meinst du, du willst den String des Variablennamens bekommen? – twxia

Antwort

6

Verwenden Sie map-keys(), um alle Schlüssel in der Liste zu erhalten.

Probe:

@each $person-name, $person-details in $people { 
    $age: map-get($person-details, 'age'); 
    $sex: map-get($person-details, 'sex'); 
    $keys: map-keys($person-details); 

    .#{$person-name} { 

     height: 100 px; 
     width: 100 px; 
     background: #FF3C00; 
     margin: 0 auto; 

     &:before { 
      content:"#{$person-name} #{nth($keys, 1)} : #{$age} "; 
     } 

     &:after { 
      content: "#{nth($keys, 2)}: #{$sex}"; 
     } 

    } 

} 
+1

Hey danke, das hat funktioniert, ich wusste nicht, dass du sie auf diese Weise zusammenfassen kannst. Ich bin auf meinem Telefon, aber ich nehme an, dass es eine Möglichkeit gibt, dies dynamischer zu machen, d. H. @Mixin-Personendetails ($ Person-Name, $ Key); – HGB