javascript

jQuery UIのdatepicker(カレンダー)のサイズ変更

.ui-datepicker のfont-sizeを変更すると
カレンダーのサイズを変更できる。

▼font-size:90%
崩れてる

▼font-size:150%
font-size変更後

サイト側のcssに影響されて表示が崩れたから、ガッツリ解析しなおさなきゃダメか、、、と途方にくれてたけど簡単に修正できてよかった。

httpsでレイアウトが崩れた

昔つくったサイトでレイアウトが崩れると連絡がありました。

話を聞くと、httpsで見るとレイアウトが崩れるとか。
そんな事あるのかな?と確認するとfloat部分がカラム落ちしてました。

httpだとこうなってる
2015-02-16_r1

httpsだとこうなる
2015-02-16_r2

現象としては、横並びさせてる3要素の最後のmarginをjsで0にしてたんだけど、それが効いてない感じ。
jqeury本体は▼のを使ってた


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

もしかして、httpだから?
で調べてみるとプロトコル表記は省略出来るとの事で、次のように変更。


<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

参考

全般的なスタイルルール プロトコル 埋め込みリソースからプロトコル表記(http:,https:)を省略する。

httpsだとjQuery/Ajaxは使えないのでしょうか?

子要素Bを持つA要素を指定するには

CSS3までのセレクタは、特定の子要素を持つ親要素を選択できないけど
jQueryの:hasフィルターで出来るよ

例えば、aタグを含むliを選択してみる

[html highlight=”9″]<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
jQuery(function($){
$("li:has(a)").addClass("target");
});
</script>
</head>
<body>
<ul>
<li>あいうえお</li>
<li>あいうえお</li>
<li><a href="#">あいうえお</a></li>
<li>あいうえお</li>
</ul>
</body>
</html>[/html]

aタグを含む<li>に.targetが付いてるのが確認できる
[image]:hasフィルター

[jQuery]$(this)の親要素や子要素を指定するには。

thisを使ってなかったからthisの子要素のアクセス方法が全くわからんかった。

当たり前だけどこんな風に出来無いわけですよね
[text]$("this ul").addClass("hogehoge");[/text]

childrenを使うといいみたい。
[js]$(this).children("ul")[/js]

親にはparent
[js]$(this).parent()[/js]

参考 / まよねこ inside » Blog Archive » 【jQuery】thisの親や子要素の指定方法[リライト版]

宿題
ひろし+すみれのliからから友蔵+こたけのliを指定するにはどうしたらいいんだろうか。
[html]<h1>さくら家</h1>
<ul>
<li><span class="name">友蔵+こたけ</span>
<ul>
<li><span class="name">ひろし+すみれ</span>
<ul>
<li class="name">さきこ</li>
<li class="name">まるこ</li>
</ul>
</li>
</ul>
</li>
</ul>[/html]

photoshopでfireworksのカンバスを合わせる、的な事をする.jsx

[image]カンバスをフィット

fireworksの「カンバスを合わせる」って便利ですよね
photoshopでも使いたい!と思い調べてみたところ
イメージ – トリミング
イメージ – すべての領域を表示を組み合わせて
同じような事が出来るみたいだったので
.jsxに出来ないかなぁと試してみました。

不具合や必要ない記述があるかと思いますが、自分が使う範囲では困らない感じになったのでとりあえず公開してみます。

続きを読む

スクロールバーを変更するjscrollpane.js

SAVEJAPAN! PROJECTのツイッターのスクロールバーのところが、
デザインにあってていいねぇなんて思いながら見ていたら
だんだん自分でも使ってみたくなったので調べてみるとjscrollpaneというのを使っているようでした。

これ2009年くらいに話題になったらしいんだけど、全く知りませんでした。。。

ここ / jScrollPane – cross browser styleable scrollbars with jQuery and CSS
iframeも、親htmlにjsを追加するだけで(operaでマウスホイールが反応しなかったけど)スクロールバーを追加できたり
子htmlに直接jsを追加する事でマウスホイールも反応するように出来るかんじ。

練習

乱雑モックアップ|jQueryでツイッターを取得してjscrollpaneを適用
[image]jQueryでツイッターを取得してjscrollpaneを適用のスクリーンショット

ツイッターをjQueryで読み込む方法の参考にしたページ

jQueryでTwitterの自分のつぶやきを表示する | webOpixel

iframeに開くページを、location.searchで受け取った値で変更させちゃっても問題ない?

iframeを持つ1つのhtmlを使い回して
中身だけを変更したいんだけど何かいい方法はないかね?と聞かれて
iframeの中身をバラバラに作るくらいならiframeやめなよと答えたけど
気になったので少し考えて
location.~が使えそうじゃない?と以下のソースを書いた

