2017-10-31 4 views
0

ReactとFirebaseを使用して小さなWebアプリケーションを作成していて、問題が発生しています。CSSで検索バーとボタンを整理する

理想的には、検索バーとボタンを画面の中央に検索バー、緑色のボタン、黄色、赤色の順に並べることが理想的です。すべてはお互いに触れている。ページサイズが縮小されている場合、ボタンは理想的には縮小され、検索バーと並んでいます。

HTML

<div class="searchArea"> 
<div class="formWrapper"> 
<input class="playerInput" placeholder="Search by player name" /> 
</div> 
<div class="formButtons"> 
<button class="upvoteButton">&#9650;</button> 
<button class="downvoteButton">&#9660;</button> 
<button class="injuryButton">&times;</button> 
</div> 
</div> 

はここでペンだ - https://codepen.io/scottmiller2/pen/bYNPVm

任意の方向が理解されます。私はマージンを微調整しようとしましたが、デフォルトに戻してペンに入れました。私は試行錯誤の前にこの作品のようなことを作ってきましたが、ウィンドウのサイズ変更を準備するときに、どうやってこのように正しく整列させるべきか不思議です。事前に感謝

ここでは、検索部を表示するコードです:

<div className="playersFooter"> 
<PlayerForm addPlayer={this.addPlayer}/> 
</div> 

対応するCSS

.playersFooter { 
display: flex; 
flex: 1 1 5%; 
background-color: rgba(0, 0, 0, 0, 0.5); 
} 

答えて

1

フレキシボックス多かれ少なかれ保存されたウェブ開発者を使用しているようです。それも、ラッパーなしで簡単です。

