您好,我在使用 Bootstrap 4 alpha 6 时遇到了一个问题。遇到 BS4 包含后的所有 CSS 都被浏览器忽略了。 深入挖掘,发现生成的css解析错误。
我正在使用 Django 1.8.17、Compressor 2.1.1、Sass 3.4.22
我将在这里记录我发现的第一个解析错误。
错误是stroke='rgba(0, 0, 0, 0.5")',
的双引号"
stroke='rgba(0, 0, 0, 0.5")',
而它应该是stroke='rgba(0, 0, 0, 0.5)'
。 这会导致文档中的解析错误。
.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"); }
与预编译版本匹配。
$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)),
)
看起来很糟糕。 任何解决此问题的帮助将不胜感激,我可能在接下来的几周内没有时间。
我去试试我不熟悉你的代码库,所以任何关于从哪里开始/任何预感的指示都是非常有价值的。
一些想法:
COMPRESS_ENABLED = False
会发生这种情况吗?@卡尔顿吉布森:
COMPRESS_ENABLED = False
,设置True
观察到相同的结果。$ sass -v
Sass 3.4.22 (Selective Steve)
我尝试在压缩器块中包含 sass 版本或预构建的 bootstrap.css 文件,然后是一个仅包含主体背景的文件
@wjdp好的 谢谢。 嗯。
在这种情况下,我可以建议在Compressor.precompile
放置一个断点吗? 首先content
是否正确传入?
那么在hunks()
中从预编译器返回的value
是否正确?
我现在正在研究这个。 问题与#764相同。 CssAbsoluteFilter 使用r'url\(([^\)]+)\)'
来匹配 URL,因此在第一个右括号处停止。 由于正则表达式无法处理任意数量的嵌套括号,因此我看到了三个选项:
我不想花太多时间在这上面,我正在研究选项 1,如果有人想创建一个更强大的解决方案,我很乐意对此进行审查。
建议修复 #828。 它实际上根本不处理嵌套括号,它只需要关闭引号,如果有左引号(因此url("data:...stroke='rgba(0, 0, 0, 0.5)
不会匹配),并且为了安全起见,数据 uris 被完全忽略。
@wjdp你可以试试 #828 吗? 它应该可以满足您的需求,但是您的测试运行将是一个很好的确认。
应该做
@carltongibson可以确认 PR 已经为我解决了这个问题。 感谢@karyon的快速工作! :微笑:
太棒了👏🏽 感谢您的跟进。