〔追記〕この記事で扱っているEdgeは、旧タイプのEdgeです。 2020年にリリースされた新Edgeは、Chromeと同じレンダリングエンジンを内装し、表示は殆どの部分でChromeと変わりません。 この点に注意してください。

 

何が違うのかをつついてみる

いささかがっかりして手放しそうになったが、EdgeとChromeでどこが元で違うのかを、つついて見ることにしました。

 

先ずは、やはりHTMLをよーく見るしか。 EdgeにもIE譲りの Edge Developer Tools というのがあり、下はそれでブログタイトル部を調べています。 既に、CSS編集用スキンにはアレンジを加筆した状態です。

 

Chrome DevToolsで::after要素を表示

 

右のエレメント枠に、なかなか「::after」擬似要素が見つからなかったが、タイトル要素の一番下方にありました。 見つけにくいのは左のHTML枠に「::after」が表示されないからです。

 

下はChromeの Dev Tools の表示で、こちらはHTML枠に「::after」が表示されるので、その修飾内容はすぐ右枠に表示出来ます。 しかし、文字がイタリック体でプロパティ操作が出来ません。(inspectorで上書き変更は可能ですが)

 

Edge開発者ツールで::after擬似要素のCSSを確認

 

擬似要素の扱い方が違うのは、そもそも擬似要素が「特殊」な性質を持っているからだと思います。 擬似要素が両方とも「特殊」な雰囲気を発散しているのを眺めていて、なんとなくEdgeの「position: relative;」を外すと、回転中心がChromeと同じ「o」になりました。 ピンポン。

 

Edge開発者ツールで疑似要素を確認

 

「relative」指定を外したので、赤マークの配置が擬似要素の本来の位置に戻りましたが、回転中心は設計通りです。

 

IE/Edhe のバグなのか、擬似要素の特殊性なのか

要するに、Edgeの場合は、回転する要素に擬似要素を指定したのが原因と判りましたが、更に調べると、

 ● 指定した擬似要素の本来の位置に、回転中心が移動するらしい

 ●「position: relative;」の場合だけ回転中心が移動する(異常)

 ●「position: static;」「fixed;」「absolute;」などは移動しない(正常)

 

と判りました。 原因の本質までは判りませんが、アレンジ上での対処は簡単です。

「position: absolute;」で擬似要素(回転中心のマーク)の配置をすれば良く、見かけ上は同じ結果が得られます。

 

animation を指定すると自動的に positionの基準位置になる

早速「absolute」指定を試していると、勝手に親要素が基準位置になっている事に気付きました。 本来は基準位置は、一番近い上位(外側)の要素で、static以外の指定がされている要素になります。

 

上位で該当する要素は、ヘッダー部外枠の[data-uranus-layout="headerInner"]に「relative」の指定がありました。 赤マークの擬似要素に「absolute」を指定して、「top」「left」を「0」に指定すると、ヘッダー外枠の左上隅の基準位置に赤マークが移動するはずです。 ところが、実際は下図の様に「.skin-blogMainTitle」が基準位置になっている様子。

 

Edge Chrome DevTools:ブログタイトル要素と擬似要素

 

「.skin-blogMainTitle」には「relative」の指定はなく変だと思って「animation」のプロパティを外すと、赤マークはヘッダー外枠の左上隅に移動しました。

 

これは、何処かに書いてあるのかも知れませんが、意外な事です。 CSSアニメーションを指定した要素は、自動的に「position」の基準位置になるという事です。

 

ここでは「transform: rotate」ですが、それ以外のCSSアニメーションの場合でもそうなるのかも知れません。

 

 

以上をふまえた新しいコード

問題解消の方法が判り、前ページのコードを改めました。

 

ブログタイトルの「o」に回転中心を持って来る調節は、これまでの通りの方法で、「text-indent」「padding-bottom」の値で調節しています。 

新たに追加した回転中心マークの方は「position: absolute」「top」「left」を使って調節しています。 left値の「calc(50% - 1px)」は微調整です。

 

/* ブログタイトル ********************** */
.skin-blogMainTitle {
    font-weight: bold;
    font-size: 50px;
    text-indent: -10px;
    padding-bottom: 4px; }

/* ブログタイトルの回転中心マーク ********** */
.skin-blogMainTitle::after {
    content: "●";
    position: absolute;
    top: 14px;
    left: calc(50% - 1px);
    color: #cc0700;
    font-size: 36px;
    text-shadow: 0 0 3px black; }

/* ブログタイトルの回転アニメーション ******** */
.skin-blogMainTitle {
    animation: wiper 20s linear infinite; }

@keyframes wiper {
    0% { transform: rotate(0); }
    60% { transform: rotate(0); }
    65% { transform: rotate(-3deg); }
    95%  { transform: rotate(190deg); }
    100% { transform: rotate(0); } }

 

これで、Edge、IE11も思い通りの表示になりました。 教訓としては、擬似要素周囲は、ブラウザの扱いの違いに注意かな。