任逍遥

 找回密码
 立即注册
查看: 30307|回复: 99

解决代码着色组件SyntaxHighlighter长代码不换行以及行号显示错位的问题

    [复制链接]
  • TA的每日心情
    慵懒
    2023-11-19 19:41
  • 签到天数: 486 天

    连续签到: 1 天

    [LV.9]妙领天机

    480

    主题

    3371

    帖子

    4451

    积分

    如雷贯耳

    Rank: 8Rank: 8

    积分
    4451
    发表于 2018-7-22 00:09:49 | 显示全部楼层 |阅读模式

      最近博客项目已基本完工了,在优化前端的时候,突然想起发表的很多文章都包含代码这部分,于是想起了用SyntaxHighlighter来对文章中贴的代码进行美化,但用过SyntaxHighlighter 语法高亮插件的朋友可能都遇到过代码显示不换行的问题,这个问题在网上也找不到什么解决办法,折腾了一天,总算是把它解决了,办法其实简单,下面说下如何解决。
      打开shCore.css和shCoreDefault.css文件,找到对.syntaxhighlighter textarea的定义,在最后加上一句:word-break:break-all !important;意思是让代码强制换行显示。
      white-space: pre-wrap !important;
      word-break: break-all !important;
      刷新页面看看,恩,好像是有点效果,可以换行了,但是,首行错位了:

      好,看来问题快解决了,赶紧用浏览器inspect一下,发现首行位置有个container的before伪类把它撑开了:

      那这就好办了,赶紧在shCore.css里面写了一个类样式:
      .syntaxhighlighter .code .container:before { /*一定要写这样写全,因为bootstrap用到了container*/
      content: "" !important;
      }
      再刷新下页面,首行偏移的问题解决了,新的问题又来了,行号竟然没对齐:

      然后就又寻思了一番,最后用js解决了问题,用js慢慢调,解决了,打开shCore.js,在最后添加以下代码:
      ;$(function () {
      var shLineWrap = function () {
      $('.syntaxhighlighter').each(function () {
      var $sh = $(this),
      $gutter = $sh.find('td.gutter'),
      $code = $sh.find('td.code');
      $gutter.children('.line').each(function (i) {
      var $gutterLine = $(this),$codeLine = $code.find('.line:nth-child(' + (i + 1) + ')');
      var height = $codeLine.height() || 0;
      if (!height) {
      height = 'auto';
      }
      else {
      height = height += 'px';
      }
      $gutterLine.attr('style', 'height:' + height + '!important');
      console.debug($gutterLine.height(), height, $gutterLine.text(), $codeLine);
      });
      });
      };
      var shLineWrapWhenReady = function () {
      if ($('.syntaxhighlighter').length === 0) {
      setTimeout(shLineWrapWhenReady, 10);
      }
      else {
      shLineWrap();
      }
      };
      shLineWrapWhenReady();
      });
      再刷新下浏览器,恩,现在终于全对了:

      css完整代码如下:
      .syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter, .syntaxhighlighter td, .syntaxhighlighter tr, .syntaxhighlighter tbody, .syntaxhighlighter thead, .syntaxhighlighter caption, .syntaxhighlighter textarea {
      -moz-border-radius: 0 0 0 0 !important;
      -webkit-border-radius: 0 0 0 0 !important;
      background: none !important;
      border: 0 !important;
      bottom: auto !important;
      float: none !important;
      left: auto !important;
      line-height: 1.1em !important;
      margin: 0 !important;
      outline: 0 !important;
      overflow: visible !important;
      padding: 0 !important;
      position: static !important;
      right: auto !important;
      text-align: left !important;
      top: auto !important;
      vertical-align: baseline !important;
      width: auto !important;
      box-sizing: content-box !important;
      font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
      font-weight: normal !important;
      font-style: normal !important;
      min-height: auto !important;
      font-size: 13px !important;
      white-space: pre-wrap !important;
      word-break: break-all !important;
      }
      .syntaxhighlighter .code .container:before {
      content: "" !important;
      }
      好了,到这里可能有些小伙伴们觉得不想自己动手,那我这里也提供了最终修改版的源文件,方便直接使用,css文件已修改成bootstrap样式的了,如文章本身的代码样式所示。
    游客,如果您要查看本帖隐藏内容请回复



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    楼主热帖
  • TA的每日心情

    2019-8-30 18:57
  • 签到天数: 476 天

    连续签到: 1 天

    [LV.9]妙领天机

    5

    主题

    3009

    帖子

    3011

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    3011
    发表于 2018-7-22 01:22:14 | 显示全部楼层
    回个帖子,下班咯~
    回复

    使用道具 举报

  • TA的每日心情

    2021-10-14 09:09
  • 签到天数: 482 天

    连续签到: 1 天

    [LV.9]妙领天机

    442

    主题

    3924

    帖子

    5465

    积分

    如雷贯耳

    Rank: 8Rank: 8

    积分
    5465
    发表于 2018-7-23 08:28:35 | 显示全部楼层
    支持楼主,用户楼主,楼主英明呀!!!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2019-8-30 03:39
  • 签到天数: 465 天

    连续签到: 2 天

    [LV.9]妙领天机

    1

    主题

    2896

    帖子

    2893

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2893
    发表于 2018-7-23 19:51:48 | 显示全部楼层
    楼下的接上。。。。
    回复

    使用道具 举报

  • TA的每日心情

    2019-8-30 09:29
  • 签到天数: 464 天

    连续签到: 7 天

    [LV.9]妙领天机

    12

    主题

    2890

    帖子

    2899

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2899
    发表于 2018-7-24 09:56:03 | 显示全部楼层
    我也是坐沙发的
    回复

    使用道具 举报

  • TA的每日心情

    2019-8-30 09:41
  • 签到天数: 476 天

    连续签到: 1 天

    [LV.9]妙领天机

    0

    主题

    2917

    帖子

    2912

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2912
    发表于 2018-7-26 22:45:48 | 显示全部楼层
    支持,楼下的跟上哈~
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-30 15:47
  • 签到天数: 460 天

    连续签到: 6 天

    [LV.9]妙领天机

    1

    主题

    2953

    帖子

    2953

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2953
    发表于 2018-7-27 19:25:05 | 显示全部楼层
    看起来好像不错的样子
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-8-29 12:48
  • 签到天数: 462 天

    连续签到: 6 天

    [LV.9]妙领天机

    9

    主题

    2997

    帖子

    3005

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    3005
    发表于 2018-7-28 02:37:27 | 显示全部楼层
    顶起顶起顶起
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-8-30 17:30
  • 签到天数: 469 天

    连续签到: 9 天

    [LV.9]妙领天机

    3

    主题

    2862

    帖子

    2864

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2864
    发表于 2018-7-29 23:17:17 | 显示全部楼层
    我是个凑数的。。。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2019-8-30 02:20
  • 签到天数: 468 天

    连续签到: 1 天

    [LV.9]妙领天机

    1

    主题

    2918

    帖子

    2920

    积分

    声名显赫

    Rank: 7Rank: 7Rank: 7

    积分
    2920
    发表于 2018-7-30 05:35:12 | 显示全部楼层
    好,很好,非常好!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|任逍遥

    GMT+8, 2024-5-3 11:56 , Processed in 0.078324 second(s), 47 queries .

    Powered by 任逍遥 X3.4

    Copyright © 2001-2023, Rxiaoyao Cloud.

    快速回复 返回顶部 返回列表