将 Flexbox 与 bootstrap 3 和 laravel 4 blade 模板和关联的 LESS mixin 结合使用
Using Flexbox with bootstrap 3 and laravel 4 blade templates and associated LESS mixin
我正在尝试实施 flexbox 解决方案来为正在开发的站点显示内联邮箱系统。我需要实现的基本设计在线框图中显示:
红色边框的区域是我需要实现flexbox的地方。
随着 Laravel Blade Tempting 引擎的开发完成,我们使用包含的文件生成三个窗格的内容(左侧邮箱、中间电子邮件列表和右侧电子邮件查看器) .
基本代码结构如下:
第一个代码片段设置了收件箱的视图:
@extends('layouts.master')
@section('content')
<div class="content-container" ng-app="cs" ng-controller="MessagingCtrl">
<div class="content-pane message-centre">
<div class="row email-container">
<div class="col-xs-12 header">
<h3>Message Centre</h3>
</div>
</div>
<div class="row email-panes">
<div class="col-xs-2 mailboxes">
@include('messages.partials.sidebar', ['active' => 'inbox'])
</div>
<div class="col-xs-3 emails">
@include('messages.partials.message-list')
</div>
<div class="col-xs-7 email-viewer">
@if(isset($message_opened))
@include('messages.partials.message', ['message' => $message_opened])
@endif
</div>
</div>
</div>
</div>
@stop
@section('scripts')
{{HTML::script('assets/js/modules/cs.js')}}
{{HTML::script('assets/js/app/configurations/messaging.js')}}
{{HTML::script('assets/js/app/controllers/MessagingCtrl.js')}}
@stop
如您所见,我们使用 partials 来包含三个垂直窗格。邮箱是具有 a
个链接的 2 个 div 的简单结构。单击其中之一会在中间窗格中显示电子邮件列表,其中将电子邮件列为无序列表项。最后,单击其中一项将在右侧的大窗格中显示所选电子邮件的内容。
我需要确保三个窗格或列的高度相等,而我们知道,css 在将相邻 div 的大小调整为相等高度方面存在限制。因此 flexbox 来拯救。
我的问题是关于 bootstrap 3 中如何支持 flexbox,以及在实现 flexbox 时是否需要特别考虑。我有以下基本的 css (LESS) mixins:
.flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.flex(@values) {
-webkit-box-flex: @values;
-moz-box-flex: @values;
-webkit-flex: @values;
-ms-flex: @values;
flex: @values;
}
.order(@val) {
-webkit-box-ordinal-group: @val;
-moz-box-ordinal-group: @val;
-ms-flex-order: @val;
-webkit-order: @val;
order: @val;
}
.wrapper {
.flexbox();
}
.item {
.flex(1 200px);
.order(2);
}
具体来说,我需要一些关于如何实施 LESS 以适应 bootstrap 网格的建议和帮助。
如有任何建议,我们将不胜感激。
我认为一种选择是覆盖您的 flexbox 区域的 bootstrap CSS。
据我了解,您可以在 Bootstrap CSS 代码之后(或末尾)应用以下 CSS 代码:
.row.email-panes {
display: flex;
}
.row.email-panes .col-xs-2{
flex-grow:2;
background-color: green;
}
.row.email-panes .col-xs-3
{
flex-grow:3;
}
.row.email-panes .col-xs-7{
flex-grow:7;
background-color: red;
}
或更少(有一些嵌套):
.row.email-panes {
display: flex;
.col-xs-2{
flex-grow:2;
background-color: green;
}
.col-xs-3
{
flex-grow:3;
}
.col-xs-7{
flex-grow:7;
background-color: red;
}
}
演示:http://codepen.io/anon/pen/yyVMVo
因为你覆盖了 Bootstrap 的网格 类 你将有一个不支持 flexbox 的浏览器的回退。
我的代码不包含供应商前缀。在您的示例中,您使用 mixin 来设置这些供应商前缀。使用 (a) autoprefix post 处理器似乎是社区共识的更好做法。另见 LESS transition mixin with prefixes
我正在尝试实施 flexbox 解决方案来为正在开发的站点显示内联邮箱系统。我需要实现的基本设计在线框图中显示:
红色边框的区域是我需要实现flexbox的地方。
随着 Laravel Blade Tempting 引擎的开发完成,我们使用包含的文件生成三个窗格的内容(左侧邮箱、中间电子邮件列表和右侧电子邮件查看器) .
基本代码结构如下:
第一个代码片段设置了收件箱的视图:
@extends('layouts.master')
@section('content')
<div class="content-container" ng-app="cs" ng-controller="MessagingCtrl">
<div class="content-pane message-centre">
<div class="row email-container">
<div class="col-xs-12 header">
<h3>Message Centre</h3>
</div>
</div>
<div class="row email-panes">
<div class="col-xs-2 mailboxes">
@include('messages.partials.sidebar', ['active' => 'inbox'])
</div>
<div class="col-xs-3 emails">
@include('messages.partials.message-list')
</div>
<div class="col-xs-7 email-viewer">
@if(isset($message_opened))
@include('messages.partials.message', ['message' => $message_opened])
@endif
</div>
</div>
</div>
</div>
@stop
@section('scripts')
{{HTML::script('assets/js/modules/cs.js')}}
{{HTML::script('assets/js/app/configurations/messaging.js')}}
{{HTML::script('assets/js/app/controllers/MessagingCtrl.js')}}
@stop
如您所见,我们使用 partials 来包含三个垂直窗格。邮箱是具有 a
个链接的 2 个 div 的简单结构。单击其中之一会在中间窗格中显示电子邮件列表,其中将电子邮件列为无序列表项。最后,单击其中一项将在右侧的大窗格中显示所选电子邮件的内容。
我需要确保三个窗格或列的高度相等,而我们知道,css 在将相邻 div 的大小调整为相等高度方面存在限制。因此 flexbox 来拯救。
我的问题是关于 bootstrap 3 中如何支持 flexbox,以及在实现 flexbox 时是否需要特别考虑。我有以下基本的 css (LESS) mixins:
.flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.flex(@values) {
-webkit-box-flex: @values;
-moz-box-flex: @values;
-webkit-flex: @values;
-ms-flex: @values;
flex: @values;
}
.order(@val) {
-webkit-box-ordinal-group: @val;
-moz-box-ordinal-group: @val;
-ms-flex-order: @val;
-webkit-order: @val;
order: @val;
}
.wrapper {
.flexbox();
}
.item {
.flex(1 200px);
.order(2);
}
具体来说,我需要一些关于如何实施 LESS 以适应 bootstrap 网格的建议和帮助。
如有任何建议,我们将不胜感激。
我认为一种选择是覆盖您的 flexbox 区域的 bootstrap CSS。 据我了解,您可以在 Bootstrap CSS 代码之后(或末尾)应用以下 CSS 代码:
.row.email-panes {
display: flex;
}
.row.email-panes .col-xs-2{
flex-grow:2;
background-color: green;
}
.row.email-panes .col-xs-3
{
flex-grow:3;
}
.row.email-panes .col-xs-7{
flex-grow:7;
background-color: red;
}
或更少(有一些嵌套):
.row.email-panes {
display: flex;
.col-xs-2{
flex-grow:2;
background-color: green;
}
.col-xs-3
{
flex-grow:3;
}
.col-xs-7{
flex-grow:7;
background-color: red;
}
}
演示:http://codepen.io/anon/pen/yyVMVo
因为你覆盖了 Bootstrap 的网格 类 你将有一个不支持 flexbox 的浏览器的回退。
我的代码不包含供应商前缀。在您的示例中,您使用 mixin 来设置这些供应商前缀。使用 (a) autoprefix post 处理器似乎是社区共识的更好做法。另见 LESS transition mixin with prefixes