xml宣言をする事による、jsでの不具合
結果だけ見ると、なんて事ないのですが、ハマったのでメモ。
例えば、こんなソースです。
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
//略
<style type="text/css">
li {
float: left;
padding-bottom: 10px;
}
</style>
</head>
<body>
<ul>
<li>テキスト<br />テキスト</li>
<li>テキスト</li>
<li>テキスト</li>
</ul>
</body>
</html>
このソースで、リスト要素の高さを揃えたいので、jQueryでこういう記述をしてみます。
$(function(){
var larger = 0;
$('li').each(function(){
if ($(this).height() > larger) {
larger = $(this).height();
}
});
$('li').height(larger);
});
こうすると、FireFoxでは動きます。xml宣言したie6で動きません。
なぜかというと、ie6で算出したheightの値はcssのpaddingの設定を含んじゃってるんですね。
揃えようとして一番大きいheightを持ってきてるハズなのですが、肝心なそのheightがpaddingの分少なく算出されちゃってます。
リストのheightは10px少ない高さで実装されるのですが、ie6の場合、内包しているものの高さがheightを超えると自動的にheightを拡張してしまいます。
その結果、一番高い要素だけ、padding分高くなってしまいます。
結局こう実装しました。
$(function(){
var larger = 0;
var ua = navigator.userAgent;
$('li').each(function(){
if ($(this).height() > larger) {
larger = $(this).height();
}
});
if (ua.indexOf("IE 6") != -1) {
$('li').height(larger + 10); //ie6だけpadding分高くしてやる
} else {
$('li').height(larger);
}
});