親(index.html
[html]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>乱雑モックアップ|親ページ</title>
<meta http-equiv="Content-Script-Type" content="text/javascript" />

</head>
<body>
<ul>
<li><a href="after.html?http://www.google.com">googleを開く</a></li>
<li><a href="after.html?http://www.yahoo.com">yahooを開く</a></li>
</ul>
</body>
</html>[/html]

子iframeがあるhtml(after.html
[html]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>乱雑モックアップ|子ページ</title>
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript">
window.onload=function(){
var innerUrl=location.search.substring(1);
document.getElementById("innerFrame").src=innerUrl;
}

</script>
</head>

<body>
<iframe id="innerFrame" src="" frameborder="0" width="640" height="480"></iframe>
</body>
</html>

[/html]

これで、親ページのリンクの?以下の名前
(after.html?http://yahoo.co.jpならhttp://yahoo.co.jp)のファイルを
子のiframeで開けるのだが
これ、大丈夫なんでしょうか?

?javascript:alert('alert');

でalertがでるけど、alertを任意に使えるって事は何か別の事がされるんだろうか?
パスワードなんかを扱わないページは気にしなくていいのだろうか。
という感じで使えるものかわからんので教えてない。

rollover2.jsとoperaと色々復習

凄く滑らかなロールオーバーを超お手軽に実装できるrollover2.jsというものがあるんですが
クロスフェードするロールオーバー処理をお手軽に実装するJavaScript – KAZUMiX memo
クロスフェードするロールオーバー処理 動作サンプル – XHTML サンプル | KAZUMiX memo

これ、imgにvertical-align:bottom;や
vertical-align:top;を指定してある場合、
operaでpositionの基準点がうまくいってないような感じの
とんでもない表示になってて(v10.50以前は確認してないけど)

例 / positionの基準点がうまくいってない感じの表示
[image]左がfirefox、右がopera

今気づいたけど
aタグの中にrollover2.jsのロールオーバー対象になるimgだけが入っていると
おかしくなる。

aタグの中にimgの他に、テキストが入っているとおかしくならない。

蛇足 / imgにvertical-align:bottomしたい(してる)理由

ご存知vertical-alignの初期値はbaselineなので
アルファベットのg,j,p,q,yの下に飛び出る部分(ディセンダって名称らしい*1)の余白が確保され、テキストと並べた時にimgの下に隙間ができちゃう

この隙間を埋めるには、vertical-align:text-bottomを指定するのが定石みたいなんだけど
operaだとテキストの位置がズレてたので(10.50以降?)、
いつしかbottomで指定するようになって
しばらくしてbottomを指定するようになった理由を失念してました。

[image]text-bottomとbottom
今確認してみたらbottomも表示が変だった><;;;なんだこれ。

とりあえず
vertical-align:text-bottomを指定しとけば
operaでクリック出来なくなるくらい表示が崩れる事はないのかな?

ここから先は失敗を含む試行錯誤メモ

続きを読む

ブラウザの表示倍率を無理やり100%に見せる(ただしIE限定、動作確認は8のみ)

サンプル / http://sakurachiro.com/_exercise/html_css/zoom1/index.html
(IEで表示倍率を変更すると確認出来ます)

ブラウザの表示倍率をリセットする方法は無いかな?と試行錯誤してみました。

ちょっと調べてみるとscreen.devicexdpiってのを使うと画面のdpiがわかるみたい

参考にさせてもらったページ
javascript screen deviceXDPI, deviceYDPI, logicalXDPI, logicalYDPI
deviceXDPI Property (screen, Screen Constructor)
これでできる! クロスブラウザJavaScript入門:第19回 CSSOM View Module解説

windowsは96でIEの表示を400%にしてる時は384。

そこに直接数字を入れたらコントロールできるかのか?と
screen.devicexdpi=96;みたいにしても反応なし。
読み取るだけなのか、使い方を間違ってるのかとにかくこの方法じゃ出来なかった。

なのでzoomプロパティを使って拡大してる分を縮小させてみる事に。
こんな感じ
[js]function cz(){
if (screen.deviceXDPI !=96) {
var dxd=screen.deviceXDPI;
var nowMagniFication=dxd/96;
var chgZoom=1/nowMagniFication;

document.body.style.zoom=chgZoom;
document.body.style.width=document.body.clientWidth*nowMagniFication+"px";
}
}
window.onload=cz;[/js]

zoomを1になるようにしても
横幅が拡大した時のサイズにあわせて変更されちゃうので
document.body.clientWidthを倍率に合わせて拡張

スクロールバーが表示されるのでbodyにoverflow-x:hidden;を指定して切捨て。
window.onloadとwindow.onresizeで呼び出してみたけど
書き方が悪いのかwindow.onresizeがあると横幅が異常に広がってしまうので削除した。

なんとなくokぽい感じがしないでもないけど
上下marginがあると拡大したままになってしまうのよね、これ。

縦のスクロールも伸びっぱなしでした。
ん~もうちょっと頑張らないと使い物にならないかなぁ。