- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Hakyll 站点中,我有一个链接到页面的样式表:
<link rel="stylesheet" type="text/css" href="/css/my.css">
此 CSS 包含 @font-face
链接到字体文件的指令:
@font-face {
font-family: "Bla";
src: url("/data/bla.ttf") format("truetype");
}
问题是字体的 URL 没有被 relativizeUrls
相对化即使我将它移到 <script>
中页面本身内的标记。如何解决这个问题?
最佳答案
tl;dr – 您可以使用 Beerend Lauwers 的 hakyll-extra
包(似乎还没有在 hackage
上),它提供了一个 relativizeUrl
宏。或者,按如下方式实现您自己的:
如果您没有太多链接,并且不想仅仅为了执行此操作而引入 CSS 解析器,您可以只创建一个函数字段 - 实际上是一个宏 - 它允许您调用,例如relativize("/some/url")
从页面内。 (我遇到了类似的问题,因为我想将指向样式表的链接相对化,仅供旧版本的 Internet Explorer 使用;对于 TagSoup
,链接看起来好像在评论中,所以它没有处理它们.)
首先,我们需要写一个版本relativizeUrls
它仅对单个 URL 进行操作:
import Data.List as L
-- | Relativize URL. Same logic as "relativizeUrlsWith" in
-- Hakyll.Web.Html.RelativizeUrls, but for just one url.
relativizeUrl :: String -- ^ Path to the site root
-> String -- ^ link to relativize
-> String -- ^ Resulting link
relativizeUrl root = rel
where
isRel :: String -> Bool
isRel x = "/" `L.isPrefixOf` x && not ("//" `L.isPrefixOf` x)
rel x = if isRel x then root ++ x else x
然后,我们定义一个可以添加到上下文中的“功能字段”。
import Data.Maybe (maybe)
-- ugh. ugly name.
relativizeFuncField :: Context a
relativizeFuncField = functionField "relativize" relativize
where
relativize :: [String] -> Item a -> Compiler String
relativize args item = do
siteRoot <- getRoot <$> (getRoute $ itemIdentifier item)
arg <- case args of
[arg] -> return arg
_ -> error "relativize: expected only 1 arg"
return $ relativizeUrl siteRoot arg
getRoot :: Maybe String -> String
getRoot = maybe (error "relativize: couldn't get route") toSiteRoot
然后,任何您想使用此宏的地方,而不是使用,比方说,defaultContext
, 使用 relativizeFuncField <> defaultContext
.例如:
import Data.Monoid( (<>) )
main =
-- ...
match (fromList ["about.rst", "contact.markdown"]) $ do
route $ setExtension "html"
compile $ pandocCompiler
>>= loadAndApplyTemplate "templates/default.html" (relativizeFuncField <> defaultContext)
>>= relativizeUrls
所以,最后,这意味着在一个文件中,你可以写 $relativize("/path/to/file")$
在任何地方 TagSoup
还没有相对化链接。
希望有用:)
(这是使用 Hakyll 4.9.0.0,但我假设其他 4.X 版本大致相同。)
编辑:附:非常感谢 Beerend Lauwers,他在他的帖子 here 中解释了 Hakyll 函数字段
再次编辑:d'oh。我没看到 Beerend 实际上已经放了一个 relativizeUrl
在他的 hakyll-extra
中发挥作用包。
关于css - 如何相对化 Hakyll 中 css 文件中的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419222/
我正在关注 Hakyll 教程,就像在此 https://jaspervdj.be/hakyll/tutorials/01-installation.html 中一样. 但似乎有些不对劲,我说不清是什
我看到 create 函数需要一个标识符列表。 ghci λ> :t create create :: [Identifier] -> Rules () -> Rules () 我应该使用哪个标
我希望修改下面的代码,这样,它不会生成指向网站上最新三篇文章的链接,而是完全复制文章的正文,就像在传统博客中一样。我有点难以理解下面发生了什么,以及必要的改变是什么。 match "index.htm
我想根据元数据值过滤我网站上的一些帖子。我想创建一个名为 status 的特定元数据(例如 title 或 date),它可以采用多个值(草稿、已发布、存档): --- title: The titl
我正在尝试做类似 what's described in this tutorial 的事情,即,向我的 Hakyll 博客添加标签,但不是为每个标签生成一个页面,只需一个页面列出所有标签及其帖子。所
我使用 Hakyll 生成一些文档,我注意到它有一种奇怪的方式来关闭它生成的代码中的 HTML 标签。 有一个页面他们说你必须像他们那样生成标记,否则你的页面布局在某些情况下会被破坏,但我现在找不到了
我正在尝试 Hakyll对于学术和数学为主的静态网站。我想使用 pandoc-crossref用于对方程式的交叉引用。 将 pandoc-crossref 包含到编译器链中的最简单方法是什么? 到目前
我很抱歉问这样的问题。但我对 Haskell 真的很陌生。我在互联网上搜索了一整天,但没有找到任何示例。 我有一个用 python 编写的 pandoc 过滤器( tikzcd.py )。我想使用该过
使用 hakyll-init site_foo 生成的骨架网站,我想将 site_foo/index.html 转换为 markdown 并仍然保留其内容。 换句话说,有一个引用 posts-list
我使用 Hakyll对于我的 blog . 我目前正在写我的帖子 emacs org-mode然后将组织模式导出到 markdown .然后 Hakyll 将该 markdown 转换为 HTML。
我关注了 this tutorial使用 hakyll 创建一个基本的静态网页。它包括许多从 posts 中的 Markdown 呈现的页面。目录,例如2015-08-12-spqr.markdown
我有一个类别列表。每个类别本身都有一个子类别列表:[(Category,[SubCategory])]。我想在单个页面中获得以下 HTML 输出: Category 1 Subcategory
在我的 Hakyll 站点中,我有一个链接到页面的样式表: 此 CSS 包含 @font-face链接到字体文件的指令: @font-face { font-family: "Bla"; src
我正在使用 Hakyll 制作个人网站,我想列出我的出版物。 我找到了 this module和 this guide了解如何从底部的 Markdown 文档中打印引用。 这样做的问题是,它假设您有一
我是一名优秀的程序员,十分优秀!