是否可以从单独的文件中为Jupyter笔记本添加.css样式?

时间:2017-06-19 11:08:26

标签: css jupyter-notebook

我需要在Jupyter Notebook中渲染一些html表,为此我已经定义了自己的css样式。我希望它可以在任何PC上重复使用。

现在我需要在一个Jupyter单元格中运行这样的代码:

%%html
<style>
.output_wrapper, .output {
    height:auto !important;
    max-height: none;
}
.output_scroll {
    box-shadow:none !important;
    webkit-box-shadow:none !important;
}

.package_header {
    width: 100%;
    background-color: #0e2b59;
    color: #ffffff;
    font-size: 14px;
    text-align: center;
    padding-top: 8px;
    padding-right: 8px;
    padding-bottom: 8px;
    padding-left: 8px;
}

.placeholder {
    width: 100%;
    background-color: #ffffff;
    height: 6px;
}

.passed_test_table {
  display: table;         
  width: 100%;         

  background-color: #ebffd3;                
  border-spacing: 5px;
}

# (...) rest of css classes omitted 
</style>

但是我不希望将此style存储在Jupyter Notebook中,而是存储在my_default_style.css等其他文件中,并以某种方式加载它,因此在Notebook中不会占用太多空间,使其不太可读。

是否可以从某些本地文件加载.css样式而不是直接在Jupyter Notebook单元格中运行它?

3 个答案:

答案 0 :(得分:8)

如果您对所有笔记本的样式都适用,那么您可以将您的CSS存储在.jupyter/custom/custom.css中,这将自动加载并覆盖任何默认样式。

另一种方法是做这样的事情:

from IPython.core.display import HTML
import urllib2
HTML(urllib2.urlopen('[url to your css file here').read())

(来自http://moderndata.plot.ly/custom-styling-for-ipython-notebooks-with-3-lines-of-code/

将css文件存储在某处(例如在Github上)并下载并在运行笔记本时应用它。

如果您希望它完全是外部的,请使用custom.css,但这适用于每个笔记本。如果你需要它只适用于一个笔记本,那么你必须在笔记本中指定它,但是有更简洁的方法(如上所述)。

答案 1 :(得分:2)

如果你在Python 3中使用Jupyter,那么就没有urllib2(它被合并到urllib中),上面的答案会给你错误ModuleNotFoundError: No module named 'urllib2'。你可能想要这样的东西:

from IPython.display import HTML
from urllib.request import urlopen
html = urlopen("[url to your css file here]")
HTML(html.read().decode('utf-8'))

请注意,read()返回字节编码,如果需要文本,则必须解码。

答案 2 :(得分:1)

这个答案可能最好是对Davies和Narasimhan早期答案的评论,但我缺乏发表评论的声誉。

from IPython.core.display import HTML将起作用,并且是在早期版本的IPython中访问HTML显示功能的推荐方法。但在最近的版本中, public 显示API位于IPython.display中(请参阅其文档字符串)。此模块公开了__all__的{​​{1}}以及IPython.core.display的{​​{1}}。值得注意的是,目前的IPython文档(The IPython API)并未单独公开记录__all__。有关当前的IPython.lib.display文档,请参阅:Module: display — IPython documentation

所以推荐的IPython 5解决方案我认为是:

IPython.core.display