代码片段:代码块限制最大高度

本贴最后更新于 195 天前,其中的信息可能已经物是人非

代码块限制最大高度_复制按钮不跟随滚动

代码片段 1

功能介绍

  • 当代码块超过指定高度(这里设置为 800px),出现滚动条进行滚动
  • 代码语言、代码块复制按钮和代码块菜单不跟随代码块滚动条滚动

缺点:不支持显示行号滚动

CSS 代码


/* ---------------------------代码块限制最大高度------------------------------*/
/* 限制代码块高度,设置超过高度,出现滚动条 */
.protyle-wysiwyg .code-block {
    overflow: hidden;
}

.protyle-wysiwyg .code-block .hljs {
    max-height: 800px;
    overflow: auto;
    padding-top: 32px !important;
    padding-bottom: 20px !important;

}

/* 调整代码块命名、别名等块属性位置 */
.protyle-wysiwyg .protyle-linenumber__rows {
    max-height: 852px;
    overflow: clip;
    height: 100%;
}

.protyle-wysiwyg .code-block .protyle-attr {
    top: -2px;
}


/* 代码块复制和菜单按钮 */
.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw {
    top: 17px;
}

/* 代码块复制按钮和菜单按钮的提示文字放在下方 */
.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::after {
    top: 100%;
    bottom: inherit;
    margin-top: 5px;
}

.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::before {
    top: 100%;
    bottom: inherit;
    rotate: 180deg;
    margin-top: -4px;
}

/* 导出pdf取消限制最大高度 */
#preview .protyle-wysiwyg .code-block .hljs {
    max-height: none;
}

/* ---------------------------代码块限制最大高度------------------------------*/

代码片段 2

支持行号滚动

缺点

  • 横向滚动条只会在末尾出现
  • 代码语言、代码块复制按钮和代码块菜单跟随代码块滚动条滚动

/* ---------------------------代码块限制最大高度------------------------------*/
/* 限制代码块高度,设置超过高度,出现滚动条 */
.protyle-wysiwyg .code-block {
    max-height: 800px;
    overflow: auto;

}

/* 防止因代码行号和代码渲染内容导致出现多重滚动条 */
.protyle-wysiwyg .hljs,
.protyle-linenumber__rows {
    height: max-content;
}

/* 调整代码块命名、别名等块属性位置 */
.protyle-wysiwyg .code-block .protyle-attr {
    top: -2px;
}

/* 代码块功能按钮:包括代码语言、复制和菜单按钮 */
.protyle-wysiwyg .code-block .protyle-action {
    /* 为了代码块复制按钮可以sticky,需要设置高度 */
    height: 100%;
    /* 取消top高度,否则会出现代码块会被撑开出现滚动条 */
    top: 0px !important;
    /* 需要禁止鼠标点击,否则浮在上面代码块上无法点击 */
    pointer-events: none !important;
}

/* 代码块语言 */
.protyle-wysiwyg .code-block .protyle-action .protyle-action__language {
    margin-top: 6px;
    position: absolute;
    top: 6px;
    position: sticky;
    /* 由于父元素禁止点击,所以要子元素允许点击 */
    pointer-events: all !important;
    align-self: flex-start;
}

/* 代码块复制和菜单按钮 */
.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw {
    /* 调整位置 */
    top: 17px;
    /* 代码块复制按钮sticky,不跟随滚动 */
    position: sticky;
    /* 由于父元素禁止点击,所以要子元素允许点击 */
    pointer-events: all !important;
}

/* 代码块复制按钮和菜单按钮的提示文字放在下方 */
.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::after {
    top: 100%;
    bottom: inherit;
    margin-top: 5px;
}

.protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::before {
    top: 100%;
    bottom: inherit;
    rotate: 180deg;
    margin-top: -4px;
}

/* 导出pdf取消限制最大高度 */
#preview .protyle-wysiwyg .code-block {
    max-height: none;
}
/* ---------------------------代码块限制最大高度------------------------------*/

如何使用

