図1のような、運用時にサムネイル画像の数が増えたり減る仕様でグリッドデザインをコーディングしているのですが、更新の度にhtmlソースを書き直すのは手間なので、どうにか簡単に更新できないか悩んでいます。
▼仕様
サムネイル画像は画像の番号順に増えたり減ったりする。
▼問題点
・サムネイル画像の縦の長さが一定ではない。かつ、並んだ時のマージンは一定。
↓
・上記の条件があるので、コーディング時には図2のように、縦にエリアを割って、area1、area2、area3、area4それぞれfloatをかけて並べる必要がある。
縦にエリアを割ってコーディングすると、htmlソース上では画像の順番がバラバラになるので、どうにかして、下記ようにリストのような状態で、図1のようなデザインを実現したいのですが、JavaScriptで出来るものでしょうか?
(※別にリストでなくてもいいのですが)
<ul>
<li>タイトル<img src="thum01.jpg"></li>
<li>タイトル<img src="thum02.jpg"></li>
<li>タイトル<img src="thum03.jpg"></li>
<li>タイトル<img src="thum04.jpg"></li>
~
</ul>
ご教授をお願いしたく、、、。
よろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
回答がないみたいなので…
方法はいろいろあると思いますが、おおざっぱな雰囲気のみの一例です。
先に全体を走査して、position:absoluteで配置しているだけという方法です。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
#target, #target li{ list-style-type:none; margin:0; padding:0; }
#target{ height:400px; overflow:auto; position:relative; }
#target li{ width:100px; margin:10px; /*position:absolute;*/ }
img{ width:100px; }
</style>
</head>
<body>
<ul id="target">
<li>タイトル1<img src="photo01.jpg"></li>
<li>タイトル2<img src="photo02.jpg"></li>
<li>タイトル3<img src="photo03.jpg"></li>
<li>タイトル4<img src="photo04.jpg"></li>
<li>タイトル5<img src="photo05.jpg"></li>
<li>タイトル6<img src="photo06.jpg"></li>
<li>タイトル7<img src="photo07.jpg"></li>
<li>タイトル8<img src="photo08.jpg"></li>
</ul>
<script type="text/javascript">
function layouter(id, width){
var target = document.getElementById(id);
var maxHeight = target.clientHeight;
var lists = target.getElementsByTagName("LI");
var i, e, position = [];
var count, y, left = 0, top = 0;
if(e = lists[0]) e.style.marginTop = "0px";
for(i=0; e=lists[i]; i++){
y = e.offsetTop - top;
if(y + e.clientHeight > maxHeight){
y = 0;
top = e.offsetTop;
left += width;
}
position[i] = [ left, y ];
}
for(i=0; e=lists[i]; i++){
var s = e.style, p = position[i];
s.position = "absolute";
s.left = p[0] + "px";
s.top = p[1] + "px";
if(p[1] === 0) s.marginTop = "0px";
}
}
layouter("target", 110);
</script>
</body>
</html>
No.2
- 回答日時:
Jqueryで作ってみました。
jquery-1.8.1.min.js で動作チェックしています。ブラウザはopera。縦型の配置ブロック(div要素)に id を area0 から area3 まで振ります。css で必須なのは、 float : left;です。あとは、適宜修飾して下さい。
並べ替えたい要素を id="thum_list" の要素内に、順に記述しておきます(div要素としています)。見出し用のブロックも同じ扱いで先頭に。
縦型の配置ブロックよりさらに下方に表示したい要素が有るなら、css の clear:both; が必要です。
画像数が変わると、htmlの更新自体は必要だけど、とりあえず id="thum_list" の要素内に画像番号順に追加や削除で済むようにはなります。
<html lang="ja"><head>
<style type="text/css">
.tatewaku {
float : left;
width : 23%;/* 横に並べたい個数や、border,paddingサイズによって適宜変更, ブラウザによってpadding 内部サイズだったり、borderも含んでいたりするので注意 */
height: 80%;
overflow: auto;
padding: 1%;
border : 1px dotted green;
}
.clearbox{
clear:both;
}
</style>
<script type="text/javascript" src="jquery-1.8.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#thum_list div').each( function(key,val){
/* 第1引数keyに0開始の要素番号, 第2引数valはその番号の要素のDOMオブジェクト */
var area_id = '#area'+ (key % 4);/* 4 は 配置枠個数 */
$(area_id).append( val );
} );/* each function end */
});/* ready function end */
</script>
</head>
<body><h1>配置 転換サンプル</h1>
<div><!-- 配置枠は 0開始の連番 -->
<div id="area0" class="tatewaku"></div>
<div id="area1" class="tatewaku"></div>
<div id="area2" class="tatewaku"></div>
<div id="area3" class="tatewaku"></div>
</div>
<div id="thum_list"><!-- 並べ替え対象全体をくるむ要素に id 名"thum_list"をつける。 内部div要素の記述順に前出のareaへ横に順に格納 -->
<div><h2>大見出し用</h2>解説</div>
<div><h3>タイトルA</h3><img src="thum01.jpg"></div>
<div><h3>タイトルB</h3><img src=""></div>
<div><h3>タイトルC</h3><img src=""></div>
...
</div>
<div class="clearbox">clear しないと、float left しているブロックの右となりに表示される
</div>
</body></html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- HTML・CSS htmltとcssの連携をして画像縮小について 1 2022/11/15 20:32
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スライドショーの画像にリンク...
-
Slick.jsのオプションrtlについて
-
エンドロールを枠の中で表示す...
-
MAX関数を使ってからLEFT JOIN...
-
c++std::string型をTCHARに変換...
-
htmlの記述で link rel=styles...
-
JQueryで画像の上で文字を動かす
-
ロールオーバー効果にならない。
-
jspでcssが読み込めない
-
スライダーを実装した場合、ペ...
-
離れた場所にマウスオーバーで...
-
フォントサイズの変更
-
変数内容をHTML内で表示する方法
-
javascriptでURLにマウスオーバー
-
1行で左寄せと右寄せと中央揃え...
-
document.getElementById( ).st...
-
連番画像「次へ」「前へ」で、...
-
文字を固定したいのですが…
-
戻ってきた時ツリーメニューが...
-
eclipseでcssを使うためには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Slick.jsのオプションrtlについて
-
【jQuery】2分割レイアウトで、...
-
アコーディオンメニューが開い...
-
横並びの画像を3枚時間差でフェ...
-
html5に変えるとスライドショー...
-
キャラクターがぴょこんと飛び...
-
jsでグリッドデザインのサムネ...
-
Javaスクリプトで画像を縦にス...
-
複数の要素へ appendchild でき...
-
CSSでマウスオーバーした画像を...
-
【iOS及びAndroid】リンク画像...
-
スライドショー「Skitter」をカ...
-
Dreamweaver上とデバイスプレビ...
-
同一ページ内の複数のタグに同...
-
スライド機能について
-
チェックボックスと画像切替の連動
-
jqueryのプラグインslickの画像...
-
Javascriptを使用したスライド...
-
bxSliderのランダム表示について
-
Firefoxとクロームでフェードイ...
おすすめ情報