HTML5 Validation エラーについて

Simplicityの特徴 フォーラム Simplicity2に関する話題何でも HTML5 Validation エラーについて

8件の返信スレッドを表示中
  • 投稿者
    投稿
    • #45828
      古沢伸介
      ゲスト

      お世話になっております。

      widgetとして、人気記事を利用している場合、
      widgetのdiv要素内に、style scopedという要素が出力されますが、
      この要素がHTML5 Validationにかけると、
      「Element style not allowed as child of element div in this context. (Suppressing further errors from this subtree.)」
      というエラーになってしまいます。

    • #45830
      hidekichi
      ゲスト

      新着も人気記事のウィジェットもulで出力されるとおもうんですが(※)、何かしら別の人気記事のwidgetですかね?

      ※ 新着widgetはサムネイルの所にdivは使われていますがscopeは未使用です。
      ※ おそらく、simplicityでは大抵の所にclassが入ってるのでstyleを利用しているのはhead内のカスタマイザの設定とjQueryが直接タグのcssを書き換える時だかと思います。

    • #45832
      古沢伸介
      ゲスト

      hidekichiさん

      お返事ありがとうございます!

      私の手元で、色々試していますが、今のところいい方法が思いついていません。

      ソースを見ていると
      widget.phpのline 56に、
      function get_popular_posts_ranking_style($slelctor)
      と言う関数があります。
      この関数が、popular-ranking.phpから呼び出されて、
      style scopedを出しているのかなと思っています。
      間違っていたら申し訳ありません。

      popular-ranking.phpからこの関数を呼び出さないようにすると、
      ランキング表示が消えてしまったので、
      どうしたものかと考えているところです。

    • #45846
      アバター画像わいひら
      キーマスター

      この関数が、popular-ranking.phpから呼び出されて、
      style scopedを出しているのかなと思っています。
      間違っていたら申し訳ありません。

      その認識で合っています。
      ウィジェットの設定は、ウィジェットを呼び出したときにしか取得できないので、<head></head>内では、ウィジェット設定情報を取得できなかったのでそのようになっていたかと思います。
      HTML5エラーを改善するには、「ランキング順位の表示」をやめて、get_popular_posts_ranking_styleで出力されるスタイルを、子テーマに貼ってしまうと、とりあえず改善されると思います。

      ていうか、この文章を書いている間に、良い解決方法を思いついたので、後でできたら修正しておこうと思います。

    • #45854
      hidekichi
      ゲスト

      あぁカウンターの部分か。なるほど。確かにcssでランキングを入れる場合は、同じようなウィジェットが連続してあるとカウンタが続いてしまうのでスコープしてあるんですね。ランキングなんか表示したことがなかったので全く気が付きませんでした。

      ただまぁcssのランキングと言うのは、基本的には単純に連番を振っているだけなのでcssのカウント表示でするならscopeは便利ですが、「別にcssじゃなくても良いよ」と言うのと、「バリデーションを通したい」と言うことなら擬似要素ではなく、実際に数値を入れればよいだろうと思います。方法は簡単です。

      サンプル: widgetでカウンタを使用せず自力でカウンタを入れる | jsFiddle

      普通に書くとjQueryでもcssと同様、同じセレクタの同じ要素に対してカウントを入れることで連番になってしまいます。処理をする際に、自分の親に当たるulの数を数えておいて、それを超えたらカウントを1に戻すと言うようなことをすれば、同じ要素が複数あってもカウントを入れることができます。

      これらのメリットとしては擬似要素ではなく、要素として入るのと、例えばカウント値が1の場合は金色にしようとか、2なら銀か…みたいな条件判断で色々とできるわけです。サイズを変えることもできます。
      これら方法が必要であればレス貰えればサンプルを作ります。

      カウントを入れる部分は、そのセレクタを指定するだけです。サンプルでは、
      var popular = $("#sidebar").find(".widget_popular_ranking");
      このようになっています。これは、まずpopularと言う変数に、それが何かを書いてあります。つまり、#sidebarの中の.widget_popular_rankingをpopularとしておくと言うことです。

      で、popular.find("li").each(function(){ popularの中のliを探して、それをそれぞれに(each)処理すると言うことになっています。
      このpopularの部分を変数をあてないで、

      $("#sidebar").find(".widget_popular_ranking, .widget_new_entries").each(function(){...})

      としても動作するだろうと思います。

      $(this).prepend( は、上記セレクタがthisになります。これの先頭(prepend)にカッコ内の要素を入れると言うことになります。つまり、"<div class='count'>"+i+"</div>" このように、.countと言うクラスのdiv要素が先頭に入るわけです。

      これらは、css側でデフォルトの時と同じように表示するようにもできますし、変更することもできます。
      例えば、

      #sidebar .widget_popular_ranking .count {
        background-color: red;
      }

      みたいな感じです。

    • #45858
      アバター画像わいひら
      キーマスター

      思いついたアイディアを元に、試してみたらstyle scopedを利用せずに書くことができました。
      次のバージョンで改善されると思います。

    • #45859
      hidekichi
      ゲスト

      ランキング使ってないと思って今見たら、うちのサイトでランキング表示してました(笑)
      入れた覚えが無い上に、自分のサイトを全く見てなかったと言う(笑)
      おかげで1週間ぶりに自分のサイト見ました。ちょっと思いついたことがあったので、質問とは関係ありませんがこれから裏でゴニョゴニョやってみたいと思います。

    • #45878
      古沢伸介
      ゲスト

      わいひらさん、

      早速の対応ありがとうございました。
      HTML5 Validation エラーがなくなっていることを確認しました。

    • #45884
      アバター画像わいひら
      キーマスター

      ご確認ありがとうございます。

8件の返信スレッドを表示中
  • トピック「HTML5 Validation エラーについて」には新しい返信をつけることはできません。
スポンサーリンク
アドセンス(大)
アドセンス(大)