2016-08-02 35 views
0

Nachdem ich viele überflüssige css-Dateien in scss-Dateien umgewandelt habe, habe ich eine Menge scss-Dateien. Ich bin mir ziemlich sicher, dass es unter diesen Dateien viele häufige CSS gibt und ich möchte diesen Code extrahieren.Wie kann man scss-Code aus mehreren Dateien extrahieren?

Als Beispiel lassen Sie uns sagen, dass ich diesen Block von SCSS Code haben (lassen Sie uns den Block A nennen):

.test { 
    color: white; 

    .toto { 
     background: red; 
     font-size: 12px; 
    } 
} 

Und ein anderer Block (wir Block B nennen wollen):

.test { 
    color: black; 

    .toto { 
     background: blue; 
     font-size: 12px; 
     text-align: center; 
    } 
} 

ich möchte folgende gemeinsame SCSS Code von Block A und B in der Lage sein zu extrahieren: scheint

.test { 
    .toto { 
     font-size: 12px; 
    } 
} 

Es ist wie ein einfaches ta sk zu tun, aber mit einer großen Liste von langen scss-Dateien, ist es wirklich schmerzhaft, es manuell zu tun. Nach einiger Suche habe ich kein Werkzeug dafür gefunden. Eine intermediäre Lösung könnte darin bestehen, Sass-Code in ein multidimensionales assoziatives Array umzuwandeln und Arrays zu bearbeiten, um Schnittpunkte zu finden, aber ich konnte keine einfache Lösung finden, um dies zu tun, so dass jede Hilfe geschätzt werden würde.

+0

Sie möchten nur die Eigenschaften, die gleich sind oder löschen, die wiederholt werden? – blonfu

Antwort

0

Es gibt ein paar Ansätze, aber in diesem Fall würde ich für eine Variable entscheiden:

$base-font-size: 12px; 

.test { 
    color: white; 

    .toto { 
     background: red; 
     font-size: $base-font-size; 
    } 
} 

.test { 
    color: black; 

    .toto { 
     background: blue; 
     font-size: $base-font-size; 
     text-align: center; 
    } 
} 

Oder Sie könnten eine toto mixin mit einigen Standardeinstellungen hinzufügen und verwenden Sie diese:

@mixin toto($background: red, $text-align: left, $font-size: 12px) { 
    .toto { 
     background: $background; 
     text-align: $text-align; 
     font-size: $font-size; 
    } 
} 


.test { 
    color: white; 
    @include toto(); 
} 

.test { 
    color: black; 
    @include toto(blue, center); 
} 

EDIT : oder verwenden Sie extend:

.font-size-12 { 
    font-size: 12px; 
} 

.test { 
    color: white; 

    .toto { 
     @extend .font-size-12; 
     background: red; 
    } 
} 

.test { 
    color: black; 

    .toto { 
     @extend .font-size-12; 
     background: blue; 
     text-align: center; 
    } 
} 
+0

Vielen Dank für Ihre Antwort, aber was ich brauche, ist keine Möglichkeit, diesen Code von Hand zu schreiben, sondern eher wie ein Skript, das eine Liste von Dateien liest und mir die allgemeinen Regeln gibt, die in all diesen Dateien gefunden werden. Etwas wie "extract-scss-intersection --output = intersection.scss file1.scss file2.scss ... fileN.scss", das file1 zu fileN analysieren würde und intersection.scss ausgeben würde – vbourdeix

+0

Nun könnte man sie in ein PHP-Skript laden oder was auch immer Sie sich wohl fühlen und machen Sie sie in Arrays - Sie könnten dann Elemente mit passenden Schlüsseln entfernen und die Dateien neu schreiben ... http://stackoverflow.com/questions/6205017/parse-a-string-of-css-declarations- und-convert-it-zu-einem-array – Bat

+0

Das ist die Idee in der Tat, was bedeutet, ich muss einen funktionierenden Sass-Parser finden oder einen implementieren (aber das klingt nach einer kniffligen Aufgabe). Wenn Sie einen guten kennen, der in der Lage ist, eine Sass-Datei in ein mehrdimensionales PHP-Array zu konvertieren, lassen Sie es mich wissen :) – vbourdeix