09 Jan 2017 16:55 +0000

Prism 是被广泛使用的代码高亮插件, 在 Bootstrap 4 之前的版本中, Bootstrap 和 Prism 可以和谐共处, 但升级至 Bootstrap 4 后, 它们之间会产生一点小小的样式冲突, 一些 token 会变得非常小, 因为 Bootstrap 加入了新的 class: .tag, 这是已经被 Prism 占用的 class, 造成了 Prism token 的字体变小 (75%), 还引起其他的一些样式变化.

解决的方法非常直观, 因为 Prism 的 .tag 都包含在 precode 标签当中, 因此可以给 Prism 的 .tag 指定特定的样式, 既不影响 Bootstrap 框架样式, 也使 Prism 可以正常显示.

Bootstrap 给 .tag 指定的样式如下:

.tag {
    display: inline-block;
    padding: 0.25em 0.4em;
    font-size: 75%;
    font-weight: bold;
    line-height: 1;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    border-radius: 0.25rem;
}

由 Chrome 查询 Prism 正常显示的 token 对应样式应该如下:

.tag {
    display: inline;
    padding: 0;
    font-size: inherit;
    font-weight: normal;
    line-height: 1.5;
    color: #fff; /* Higher priority than Bootstrap*/
    text-align: left; /*Higher priority than Bootstrap*/
    white-space: pre;
    vertical-align: baseline; /*Same as Bootstrap*/
    border-radius: 0;
}

可以看到有部分属性与 Bootstrap 样式相同, 另有部分属性是会覆盖 Bootstrap 的属性值的(已经在上面注释中注明), 要完全覆盖 Bootstrap 的样式, 要添加的 CSS 如下:

pre code .tag {
    display: inline;
    padding: 0;
    font-size: inherit;
    font-weight: normal;
    line-height: 1.5;
    white-space: pre;
    border-radius: 0;
}

虽然以上 CSS 中, 有一部分去掉也不影响显示效果, 但出于保险起见, 还是应该都指定. 把以上 CSS 放进自定义的 CSS 文件中, 并后于 bootstrap.css 引入, 即可覆盖 Bootstrap 样式了.

这位德国老兄也遇到了一样的问题, 并采用了类似的解决方案, 可以提供参考 CSS conflict between Bootstrap 4 and Prism - Gordon Lesti


Loading comments...