Hallo, ich habe ein Problem bei der Verwendung von Bootstrap 4 alpha 6. Ich habe festgestellt, dass alle CSS nach dem Einbinden von BS4 vom Browser ignoriert wurden. Tiefer gegraben und einen Parsing-Fehler des generierten CSS gefunden.
Ich verwende Django 1.8.17, Compressor 2.1.1, Sass 3.4.22
Ich werde hier den ersten Analysefehler dokumentieren, den ich gefunden habe.
Der Fehler ist das doppelte Anführungszeichen "
in stroke='rgba(0, 0, 0, 0.5")',
während es stroke='rgba(0, 0, 0, 0.5)'
. Dies führt zu Parsing-Fehlern im Dokument.
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5")' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); }
Entspricht der vorkompilierten Version.
$navbar-light-toggler-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"), "#", "%23") !default;
$navbar-light-color: rgba($black,.5) !default;
$black: #000 !default;
{% compress css %}
<link rel="stylesheet" type="text/x-scss" media="screen" charset="utf-8"
href="/static/bootstrap/scss/bootstrap.scss" />
{% endcompress %}
COMPRESS_PRECOMPILERS = (
('text/coffeescript', 'coffee --compile --stdio'),
('text/x-sass', 'sass {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
('text/x-scss', 'sass --scss {{infile}} {{outfile}} --load-path {}'.format(LIB_PATH)),
)
sieht ziemlich schlecht aus. Jede Hilfe bei der Behebung dieses Problems wäre dankbar, ich werde wahrscheinlich nicht die Zeit für die kommenden Wochen haben.
Ich werde es versuchen. Ich bin mit Ihrer Codebasis nicht vertraut, daher wären Hinweise darauf, wo Sie anfangen sollen, / irgendwelche Ahnungen sehr wertvoll.
Ein paar Gedanken:
COMPRESS_ENABLED = False
?@carltongibson :
COMPRESS_ENABLED = False
, das gleiche Ergebnis wurde beim Setzen von True
.$ sass -v
Sass 3.4.22 (Selective Steve)
Ich habe versucht, entweder die Sass-Version oder eine vorgefertigte Bootstrap.css-Datei in einen Kompressorblock aufzunehmen, gefolgt von einer Datei, die nur einen Bodybackground:green als Kontrollleuchte für gültiges/parsbares CSS enthält. Ich werde „grün“ für die vorgefertigte .css-Version, aber nicht für .sass – wo Kompressor Bootstrap erstellt.
@wjdp OK Danke. Hmmm.
Kann ich in diesem Fall vorschlagen, einen Haltepunkt in Compressor.precompile
? Erstens ist content
richtig übergeben?
Ist dann in hunks()
das vom Precompiler zurückgegebene value
korrekt?
ich schaue mir das gerade an. das Problem ist das gleiche wie bei #764. der CssAbsoluteFilter verwendet r'url\(([^\)]+)\)'
, um URLs abzugleichen, und stoppt daher bei der ersten schließenden Klammer. Da Regex nicht in der Lage ist, mit einer beliebigen Anzahl von verschachtelten Klammern umzugehen, sehe ich drei Optionen:
Ich möchte nicht viel Zeit damit verbringen und prüfe Option 1, wenn jemand eine robustere Lösung erstellen möchte, würde ich mich freuen, dies zu überprüfen.
vorgeschlagene Korrektur in #828. es verarbeitet verschachtelte Klammern überhaupt nicht, es erwartet nur schließende Anführungszeichen, wenn es öffnende Anführungszeichen gibt (also url("data:...stroke='rgba(0, 0, 0, 0.5)
nicht übereinstimmen) und um sicher zu gehen, werden Datenuris ganz ignoriert.
@wjdp könntest du es mit # 828 versuchen? Es sollte tun, was Sie brauchen, aber ein Testlauf Ihrerseits wäre eine gute Bestätigung.
Sollte tun
@carltongibson Kann bestätigen, dass PR dieses Problem für mich behoben hat. Danke @karyon für deine sehr schnelle Arbeit! :Lächeln:
Super 👏🏽 danke fürs Nachfassen.