我想我会分享我的“解决方案”,以防它帮助其他不熟悉@media查询的人。
感谢@HashemQolami的回答,我构建了一些媒体查询,这些查询可以像col- *类一样移动起来,这样我就可以堆叠col- *用于移动设备,但是在中心垂直对齐显示大屏幕,例如
<div class='row row-sm-flex-center'> <div class='col-xs-12 col-sm-6'></div> <div class='col-xs-12 col-sm-6'></div> </div>
。
.row-xs-flex-center { display:flex; align-items:center; } @media ( min-width:768px ) { .row-sm-flex-center { display:flex; align-items:center; } } @media ( min-width: 992px ) { .row-md-flex-center { display:flex; align-items:center; } } @media ( min-width: 1200px ) { .row-lg-flex-center { display:flex; align-items:center; } }
每个屏幕分辨率需要不同列数的更复杂的布局(例如,-xs为2行,-sm为3,-md为4等)需要更高级的finagling,但对于带-xs的简单页面堆叠和-sm和更大的行,这工作正常。
有几种方法可以做到
1。
display: table-cell; vertical-align: middle;
以及容器的css
display:table;
使用填充和媒体屏幕相对于屏幕大小更改填充。 谷歌@media屏幕了解更多
使用相对填充 即以%表示填充
希望能帮助到你
HTML
<div class="row"> <div class="col-xs-2 pull-bottom" style="height:100px;background:blue"> </div> <div class="col-xs-8 pull-bottom" style="height:50px;background:yellow"> </div> </div>
CSS
.pull-bottom { display: inline-block; vertical-align: bottom; float: none; }
我刚刚做了这个,它做了我想做的事。
.align-middle { margin-top: 25%; margin-bottom: 25%; }
现在我的页面看起来像
<div class='container-fluid align-middle'> content ---------------------------------- | | | -------------------------- | | | | | | | | | | | | | | | | | | | | | | -------------------------- | | | ----------------------------------
这是我的解决方案。只需将此类添加到您的CSS。
.align-middle { display:flex; justify-content:center; align-items:center; }
然后你的HTML看起来像这样。
<div class="col-xs-12 align-middle"> <div class="col-xs-6" style="background-color:blue;"> <h3>Item</h3> <h3>Item</h3> </div> <div class="col-xs-6" style="background-color:red;"> <h3>Item</h3> </div> </div>
<html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> <!DOCTYPE html> <title>Title</title> </head> <body> <div class="container"> <div class="row"> <div class="col-xs-12 align-middle"> <div class="col-xs-6" style="background-color:blue;"> <h3>Item</h3> <h3>Item</h3> </div> <div class="col-xs-6" style="background-color:red;"> <h3>Item</h3> </div> </div> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> </body> </html>
使用Bootstrap 4(目前处于alpha版本),您可以使用 .align-items-center 类。所以你可以保持Bootstrap的响应特性。 工作对我来说很好。看到 Bootstrap 4文档 。
.align-items-center
自Bootstrap 4添加以来,本机支持Flex行为 d-flex align-items-center 在里面 row DIV。您不再需要修改您的CSS。
d-flex align-items-center
row
简单的例子: http://jsfiddle.net/vgks6L74/
<!-- language: html --> <div class="row d-flex align-items-center"> <div class="col-5 border border-dark" style="height:10em"> Big </div> <div class="col-2 border border-danger" style="height:3em"> Small </div> </div>
用你的例子: http://jsfiddle.net/7zwtL702/
<!-- language: html --> <div class="row d-flex align-items-center"> <div class="col-5"> <div class="border border-dark" style="height:10em">Big</div> </div> <div class="col-2"> <div class="border border-danger" style="height:3em">Small</div> </div> </div>
资源 : https://getbootstrap.com/docs/4.0/utilities/flex/
不需要桌子和桌子。使用变换可以轻松实现。 例: http://codepen.io/arvind/pen/QNbwyM
码:
.child { height: 10em; border: 1px solid green; position: relative; } .child-content { position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" /> <div class="row parent"> <div class="col-xs-6 col-lg-6 child"> <div class="child-content"> <div style="height:4em;border:1px solid #000">Big</div> </div> </div> <div class="col-xs-6 col-lg-6 child"> <div class="child-content"> <div style="height:3em;border:1px solid #F00">Small</div> </div> </div> </div>
我遇到了同样的情况,我想在一行中垂直对齐几个div元素,发现Bootstrap类col-xx-xx将样式应用于div:float:left。
我必须在div元素上应用样式,如style =“Float:none”,并且所有div元素都垂直对齐。这是工作示例:
<div class="col-lg-4" style="float:none;">
以防有人想要阅读有关float属性的更多信息:
div{ border:1px solid; } span{ display:flex; align-items:center; } .col-5{ width:100px; height:50px; float:left; background:red; } .col-7{ width:200px; height:24px; float:left; background:green; }
<span> <div class="col-5"> </div> <div class="col-7"></div> </span>
我详细说明了一下 zessx的回答 ,以便在不同的屏幕尺寸上混合不同的列尺寸时更容易使用。
如果你使用 萨斯 ,你可以将它添加到你的scss文件:
@mixin v-col($prefix, $min-width) { @media (min-width: $min-width) { .col-#{$prefix}-v { display: inline-block; vertical-align: middle; float: none; } } } @include v-col(lg, $screen-lg); @include v-col(md, $screen-md); @include v-col(sm, $screen-sm); @include v-col(xs, $screen-xs);
这会生成以下CSS(如果您不使用Sass,可以直接在样式表中使用):
@media (min-width: 1200px) { .col-lg-v { display: inline-block; vertical-align: middle; float: none; } } @media (min-width: 992px) { .col-md-v { display: inline-block; vertical-align: middle; float: none; } } @media (min-width: 768px) { .col-sm-v { display: inline-block; vertical-align: middle; float: none; } } @media (min-width: 480px) { .col-xs-v { display: inline-block; vertical-align: middle; float: none; } }
现在,您可以在响应列上使用它,如下所示:
<div class="container"> <div class="row"> <div class="col-sm-7 col-sm-v col-xs-12"> <p> This content is vertically aligned on tablets and larger. On mobile it will expand to screen width. </p> </div><div class="col-sm-5 col-sm-v col-xs-12"> <p> This content is vertically aligned on tablets and larger. On mobile it will expand to screen width. </p> </div> </div> <div class="row"> <div class="col-md-7 col-md-v col-sm-12"> <p> This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width. </p> </div><div class="col-md-5 col-md-v col-sm-12"> <p> This content is vertically aligned on desktops and larger. On tablets and smaller it will expand to screen width. </p> </div> </div> </div>
试试这个,
.exe { font-size: 0; } .exe > [class*="col"] { display: inline-block; float: none; font-size: 14px; font-size: 1rem; vertical-align: middle; }
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/> <div class="row exe"> <div class="col-xs-5"> <div style="height:5em;border:1px solid grey">Big</div> </div> <div class="col-xs-5"> <div style="height:3em;border:1px solid red">Small</div> </div> </div>
好吧,不小心我混合了一些解决方案,它最终适用于我的布局,我试图在最小分辨率上制作一个带有Bootstrap列的3x3表。
/* required styles */ #grid a { display: table; } #grid a div { display: table-cell; vertical-align: middle; float: none; } /* additional styles for demo: */ body { padding: 20px; } a { height: 40px; border: 1px solid #444; } a > div { width: 100%; text-align: center; }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <div id="grid" class="clearfix row"> <a class="col-xs-4 align-center" href="#"> <div>1</div> </a> <a class="col-xs-4 align-center" href="#"> <div>2</div> </a> <a class="col-xs-4 align-center" href="#"> <div>3</div> </a> <a class="col-xs-4 align-center" href="#"> <div>4</div> </a> <a class="col-xs-4 align-center" href="#"> <div>5</div> </a> <a class="col-xs-4 align-center" href="#"> <div>6</div> </a> <a class="col-xs-4 align-center" href="#"> <div>7</div> </a> <a class="col-xs-4 align-center" href="#"> <div>8</div> </a> <a class="col-xs-4 align-center" href="#"> <div>9</div> </a> </div>
这个答案提出了一个黑客,但我强烈建议你使用flexbox(如中所述) @Haschem回答 ),因为它现在到处支持。
的 演示链接: 强> - Bootstrap 3 - Bootstrap 4 alpha 6
您仍然可以在需要时使用自定义类:
.vcenter { display: inline-block; vertical-align: middle; float: none; }
<div class="row"> <div class="col-xs-5 col-md-3 col-lg-1 vcenter"> <div style="height:10em;border:1px solid #000">Big</div> </div><!-- --><div class="col-xs-5 col-md-7 col-lg-9 vcenter"> <div style="height:3em;border:1px solid #F00">Small</div> </div> </div>
的 Bootply 强>
运用 inline-block 如果你在代码中留出一个真正的空间,就会在块之间增加额外的空间(比如 ...</div> </div>... )。如果列大小合计为12,则这个额外的空间会破坏我们的网格:
inline-block
...</div> </div>...
<div class="row"> <div class="col-xs-6 col-md-4 col-lg-2 vcenter"> <div style="height:10em;border:1px solid #000">Big</div> </div> <div class="col-xs-6 col-md-8 col-lg-10 vcenter"> <div style="height:3em;border:1px solid #F00">Small</div> </div> </div>
在这里,我们之间有额外的空间 <div class="[...] col-lg-2"> 和 <div class="[...] col-lg-10"> (回车和2个标签/ 8个空格)。所以...
<div class="[...] col-lg-2">
<div class="[...] col-lg-10">
让我们踢出这个额外的空间!
<div class="row"> <div class="col-xs-6 col-md-4 col-lg-2 vcenter"> <div style="height:10em;border:1px solid #000">Big</div> </div><!-- --><div class="col-xs-6 col-md-8 col-lg-10 vcenter"> <div style="height:3em;border:1px solid #F00">Small</div> </div> </div>
请注意 似乎 无用的评论 <!-- ... --> ?他们是 的 重要 强> - 没有他们,之间的空白 <div> 元素将占用布局中的空间,打破网格系统。
<!-- ... -->
<div>
注意:Bootply已更新