Highlight.js с Blogger: невозможно отключить автоматический перенос строки

Я пытаюсь интегрировать Highlight.js с Blogger. Пока подсветка синтаксиса отлично работает, но я не могу найти способ предотвратить автоматическое обтекание строк кода внутри элементов <pre><code>. Вместо этого мне нужно, чтобы браузер отображал горизонтальную полосу прокрутки.

Я добавил следующее в шаблон блога в конце <head>, как описано на сайте:

<link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/styles/solarized_dark.min.css' rel='stylesheet'/>
<script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js'/>
<script type='text/javascript'>
    hljs.initHighlightingOnLoad();
</script>

И все мои экземпляры использования:

<pre><code class='cpp'>
   // code here; 'class' changed according to language.
</code></pre>

Я попытался отредактировать файл Highlight.js CSS безрезультатно. Я также попытался установить свойства pre и code styles overflow-x на scroll без каких-либо изменений. Я предполагаю, что Blogger перезаписывает это свойство во всем мире.

Кто-нибудь знает способ преодоления этого и избегать строк кода от обертывания/разбиения в конце области кода, показывая горизонтальную полосу прокрутки?

Ответ 1

После открытия этой проблемы на странице GitHub автор подтвердил, что перенос строк не был выполнен его скриптами.

После этого я немного пошатнулся в CSS и смог исправить проблему, переопределив стиль .hljs для highlight.js. Это был единственный способ предотвратить перенос текста и разрешить прокрутку. Это, вероятно, не лучшее или только исправление, но что касается моих знаний о CSS. Ниже приведен код, который я добавил в шаблон Blogger.

<link href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/styles/solarized_dark.min.css' rel='stylesheet'/>
<style type='text/css'>
pre, code {
    white-space: pre;
    overflow-x: scroll;
}
.hljs {
    display: inline-block;
    overflow-x: scroll;
    padding: 0.5em;
    padding-right: 100%;
    background: #002b36;
    color: #839496;
    -webkit-text-size-adjust: none;
}
</style>

<script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js'></script>
<script type='text/javascript'>
    hljs.initHighlightingOnLoad();
</script>

Я изменил display на inline-block и добавил overflow-x: scroll и padding-right: 100%. По-видимому, прокладка препятствует сокращению области кода до размера самой длинной строки текста.

Ответ 2

Это сработало для меня

.hljs {
    white-space: pre;
    overflow-x: auto;
}

Ответ 3

Одна вещь, которую я сделал, решила проблему, заключалась в том, чтобы установить ширину элемента hljs очень большой. Это не оптимальное решение, но оно работает.

.hljs { width: 2300px; }

Ответ 4

Настройте стиль .hljs из github.css и поместите его после github.css на своих страницах.

.hljs {
  display: inline-block;
  white-space: pre;
  overflow-x: auto;
  padding: 0.5em;
  color: #333;
  background: #f8f8f8;
}