2016-10-04 6 views
4

<amp-sidebar>は体の直接の子供でなければならないのはなぜですか?アンプサイドバー:絶対に体の子でなければならないのですか?どうして?

私は、コード構造の点で、<div>の中に<amp-sidebar>を含めるほうがはるかに簡単な状況にあります。私はそれがちょうど<amp-sidebar>のように振る舞いたいと思うが、私は単に<body>の直接の子として要素を配置する簡単な方法がない。

このamp-by-example pageがAMPバリデーターに合格していないことがわかったとき、私は特に混乱しました。

誰か私を照らしてくれませんか?私はgithubで問題を開くことを考えましたが、バグがあるかどうかはわかりません。

答えて

2

AMPプロジェクトのリード開発者によると、<amp-sidebar>の子が<body>の要件は、position:fixedのSafariのバグが原因です。 tweetにリンクしてください。

+1

を私が追跡し、最終的にこの問題を解決するために、実施例ではAMPに対してGithubの問題を提起しました:https://github.com/ampproject/amp-by-example/issues/406 – ade

0

サーバー側のレンダリングで作業している場合は、レンダリングされたHTML文字列を解析し、サイドバータグを本文の直接の子として配置してください。私はまだ規模でこれを試していない:

function fixAmpSidebars(strHtml) { 
    let sidebarBegin = 0, sidebarEnd = 0 
    const sidebars = [] 
    do { 
     sidebarBegin = strHtml.indexOf('<amp-sidebar', sidebarBegin) 
     if (sidebarBegin !== -1) { 
      sidebarEnd = strHtml.indexOf('</amp-sidebar>', sidebarBegin) + 14 
      sidebars.push(strHtml.slice(sidebarBegin, sidebarEnd)) 
      strHtml = strHtml.slice(0, sidebarBegin) + strHtml.slice(sidebarEnd) 
     } 
    } while (sidebarBegin !== -1) 
    if (sidebars.length) { 
     strHtml = strHtml + sidebars.join('') 
    } 

    return strHtml 
} 
関連する問題