如何使用代码片段 (yuque.com)

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22337 引用 • 89380 回帖
5 操作
Achuan-2 在 2024-05-10 16:37:19 更新了该帖
Achuan-2 在 2024-05-10 16:25:41 更新了该帖
Achuan-2 在 2024-05-10 14:33:46 更新了该帖
Achuan-2 在 2024-05-10 14:07:39 更新了该帖 Achuan-2 在 2024-05-10 12:37:45 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 这个三角形反了,能改吗?

    image.png

    1 回复
  • Achuan-2 1

    可以改

    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::before {
        top: 100%;
        bottom: inherit;
        rotate: 180deg;
        margin-top: -4px;
    }
    
  • 我这里的行号会对不齐:

    image.png

    1 回复
  • Achuan-2 1 1 评论

    我这边没有问题,尝试 f5 刷新下

    找到问题了,插件导致的 Issue #1 · frostime/sy-line-height
    JeffreyChen
  • 佬,使用这个代码片段后,向下滚动超过一段距离,代码语言、复制按钮和菜单还是会收缩消失,这个可以修改避免嘛?

    recording.gif

    另外,能否做到一直显示底部的横向滚动条呢?目前除非代码块滚动到最低端,否则底部的横向滚动条会随着纵向滚动而消失

    2 回复
  • 代码语言是会跟随滚动条滚动的

    该回帖因已过时而被折叠
    1 操作
    JeffreyChen 在 2024-05-10 15:56:42 折叠了该回帖
  • Achuan-2

    使用这个代码片段后,向下滚动超过一段距离,代码语言、复制按钮和菜单还是会收缩消失,这个可以修改避免嘛?

    我暂时没法直接解决

    如果不在乎行号滚动可以用下面这个代码(个人不喜欢开行号),除非思源改 dom 结构,把行号和代码用一个父节点包裹在一起

    
    /* ---------------------------代码块限制最大高度------------------------------*/
    /* 限制代码块高度,设置超过高度,出现滚动条 */
    .protyle-wysiwyg .code-block {
        overflow: hidden;
    }
    
    .protyle-wysiwyg .code-block .hljs {
        max-height: 800px;
        overflow: auto;
        padding-top: 32px !important;
        padding-bottom: 20px !important;
    
    }
    
    /* 防止因代码行号和代码渲染内容导致出现多重滚动条 */
    /* .protyle-wysiwyg .hljs,
    .protyle-linenumber__rows {
        height: max-content;
    } */
    
    /* 调整代码块命名、别名等块属性位置 */
    .protyle-wysiwyg .protyle-linenumber__rows {
        max-height: 852px;
        overflow: clip;
        height: 100%;
    }
    
    .protyle-wysiwyg .code-block .protyle-attr {
        top: -2px;
    }
    
    
    /* 代码块复制和菜单按钮 */
    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw {
        top: 17px;
    }
    
    /* 代码块复制按钮和菜单按钮的提示文字放在下方 */
    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::after {
        top: 100%;
        bottom: inherit;
        margin-top: 5px;
    }
    
    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::before {
        top: 100%;
        bottom: inherit;
        rotate: 180deg;
        margin-top: -4px;
    }
    
    /* 导出pdf取消限制最大高度 */
    #preview .protyle-wysiwyg .code-block .hljs {
        max-height: none;
    }
    
    /* ---------------------------代码块限制最大高度------------------------------*/
    
    2 回复
  • 明白了,还是得思源改下代码块结构才行

  • 佬,我也想对嵌入块限制最大高度,不过遇到了按钮提示文字显示在按钮上方,而被遮挡住的问题。

    怎么修改下面这段代码片段,使得嵌入块按钮的提示文字也位于按钮下方呢

    /* 代码块复制按钮和菜单按钮的提示文字放在下方 */
    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::after {
        top: 100%;
        bottom: inherit;
        margin-top: 5px;
    }
    
    .protyle-wysiwyg .code-block .protyle-action .b3-tooltips__nw::before {
        top: 100%;
        bottom: inherit;
        rotate: 180deg;
        margin-top: -4px;
    }
    
  • hihaojie

    大佬,原来的代码片段和新版思源(3.1.4)出现了不兼容,可否更新下 😭 。新版的代码块,启用代码片段后,上下出现一大块空白,好难受 😭

    1 回复
  • DOM 改了之后代码块用这个应该就行了:

    div:not(#preview) > .protyle-wysiwyg .code-block .hljs {
        max-height: 800px;
    }
    
请输入回帖内容 ...
Achuan-2
给时间以生命而不是给生命以时间,如果你喜欢我的分享,欢迎给我买杯咖啡 https://www.yuque.com/achuan-2 上海