私のhtmlドキュメントの本体は3つの要素、ボタン、フォーム、そしてキャンバスから成ります。ボタンとフォームを右寄せにし、キャンバスを左寄せにします。問題は、最初の2つの要素を整列させようとしたときに、それらが互いに従わなくなり、代わりに水平方向に隣同士になった場合です。間にスペースはありません。
#cTask {
background-color: lightgreen;
}
#button {
position: relative;
float: right;
}
#addEventForm {
position: relative;
float: right;
border: 2px solid #003B62;
font-family: verdana;
background-color: #B5CFE0;
padding-left: 10px;
}
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
<script type="text/javascript" src="timeline.js"></script>
<link rel="stylesheet" href="master.css" type="text/css" media="screen" />
</head>
<body bgcolor="000" TEXT="FFFFFF">
<div id="button">
<button onclick="showForm()" type="button" id="cTask">
Create Task
</button>
</div>
<div id="addEventForm">
<form>
<p><label>Customer name: <input></label></p>
<p><label>Telephone: <input type=tel></label></p>
<p><label>E-mail address: <input type=email></label></p>
</form>
</div>
<div>
<canvas id="myBoard" width="1000" height="600">
<p>Your browser doesn't support canvas.</p>
</canvas>
</div>
</body>
</html>
フォームとボタンの両方を含むdivを作成してから、float: right;
を設定してdivを右にフロートさせることができます。
フロートは問題ありませんが、ie6&7では問題があります。
内側のdivにはmargin-left:auto; margin-right:0;
を使いたいです。
昔の答え最新情報:flexboxを使う。現在、ほとんどすべてのブラウザで動作する。
<div style="display: flex; justify-content: flex-end">
<div>I'm on the right</div>
</div>
そして、あなたはもっと空想的になることができます。
<div style="display: flex; justify-content: space-around">
<div>Left</div>
<div>Right</div>
</div>
そしてより愛好家:
<div style="display: flex; justify-content: space-around">
<div>Left</div>
<div>Middle</div>
<div>Right</div>
</div>
float:right
は親divの外側に出ることができるので(オーバーフロー:親のために隠されることが時々助けになるかもしれません)そして私のためのmargin-left: auto, margin-right: 0
は複雑な入れ子になったdivでは動作しませんでした(理由は調べません)。
要素と親が両方ともinline
またはtext-align: right
であるときこれが機能すると仮定して、私は特定の要素に対してinline-block
が機能すると考えました。
注:text-align
CSSプロパティは、テキストなどのインラインコンテンツがその親ブロック要素でどのように配置されるかを記述します。 text-align
はブロック要素自身の整列を制御するのではなく、それらのインライン内容だけを制御します。
例:
<div style="display: block; width: 80%; min-width: 400px; background-color: #caa;">
<div style="display: block; width: 100%">
I'm parent
</div>
<div style="display: inline-block; text-align: right; width: 100%">
Caption for parent
</div>
</div>
これがJS Fiddle です。
こんな意味ですか? http://jsfiddle.net/6PyrK/1
フォームとボタンにfloat:right
とclear:both;
の属性を追加できます。
親divの右端に並べて配置したい複数のdivがある場合は、親divにtext-align: right;
を設定します。
あなたがIE9以下をサポートする必要がないなら、あなたはこれを解決するためにflexboxを使うことができます: codepen
IE10と11に関するいくつかのバグ( flexbox support )もありますが、この例にはありません。
<button>
をコンテナに入れることで、<form>
とflex-direction: column
を垂直方向に揃えることができます。要素のソース順は上から下に表示される順序になるので、順番を変更しました。
その後、フォームとボタンのコンテナをキャンバスと水平に配置するには、それらをflex-direction: row
のコンテナにラップします。繰り返しますが、要素のソース順は左から右に表示される順序になりますので、並べ替えました。
また、質問にリンクされているコードからすべてのposition
およびfloat
スタイルの規則を削除する必要があります。
これは上でリンクされたcodepenのHTMLの縮小版です。
<div id="mainContainer">
<div>
<canvas></canvas>
</div>
<div id="formContainer">
<div id="addEventForm">
<form></form>
</div>
<div id="button">
<button></button>
</div>
</div>
</div>
そしてこれが関連CSSです。
#mainContainer {
display: flex;
flex-direction: row;
}
#formContainer {
display: flex;
flex-direction: column;
}
flexbox
をflex-grow
とともに使用して、最後の要素を右にプッシュできます。
<div style="display: flex;">
<div style="flex-grow: 1;">Left</div>
<div>Right</div>
</div>
あなたは、単純にpadding-left:60%(例えばex)を使ってあなたのコンテンツを右揃えにすると同時にレスポンシブコンテナでコンテンツをラップすることができます(私の場合はnavbarが必要です)。
ブートストラップを使用している場合:
<div class="pull-right"></div>