2013-01-11 31 views
2

使用包閃耀的HTML,我想創造一些HTML,看起來像這樣採用閃耀的HTML,如何創建領先的不間斷空格在HTML

<p>&nbsp;&nbsp;Some indented text 

我無法弄清楚如何創造不間斷的空間。什麼是最好的方式來做到這一點?

+0

顯而易見的解決方案如何不起作用? –

+0

你爲什麼要求最好的方式去做錯誤的事情?更好的問題是如何將第一行縮進(CSS屬性'text-indent)添加到文本塊中。 –

+0

@Mechanicalsnail我嘗試了幾個「明顯的」(至少對我來說)解決方案,其中沒有一個能夠工作。它們幾乎全部以瀏覽器中顯示的「 」結束。 – Tad

回答

2

當然,其中一種方法是將包含該字符的Haskell編碼版本的字符串賦予toHtml。另一種方法是使用preEscapedToMarkup

preEscapedToMarkup "&nbsp;" 
+0

據我所知,preEscapedToMarkup是blaze-markup的一部分,而不是blaze-html。其實,我不知道blase-markup和blaze-html之間有什麼區別,以及它們是如何相互關聯的。 – Tad

+0

我也嘗試過「給出一個包含該字符的Haskell編碼版本的字符串」,它工作正常,但不符合我的預期。我將在這個問題的答案中顯示該代碼。 – Tad

+0

@Tad:blaze-markup提供了一般的combinators,blaze-html各種標準的實際標籤和屬性(html4,html5 ..) – ron

0

繼ertes的建議,我想「得到含字符的哈斯克爾編碼版本的字符串」。這段代碼很冗長,所以我可以更好地理解這些類型如何組合在一起。

{-# LANGUAGE OverloadedStrings #-} 

-- * base 
import Data.Monoid ((<>)) 
import Data.Char (chr) 

-- * text 
import qualified Data.Text.Lazy as L (Text) 
import Data.Text (Text, singleton) 
import Data.Text.Lazy.Read (hexadecimal) 

-- * blaze-html 
import Text.Blaze.Html5 
import qualified Text.Blaze.Html5 as H 
import Text.Blaze.Renderer.String 


nbspHex = "00A0"    :: L.Text -- Unicode codepoint for nbsp 
Right (nbspInt, _) = hexadecimal nbspHex 
nbspChar = chr nbspInt   :: Char 
nbspTxt = singleton nbspChar :: Text 
nbspHtml = toHtml nbspTxt  :: Html 

someHtml :: Html 
someHtml = docTypeHtml $ 
    body $ do 
    p "some text" 
    p (nbspHtml <> nbspHtml <> "some indented text") 

main :: IO() 
main = do 
    let s = renderHtml $ someHtml 
    putStrLn s 

此代碼顯示在我所希望的瀏覽器中的「一些縮進的文本」,但查看HTML,我沒有看到任何「@nbsp;」如我此前的預期。所以這不是我正在尋找的答案。

感謝Jukka指出了一個更好的解決方案。