Simplicityの特徴 › フォーラム › Simplicity2に関する話題何でも › HTML5 Validation エラーについて
-
投稿者投稿
-
-
2016年10月4日 10:11 AM #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.)」
というエラーになってしまいます。 -
2016年10月4日 12:30 PM #45830
hidekichi
ゲスト新着も人気記事のウィジェットもulで出力されるとおもうんですが(※)、何かしら別の人気記事のwidgetですかね?
※ 新着widgetはサムネイルの所にdivは使われていますがscopeは未使用です。
※ おそらく、simplicityでは大抵の所にclassが入ってるのでstyleを利用しているのはhead内のカスタマイザの設定とjQueryが直接タグのcssを書き換える時だかと思います。 -
2016年10月4日 1:58 PM #45832
古沢伸介
ゲストhidekichiさん
お返事ありがとうございます!
私の手元で、色々試していますが、今のところいい方法が思いついていません。
ソースを見ていると
widget.phpのline 56に、
function get_popular_posts_ranking_style($slelctor)
と言う関数があります。
この関数が、popular-ranking.phpから呼び出されて、
style scopedを出しているのかなと思っています。
間違っていたら申し訳ありません。popular-ranking.phpからこの関数を呼び出さないようにすると、
ランキング表示が消えてしまったので、
どうしたものかと考えているところです。 -
2016年10月4日 3:55 PM #45846
わいひら
キーマスターこの関数が、popular-ranking.phpから呼び出されて、
style scopedを出しているのかなと思っています。
間違っていたら申し訳ありません。その認識で合っています。
ウィジェットの設定は、ウィジェットを呼び出したときにしか取得できないので、<head></head>
内では、ウィジェット設定情報を取得できなかったのでそのようになっていたかと思います。
HTML5エラーを改善するには、「ランキング順位の表示」をやめて、get_popular_posts_ranking_styleで出力されるスタイルを、子テーマに貼ってしまうと、とりあえず改善されると思います。ていうか、この文章を書いている間に、良い解決方法を思いついたので、後でできたら修正しておこうと思います。
-
2016年10月4日 4:54 PM #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; }
みたいな感じです。
-
2016年10月4日 7:54 PM #45858
わいひら
キーマスター思いついたアイディアを元に、試してみたらstyle scopedを利用せずに書くことができました。
次のバージョンで改善されると思います。 -
2016年10月4日 8:53 PM #45859
hidekichi
ゲストランキング使ってないと思って今見たら、うちのサイトでランキング表示してました(笑)
入れた覚えが無い上に、自分のサイトを全く見てなかったと言う(笑)
おかげで1週間ぶりに自分のサイト見ました。ちょっと思いついたことがあったので、質問とは関係ありませんがこれから裏でゴニョゴニョやってみたいと思います。 -
2016年10月5日 1:32 PM #45878
古沢伸介
ゲストわいひらさん、
早速の対応ありがとうございました。
HTML5 Validation エラーがなくなっていることを確認しました。 -
2016年10月5日 7:11 PM #45884
わいひら
キーマスターご確認ありがとうございます。
-
-
投稿者投稿
- トピック「HTML5 Validation エラーについて」には新しい返信をつけることはできません。