2016-06-28 9 views
1

ストレートポイント。子供と同じ高さの列のレスポンシブクロスブラウザソリューション

私は、写真のように応答性の高い2列構成レイアウトの解決策が必要です。

enter image description here

.left/.right列幅の比は常に.parent 75/25%であるべきであり、その高さが常に同期しなければなりません。

.left列は、すべてのビューポートの変更及び.rightカラムと幅と高さにスケール画像が正確に1/3 .parent高さのそれぞれを取る3つのつの子要素(.cta)を含むべきで含有すべきです。

に許容可能な溶液のための基準は、できるだけ多くのデバイスやブラウザの

  • サポート(IE9 +は結構です)
  • HTCなどを使用したいようなブランドベンダー特定のブラウザのサポート
  • 私が非JSソリューションを思い付くしたい .left.rightの両方のための明示的な高さを設定するためにJavaScriptを使用するのは簡単だろうが、
  • フレキシボックスはオプション
  • ではありません私は満足のいく解決策を作ってみた

最も近い.left.right高さが常に同期されていることを確認するためにdisplay: table-cell;を使用しています。残念ながら、このソリューションは、親コンテナと子コンテナの両方がパーセンテージを使用してディメンションを定義し、それらのディメンションを計算するためにそれぞれのフローに依存する場合、結果が未定義であることを明示するCSS仕様のため、IEでは機能しません。コンテナの高さは、IE以外のすべてのブラウザでフルハイトに拡大されます(.right)。

Codepen example

HTML

<div class="parent"> 
    <div class="left"> 
    <div class="image-container"><img class="image" src="http://placehold.it/1300x780" alt="" /></div> 
    </div> 
    <div class="right"> 
    <div class="cta"> 
     <a>LINK #1</a> 
    </div> 
    <div class="cta"> 
     <a>LINK #2</a> 
    </div> 
    <div class="cta"> 
     <a>LINK #3</a> 
    </div> 
    </div> 
</div> 

CSS

.parent { 
    display: table; 
    width: 90%; 
    height: 100%; 
    margin: 0 auto; 
} 

.parent > div { 
    display: table-cell; 
    height: 100%; 
    vertical-align: top; 
    text-align: center; 
} 

.left { 
    width: 75%; 
} 

.image { 
    display: block; 
    width: 100%; 
    height: auto; 
} 

.right { 
    width: 25%; 
    background: #bbb; 
} 

.cta { 
    display: table; 
    width: 100%; 
    height: 33.33%; 
    font-family: Helvetica, Arial, sans-serif; 
    overflow: hidden; 
    background: #bbb; 
    color: #fff; 
    text-transform: uppercase; 
    text-align: center; 
} 

.cta a { 
    display: table-cell; 
    vertical-align: middle; 
    height: 100%; 
    cursor: pointer; 
} 

すべてはJavaScriptをバックアップソリューションとして常にある失敗した場合。しかし、それは2016年に私の心を賭けてしまいました。私たちは、必要なもののような簡単な解決策を達成するために、ハックに対処するには依然として呪われています。

+0

フレキシボックスがないのはなぜオプション?あなたは単純な解決策ではないと不平を言っていますが、最も単純な解決策を除外しました。 –

+1

@MitchelJagerフレックスボックスは、在庫のAndroidブラウザ(少なくとも標準的な方法ではない)を使用しているデバイス、特にデバイスのHTCライン全体でサポートされているため、IEではバグがあり、予測できません。したがって、この場合はオプションではありません。 – brezanac

+0

私はフレックスボックスのファンですが、あなたは公正なポイントを作っています。 –

答えて

2

crossbrowserはなく、恐竜thne inline-blockcalc()のピンチを助けるかもしれないため場合:

* { 
 
    box-sizing: border-box; 
 
    margin:0; 
 
} 
 
.parent div div a, 
 
.parent div div { 
 
    border: solid 1px; 
 
} 
 
.parent div.left { 
 
    padding: 1em; 
 
    border: solid 1px; 
 
} 
 
.parent div { 
 
    display: inline-block; 
 
    vertical-align: top; 
 
    width: 100%; 
 
} 
 
.parent { 
 
    width: 70%;/* demo purpose, do run it in full page too */ 
 
    margin: auto; 
 
    background:yellow; 
 
} 
 
img { 
 
    width: 100%; 
 
    display: block; 
 
} 
 
.parent .left { 
 
    width: 75%; 
 
} 
 
.parent .right { 
 
    width: 25%; 
 
} 
 
.parent div div a { 
 
    margin: 0.88em; 
 
    display: block; 
 
    text-align: center; 
 
    /* if floatting pseudo do 
 
    overflow:hidden;*/ 
 
} 
 
.parent div div a:before { 
 
    content: ''; 
 
    padding-top: calc(60% - 0.5em);/* is calc() allowed ? if not keep 60% and remove margin:1em from links */ 
 
    /* float:left; or with vertical-align */ 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
}
<div class="parent"> 
 
    <div class="left"> 
 
    <div class="image-container"> 
 
     <img class="image" src="http://placehold.it/1300x780" alt="" /> 
 
    </div> 
 
    </div><!-- cure white-space disturbance 
 
    --><div class="right"> 
 
    <div class="cta"> 
 
     <a>LINK #1</a> 
 
    </div> 
 
    <div class="cta"> 
 
     <a>LINK #2</a> 
 
    </div> 
 
    <div class="cta"> 
 
     <a>LINK #3</a> 
 
    </div> 
 
    </div> 
 
</div>

http://codepen.io/anon/pen/VjpdZE

IE11がそれを取得します:ie11 screen

+0

残念なことに、この解決法は同じ問題を抱えています。つまり、 '.right'コンテナの高さはIEの' .parent'コンテナの高さまで拡大しません。 – brezanac

+0

@holodocどのような種類のIEを実行していますか?原因は、calc()の他に、ほとんどの人が**%**の縦書きの埋め込みを理解していて、インラインブロック(IE6が出ているかもしれません)ですが、残念ながら私は驚いています。コードをリンクしました –

+0

私はIE9、IE10、IE11を実行しているいくつかのローカルマシンでコードを実行し、いくつかのbrowserstack.comマシンで同じことを試しました。すべてがマイナスの結果をもたらしました。しかし、あなたが投稿したcodepenは奇妙な作品です。コードを詳しく見ていく必要があります。他の誰かが貢献しているかどうかを確認するために、あなたの投稿を回答としてマークしません。それ以外にも、あなたのご意見には大変感謝しています。 – brezanac

関連する問題