人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CSSについての質問です。

ボックスからはみ出るものを制御するのに
通常はoverflowを使用すると思うのですが
希望するような動作ができません。

やりたい内容は
横幅を固定し、はみ出した内容に応じて
ボックスの縦長が伸びるというものです。

たとえば1000文字の改行なしというデータがあったとしても
幅は変えずに縦にぐいっと伸びていくようなものです。

これをCSSで実現できないでしょうか。
無理であれば代替方法を教えてください。

●質問者: e23jp
●カテゴリ:インターネット ウェブ制作
✍キーワード:CSS Overflow データ ボックス 希望
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kazu1107
●20ポイント

どのような内容を表示させようとしてるのかがわからないのですが、

"overflow:auto;"とすることで、必要に応じたスクロールバーの表示ができ、widthを設定することで実際のボックス幅、heightなら高さを設定できます。

しかし、たとえば以下のような場合うまくいきません。

"<div style="overflow:auto;width:100px;">aaaaaaaaaaaaaaaaaaaaaaaaa<>

"aaaaaaaaaaaaaaaaaaaaaaaaa"はコンピュータからみれば一つの単語で、途中に改行が入ることが許されません。

CSSのテスト時によくやる事ですが、ためしに"ああああああああああ"などといれてみれば勝手に改行されているかと思います。

もし的はずれな回答なら、

>希望するような動作ができません。

に対してもうすこし具体的に「どんな表示になるのか」書いてもらえると原因がわかるかもしれません。

◎質問者からの返答

そうですね。少し説明が足りませんでした。

想定しているのはaaaaaaaのほうです。

というか、どんな文字であっても改行して欲しいというのが希望です。

また、スクロールバーはデザイン上でて欲しくありません。

また、autoにするとブラウザごとに挙動が違いそうで避けたいです。

横幅は固定・スクロールバーは出ない・

縦は可変。

こういうことですが、わかりにくいですかね。

うーん。しかしaaaaaができないとなるとphpか何かでチェックして改行文字を入れるとかのほうがいいんでしょうかね・・・。


2 ● kn1967
●10ポイント

Netscape/Firefox系はDIVで使うなどの注意が必要ですが、基本としては overflow: auto で対応できるはずですよ。


3 ● kn1967
●20ポイント

overflow: autoのブロックを overflow: hidden のブロックで囲んでしまうという手とIE対策としてword-break:break-allという手を併用するという手は?


4 ● kazu1107
●20ポイント

極端に長すぎる英単語が入る文章の場合は、IE/Firefox/Operaなどのブラウザの違い。overflow:auto;の指定・未指定に関わらず、変な表示になるものです。あきらめるしかないのではないでしょうか・・・?

英単語の場合は改行も一つのスペースとして見なしてしまうので途中改行出来ない仕様になってるはずで、これはWordなどの文章編集ソフトも同じです。(単語を途中で改行してしまうのは英語の文章としては不適切。)


5 ● ogrenavi
●30ポイント ベストアンサー

【前提:連続する半角英数字が改行されない】--------------------------

通常、テキストは右端で折り返しされるはずですが、URL (URI) 等の連続する半角文字は一つの単語と扱われ、

折り返さない場合が多いです。

つまり、1の方が言っている

>"aaaaaaaaaaaaaaaaaaaaaaaaa"はコンピュータからみれば一つの単語で、途中に改行が入ることが許されません。

ということです。

参考資料:

・半角文字列の折り返し(ブラウザ毎の比較があります)

http://pinotan.blog15.fc2.com/file/word-break.html


【通常の対処方法】-------------------------------------------------

1. htmlタグbrで強制改行。

2. はみ出し部分をCSS(overflow:hidden)で切り落とす。(IE6は親ボックスの幅が広がるバグがあるので、widthで直接的に幅を指定しないと効かない)

3. CSSにword-break:break-allを指定し、IEだけ右端で改行。(ボックス幅の広がりを防げるが、単語区切りにならず英数字が読み辛い)

4. CSSにword-break:keep-allを指定し、IEだけ右端で改行。(単語区切りのみで改行。区切りが無いと全角でも改行されない)

5. 区切り記号を全角にする。(稀に折り返さないケースもある)

6. 半角記号を空白(スペース)で挟む。

7. 単語の区切りなどに<wbr>(<wbr />)を入れる。

参考資料:

7以外は以下の引用です

http://pinotan.blog15.fc2.com/blog-entry-106.html


Firefoxの場合、折り返すようにする拡張機能(url_breaker、url_breker_plusもしくはGreaseMonkeyを使う方法)があります

ただ、この場合、ユーザーにインストールしてもらわないといけないので、

入れていない人にも効かせて欲しい場合は、これをjs化することで対応できます。

参考資料:

Firefox・Netscapeで連続した半角文字を折り返す

http://www.koikikukan.com/archives/2005/08/04-235647.php



【ということで、今回の場合は】-------------------------------------------------

・CSSにword-break:break-allを指定し、IEだけ右端で改行。

・NetscapeやFirefoxのために、jsファイルで<wbr> を挿入する

この2つを併用すればいかがでしょうか?

<wbr>もしくは半角空白を一定挿入するphpスクリプトを書いてもよいかと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