.searchArea { 
 
    display: flex; 
 
    box-sizing: border-box; 
 
    align-items: center; 
 
    justify-content: center; 
 
    min-height: 100vh; 
 
} 
 

 
.playerInput { 
 
    width: 450px; 
 
    min-width: 300px; 
 
    font-size: 1.3em; 
 
    padding-left: 20px; 
 
    height: 55px; 
 
    border: 0; 
 
    border-top-left-radius: 4px; 
 
    border-bottom-left-radius: 4px; 
 
    background-color: rgba(34, 49, 63, 0.8); 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.playerInput:focus { 
 
    background-color: rgba(255, 255, 255, 0.6); 
 
    color: #111; 
 
    transition: 0.2s ease-in; 
 
} 
 

 
button { 
 
    border: 0; 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-family: "Droid Sans", sans-serif; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.upvoteButton { 
 
    background-color: #00ab9e; 
 
} 
 

 
.downvoteButton { 
 
    background-color: #fcce66; 
 
} 
 

 
.injuryButton { 
 
    background-color: #fb655a; 
 
    border-top-right-radius: 4px; 
 
    border-bottom-right-radius: 4px; 
 
} 
 

 
.upvoteButton:hover { 
 
    background-color: #02ffb6; 
 
} 
 

 
.downvoteButton:hover { 
 
    background-color: #fbf03e; 
 
} 
 

 
.injuryButton:hover { 
 
    background-color: #fd483a; 
 
}
<div class="searchArea"> 
 
    <input class="playerInput" placeholder="Search by player name" /> 
 
    <button class="upvoteButton">&#9650;</button> 
 
    <button class="downvoteButton">&#9660;</button> 
 
    <button class="injuryButton">&times;</button> 
 
</div>

ブラウザのサポート:http://caniuse.com/#feat=flexbox

Codepenリンク:https://codepen.io/helb/pen/eemwGp

+0

これは、コードペンでは、非常にうまく並んでいます。しかし、リアクションコードでビジュアルスタジオにスローすると、画面の左側に検索ボックスが固定され、セクションのすぐ下に表示されます。私は、検索コンテンツがplayersFooterというクラスに入っていることを知っています。これにはフレックスCSSがいくつかあります。最初の投稿を編集し、それに含まれるCSSを含めました。 playersFooterクラスを削除(または変更)した場合、検索バーは画面の中央に表示されますが、他のサイトコンテンツは表示されません。 – idlehand

+0

私はあなたのアライメントとplayersFooterにセンターを正当化し、それが必要な場所のすぐ近くに配置しました。私はそれがすると思います!助けてくれてありがとう! – idlehand

+0

申し訳ありません、私は眠っていました。 :)スニペットで、 '.searchArea'に 'min-height:100vh'を追加したので、ビューポート全体の高さをとり、他の要素を押し出します。 – helb

1

フレキシボックスはdivの中に垂直方向と水平方向の要素を中心にするのに便利です - >ボタンは上の中心ナビゲーションバー。私はこれがあなたが求めているものだと信じています。リンクしたコードペンは、あなたの説明とは無関係のようです。ペンは、ほんの数年前の位置/フロート/ネガティブマージンの混乱からposition: absolute;

Intro to Flexbox Link

+0

はそれを上に見て、ありがとうございました! – idlehand

+0

あなたはそれを把握できましたか? – DannyV

0

ない男は、あなたがこのためにフレキシボックスは必要ありません。それは本当にシンプルですが、それはアプローチに依存します(複雑になることがあります)。

検索領域が常に左上隅にある場合は、position:absoluteを使用し、絶対にmargin:autoを削除してください。それだけで、検索ボックスと同じ行にボタンが置かれます。サイズを変更すると、ボタンがその検索ボックスの後ろに移動します(配置によって要素が通常のフローから削除されるため、基本的にボタンには検索ボックスが表示されません)。これを修正するには、.searchAreaの最小幅または本体の最小幅を設定します。私はそのトリックをするために670-680pxを見つけました。 ボタン要素から「margin-top」を削除しました。それは良いことはしません。

.searchArea { 
 
    min-width: 675px; 
 
} 
 

 
.formWrapper { 
 
    position: absolute; 
 
} 
 

 
.formButtons { 
 
    float:right; 
 
} 
 

 
/*search box*/ 
 
.playerInput{ 
 
    width: 450px; 
 
    min-width: 300px; 
 
    font-size: 1.3em; 
 
    padding-left: 20px; 
 
    height: 55px; 
 
    border-top-left-radius: 4px; 
 
    border-bottom-left-radius: 4px; 
 
    background-color: rgba(34,49,63,0.8); 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.playerInput:focus{ 
 
    background-color: rgba(255, 255, 255, 0.60); 
 
    color: #111; 
 
    transition: 0.2s ease-in; 
 
} 
 

 
.upvoteButton { 
 
    border: none; 
 
    /*removed individual floats */ 
 
    /* I have removed the margin from here*/ 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #00ab9e; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.downvoteButton { 
 
    border: none; 
 
    /*removed individual floats */ 
 
    /* I have removed the margin from here*/ 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #fcce66; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.injuryButton { 
 
    border: none; 
 
    /*removed individual floats */ 
 
    /* I have removed the margin from here*/ 
 
    border-top-right-radius: 4px; 
 
    border-bottom-right-radius: 4px; 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #fb655a; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.upvoteButton:hover { 
 
    background-color: #02ffb6; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.downvoteButton:hover { 
 
    background-color: #fbf03e; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.injuryButton:hover { 
 
    background-color: #fd483a; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
}
<div class="searchArea"> 
 
    <div class="formWrapper"> 
 
    <input class="playerInput" placeholder="Search by player name" /> 
 
    </div> 
 
    <div class="formButtons"> 
 
    <button class="upvoteButton">&#9650;</button> 
 
    <button class="downvoteButton">&#9660;</button> 
 
    <button class="injuryButton">&times;</button> 
 
    </div> 
 
</div>

このコードは完璧には程遠いと私はより多くのそれを微調整することができますが、あなたはどこから始めれば知っているので、私はあなたに簡単かつ迅速な修正を与えたかったです。

さらに調整したい場合は、教えてください。

この解決策があなたに役立つ場合は、この回答を受け入れるか否かを検討してください。

+0

あなたはほとんどのものにフレックスボックスを必要としませんが、方法は簡単です。 ;) – helb

1

あなたも、このために、テーブルレイアウトを使用することができます。

/* updates/addition */ 
 

 
* { 
 
    box-sizing: border-box; 
 
} 
 

 
.searchArea { 
 
    display: table; 
 
    margin: auto; 
 
} 
 

 
.formWrapper, 
 
.formButtons { 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
} 
 

 
.formButtons { 
 
    white-space: nowrap; 
 
    font-size: 0; 
 
} 
 

 
.formButtons button { 
 
    font-size: 1rem; 
 
    /* to hide swallow white-space and instead float:right initially used*/ 
 
} 
 

 

 
/* end addition */ 
 

 

 
/*search box*/ 
 

 
.playerInput { 
 
    width: 450px; 
 
    min-width: 300px; 
 
    font-size: 1.3em; 
 
    padding-left: 20px; 
 
    height: 55px; 
 
    border-top-left-radius: 4px; 
 
    border-bottom-left-radius: 4px; 
 
    background-color: rgba(34, 49, 63, 0.8); 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
    vertical-align: top; 
 
} 
 

 
.playerInput:focus { 
 
    background-color: rgba(255, 255, 255, 0.60); 
 
    color: #111; 
 
    transition: 0.2s ease-in; 
 
} 
 

 
.upvoteButton { 
 
    border: none; 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #00ab9e; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.downvoteButton { 
 
    border: none; 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #fcce66; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.injuryButton { 
 
    border: none; 
 
    border-top-right-radius: 4px; 
 
    border-bottom-right-radius: 4px; 
 
    height: 55px; 
 
    padding: 8px 24px; 
 
    font-size: 0.8em; 
 
    font-family: "Droid Sans", sans-serif; 
 
    background-color: #fb655a; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.upvoteButton:hover { 
 
    background-color: #02ffb6; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.downvoteButton:hover { 
 
    background-color: #fbf03e; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
} 
 

 
.injuryButton:hover { 
 
    background-color: #fd483a; 
 
    color: #fff; 
 
    transition: 0.2s ease-out; 
 
}
<div class="searchArea"> 
 
    <div class="formWrapper"> 
 
    <input class="playerInput" placeholder="Search by player name" /> 
 
    </div> 
 
    <div class="formButtons"> 
 
    <button class="upvoteButton">&#9650;</button> 
 
    <button class="downvoteButton">&#9660;</button> 
 
    <button class="injuryButton">&times;</button> 
 
    </div> 
 
</div>

関連する問題