2017-06-26 1 views
0

Ich suchte eine Weile, konnte aber zu meiner Überraschung kein ähnliches Problem finden.Wenn Bootstrap in mehreren SASS-Dateien verwendet wird, treten Probleme mit der Klassenüberschreibung auf. Was ist eine richtige SASS/Bootstrap-Struktur?

Ich verwende SASS und Bootstrap für eine Drupal-Installation. Ich habe eine einfache Dateistruktur:

  • base.scss - Bietet Bootstrap und variable Importe.
  • style.scss - die Module Projekt Importe:

style.scss

@import "base"; 
@import "util"; 

@import "node"; 
@import "project"; 
@import "breadcrumb"; 
@import "menu"; 

So natürlich alle diese [above].scss sind vorhanden und im selben Ordner befinden.

Mein Ziel

  • Ich möchte in allen separaten Dateien verwenden Bootstrap: Knoten, Projekt, Paniermehl und Menü, aber nur einmal enthalten Bootstrap.

Das Problem

  1. Wenn ich in einem der angegebenen Dateien @extend .breadcrumb; wollen ohne import "base"; kann der Wähler .breadcrumb nicht gefunden werden.
  2. Wenn ich import "base"; in diesen n separaten Dateien werden Bootstrap-Selektoren n mal enthalten. Dies führt zu einem unglaublichen Durcheinander und macht das Übersteuern von Bootstrap-Selektoren kompliziert. Zum Beispiel möchte ich Bootstrap .navbar-toggle ändern. Wenn ich dies in node.scss tun würde, wird es durch den dann importierten Standard Bootstrap-Selektor in project.scss überschrieben werden.

Fragen

  • Gibt es eine richtige Art und Weise Bootstrap, um nur einmal und es in mehrere anderen Dateien verwenden?
  • Ich verstehe nicht wirklich, warum Problem Nr. 1 überhaupt existiert. SASS doc sagt:

Sass wird die Datei übernehmen, die Sie importieren möchten, und kombinieren es mit der Datei in die Sie importieren, so dass Sie eine einzelne CSS-Datei an den Webbrowser dienen kann.

  • Also, wenn ich die oben genannten style.scss verwenden, dass die Einfuhren Bootstrap und nicht Import Bootstrap in den Modulen, warum der Compiler jede Bootstrap-Klasse zu lösen Fehler? Das klingt nicht wirklich nach kombiniert Importe, für mich. Oder fehlen mir einige der Grundlagen?

Vielen Dank im Voraus.

base.scss:

/*! 
* Bootstrap v3.3.7 (http://getbootstrap.com) 
* Copyright 2011-2016 Twitter, Inc. 
* Licensed under MIT (https://github.com/twbs/../../bootstrap/stylesheets/bootstrap/blob/master/LICENSE) 
*/ 

// Core variables and mixins 

@import "variables"; 
@import "../../bootstrap/stylesheets/bootstrap/mixins"; 

// Reset and dependencies 
@import "../../bootstrap/stylesheets/bootstrap/normalize"; 
@import "../../bootstrap/stylesheets/bootstrap/print"; 
@import "../../bootstrap/stylesheets/bootstrap/glyphicons"; 

// Core CSS 
@import "../../bootstrap/stylesheets/bootstrap/scaffolding"; 
@import "../../bootstrap/stylesheets/bootstrap/type"; 
@import "../../bootstrap/stylesheets/bootstrap/code"; 
@import "../../bootstrap/stylesheets/bootstrap/grid"; 
@import "../../bootstrap/stylesheets/bootstrap/tables"; 
@import "../../bootstrap/stylesheets/bootstrap/forms"; 
@import "../../bootstrap/stylesheets/bootstrap/buttons"; 

// Components 
@import "../../bootstrap/stylesheets/bootstrap/component-animations"; 
@import "../../bootstrap/stylesheets/bootstrap/dropdowns"; 
@import "../../bootstrap/stylesheets/bootstrap/button-groups"; 
@import "../../bootstrap/stylesheets/bootstrap/input-groups"; 
@import "../../bootstrap/stylesheets/bootstrap/navs"; 
@import "../../bootstrap/stylesheets/bootstrap/navbar"; 
@import "../../bootstrap/stylesheets/bootstrap/breadcrumbs"; 
// [...] other components 

// Components w/ JavaScript 
@import "../../bootstrap/stylesheets/bootstrap/modals"; 
@import "../../bootstrap/stylesheets/bootstrap/tooltip"; 
// [...] 

// Utility classes 
@import "../../bootstrap/stylesheets/bootstrap/utilities"; 
@import "../../bootstrap/stylesheets/bootstrap/responsive-utilities"; 

Antwort

0

Haben Sie Sass starter kit verwenden, die mit Bootstrap Thema kommt?

Von dem, was ich weiß, sie empfehlen Ihr style.scss wie folgt aussehen:

// Default variables. 
@import 'default-variables'; 

// Bootstrap Framework. 
@import '../bootstrap/assets/stylesheets/bootstrap'; 

// Base-theme overrides. 
@import 'overrides'; 

Also meine Vermutung ist, dass Sie Variablen und Bootstrap-Dateien in style.scss durch zusätzliche Dateien gefolgt importieren.

Sie können dann Variablen und Überschreibungen hinzufügen/bearbeiten, und Sie sollten in der Lage sein, zusätzliche Dateien wie Knoten, Menü usw. zu importieren. Sie alle sollten Zugriff auf Bootstrap-Selektoren und Variablen haben.

Es tut mir leid, wenn ich Ihre Frage missverstanden habe. Ich benutze ein älteres Setup mit Bootstrap und Less.

+0

Ich benutze das "weniger" Starterkit des Drupal 8 Bootstrap Basisthemas, spezifiziert in https://sevaa.com/blog/build-drupal-8-bootstrap-subtheme-sass/. Meine Bootstrap-Dateien und Variablen werden in _base.scss_ importiert, die von _style.scss_ importiert wird und alle Module importiert. Diese funktionieren nicht ohne Importanweisungen. Ich habe auch versucht, eine neue 'test.scss' in _base.scss_ zu importieren (test.scss importiert _base.scss_ nicht). Ergebnis: 'Der Selektor" .breadcrumb "wurde nicht gefunden. In _style.scss_ können Bootstrap-Variablen und Selektoren verwendet werden. Nur die importierten Dateien haben keinen Zugriff. – Niklas

+0

Hmm es klingt wie es ein Problem mit Ihrem base.scss ist. Haben Sie versucht, Bootstrap und Variablen direkt in style.scss ohne Basisdatei zu importieren und zu prüfen, ob Variablen und Selektoren in Modulen funktionieren? Oder prüfen, ob Variablen und Selektoren in base.scss selbst funktionieren? Gibt es auch einen Grund, das SASS Starter Kit nicht für D8 zu verwenden? – Olenka

+0

Ich habe keine verdammte Idee, warum ich mich entschied, den Anweisungen im Tutorial blind zu folgen und das weniger Starterkit zu kopieren ... Aber ich denke nicht, dass es ein großes Problem ist, da die Dateien und das Konzept fast identisch sein sollten, seit meinem jetzigen Setup basiert auf [Bootstrap SASS] (https://github.com/twbs/bootstrap-sass) Quelldateien. Wenn Sie mein oben genanntes "test.scss" -Szenario erneut gelesen haben, habe ich Ihren Vorschlag bereits versucht, direkt in den Stil zu importieren (naja, ich habe ein anderes Modul in base.scss importiert, was im Prinzip das Gleiche ist), leider ohne Erfolg. Ich werde base.scss in den Beitrag aufnehmen. – Niklas

Verwandte Themen