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

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

    [复制链接]
  • TA的每日心情

    2024-8-31 02:02
  • 签到天数: 487 天

    连续签到: 1 天

    [LV.9]妙领天机

    481

    主题

    3030

    回帖

    4593

    积分

    如雷贯耳

    积分
    4593
    发表于 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;
      刷新页面看看,恩,好像是有点效果,可以换行了,但是,首行错位了:
    87c01ec7gy1fspzj9tid7j20ut04q74v.jpg

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

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

      然后就又寻思了一番,最后用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();
      });
      再刷新下浏览器,恩,现在终于全对了:
    87c01ec7gy1fspzjcifzwj20v304jmxs.jpg

      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样式的了,如文章本身的代码样式所示。
    游客,如果您要查看本帖隐藏内容请回复



    楼主热帖
    [!luckypost!]: Bigmerboy 捡了钱没交公 银元宝 降了 2 . !lucky_goodrank! / !lucky_badrank!
  • TA的每日心情

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

    连续签到: 1 天

    [LV.9]妙领天机

    5

    主题

    3163

    回帖

    3170

    积分

    声名显赫

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

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.9]妙领天机

    442

    主题

    3633

    回帖

    5616

    积分

    如雷贯耳

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

    使用道具 举报

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

    连续签到: 2 天

    [LV.9]妙领天机

    1

    主题

    3021

    回帖

    3019

    积分

    声名显赫

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

    使用道具 举报

  • TA的每日心情

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

    连续签到: 7 天

    [LV.9]妙领天机

    12

    主题

    3029

    回帖

    3050

    积分

    声名显赫

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

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.9]妙领天机

    0

    主题

    3074

    回帖

    3069

    积分

    声名显赫

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

    使用道具 举报

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

    连续签到: 6 天

    [LV.9]妙领天机

    1

    主题

    3110

    回帖

    3111

    积分

    声名显赫

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

    使用道具 举报

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

    连续签到: 6 天

    [LV.9]妙领天机

    9

    主题

    3106

    回帖

    3123

    积分

    声名显赫

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

    使用道具 举报

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

    连续签到: 9 天

    [LV.9]妙领天机

    3

    主题

    3013

    回帖

    3018

    积分

    声名显赫

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

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]妙领天机

    1

    主题

    3073

    回帖

    3076

    积分

    声名显赫

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-22 19:00 , Processed in 0.083753 second(s), 52 queries .

    Powered by 任逍遥 X3.5

    Copyright © 2001-2024, Rxiaoyao Cloud.

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