首页 > 代码库 > Bootstarp学习(二十)面板

Bootstarp学习(二十)面板

面板

面板(Panels)是Bootstrap框架新增的一个组件,其主要作用就是用来处理一些其他组件无法完成的功能。同样在不同的版本中具有不同的源码:

  ?  Less版本:对应的源码文件是 panels.less

  ?  Sass版本:对应的源码文件是 _panels.scss

  ?  编译后的Bootstrap:对应bootstrap.css文件第4995行~第5302行

<h3>基础面板</h3>
<div class="panel panel-default">
    <div class="panel-body">我是一个基础面板,带有默认主题样式风格</div>
</div>
<h3>带有头和尾的面板</h3>
<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
	</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<h3>彩色面板</h3>
<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">			详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
	</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-primary">
	<div class="panel-heading">图解CSS3</div>
	<div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-success">
	<div class="panel-heading">图解CSS3</div>
	<div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-info">
	<div class="panel-heading">图解CSS3</div>
	<div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-warning">
	<div class="panel-heading">图解CSS3</div>
	<div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-danger">
	<div class="panel-heading">图解CSS3</div>
	<div class="panel-body">详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<h3>面板中嵌套表格</h3>
<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">
		<p>详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
		</p>
		<table class="table table-bordered">
			<thead>
				<tr>
					<th>#</th>
					<th>我的书</th>
					<th>发布时间</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>《图解CSS3》</td>
					<td>2014-07-10</td>
				</tr>
			</tbody>
		</table>
	</div>
	<div class="panel-footer">作者:大漠</div>
</div>

面板--基础面板

基础面板非常简单,就是一个div容器运用了“panel”样式,产生一个具有边框的文本显示块。由于“panel”不控制主题颜色,所以在“panel”的基础上增加一个控制颜色的主题“panel-default”,另外在里面添加了一个“div.panel-body”来放置面板主体内容:

<div class="panel panel-default">
    <div class="panel-body">我是一个基础面板,带有默认主题样式风格</div>
</div>

运行效果如下:

技术分享

原理分析:

“panel“主要对边框,间距和圆角做了一定的设置:

/*bootstrap.css文件第4995行~第5005行*/
.panel {
  margin-bottom: 20px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 4px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
}
.panel-body {
  padding: 15px;
}

面板--带有头和尾的面板

基础面板看上去太简单了,Bootstrap为了丰富面板的功能,特意为面板增加“面板头部”和“页面尾部”的效果:

   ?  panel-heading:用来设置面板头部样式

   ? panel-footer:用来设置面板尾部样式

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">…</div>
    <div class="panel-footer">作者:大漠</div>
</div>

运行效果如下:

技术分享

原理分析:

panel-heading和panel-footer也仅仅间距和圆角等样式进行了设置:

/*bootstrap.css文件第5006行~第5030行*/
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 16px;
  color: inherit;
}
.panel-title > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}

面板--彩色面板

在基础面板一节中了解到,panel样式并没有对主题进行样式设置,而主题样式是通过panel-default来设置。在Bootstrap框架中面板组件除了默认的主题样式之外,还包括以下几种主题样式,构成了一个彩色面板:

  ?  panel-primary:重点蓝

  ?  panel-success:成功绿

  ? panel-info:信息蓝

  ? panel-warning:警告黄

  ? panel-danger:危险红

使用方法就很简单了,只需要在panel的类名基础上增加自己需要的类名:

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">…</div>
    <div class="panel-footer">作者:大漠</div>
</div>
<div class="panel panel-primary">…</div>
<div class="panel panel-success">…</div>
<div class="panel panel-info">…</div>
<div class="panel panel-warning">…</div>
<div class="panel panel-danger">…</div>

运行效果如下:

技术分享

从效果中不难发现,这几个样式只是改变了面板的背景色、文本和边框颜色:具体源码可以查看bootstrap.css文件第5195行~第5302行。

面板--面板中嵌套表格

一般情况下可以把面板理解为一个区域,在使用面板的时候,都会在panel-body放置需要的内容,可能是图片表格或者列表等。来看看面板中嵌套表格和列表组的一个效果。首先来看嵌套表格的效果:

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">
    <p>详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
    </p>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>#</th>
                <th>我的书</th>
                <th>发布时间</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>《图解CSS3》</td>
                <td>2014-07-10</td>
            </tr>
        </tbody>
    </table>
    </div>
    <div class="panel-footer">作者:大漠</div>
</div>

运行效果如下:

技术分享

优化代码:

在实际应用运中,你或许希望表格和面板边缘不需要有任何的间距。但由于panel-body设置了一个padding:15px的值,为了实现这样的效果。我们在实际使用的时候需要把table提取到panel-body外面:

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">…</div>
    <table class="table table-bordered">…</table>
    <div class="panel-footer">作者:大漠</div>
</div>

运行效果如下:

技术分享

这样的效果是不是完美多了。大家可能会问,前面介绍表格的时候table-bordered明明有边框,按理说这里应该会出现边框重叠效果才对,怎么没有呢?其实原本是有边框重叠的,只不过在面板中对表格又做了一次优化。对应的代码是bootstrap.css文件中第5054行~第5172行。

<h3>面板中嵌套表格(一)</h3>
<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
	<div class="panel-body">
		<p>详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
		</p>
		<table class="table table-bordered">
			<thead>
				<tr>
					<th>#</th>
					<th>我的书</th>
					<th>发布时间</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>《图解CSS3》</td>
					<td>2014-07-10</td>
				</tr>
			</tbody>
		</table>
	</div>
	<div class="panel-footer">作者:大漠</div>
</div>
<h3>面板中嵌套表格(二)</h3>
<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
	<div class="panel-body">
		<p>详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
		</p>
	</div>
	<table class="table table-bordered">
		<thead>
			<tr>
				<th>#</th>
				<th>我的书</th>
				<th>发布时间</th>
			</tr>
		</thead>
	<tbody>
		<tr>
			<td>1</td>
			<td>《图解CSS3》</td>
			<td>2014-07-10</td>
		</tr>
	</tbody>
	</table>
	<div class="panel-footer">作者:大漠</div>
</div>

面板--面板中嵌套列表组

在上一节,我们介绍了如何在面板中放置表格,现在我们来学习如何在面板中放置列表组,我们简单的来看一个示例:

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">
        <p>详细讲解了选择器、边框、背景、文本、颜色、盒模型、伸缩布局盒模型、多列布局、渐变、过渡、动画、媒体、响应Web设计、Web字体等主题下涵盖的所有CSS3新特性
        </p>
        <ul class="list-group">
            <li class="list-group-item">我是列表项</li>
            <li class="list-group-item">我是列表项</li>
            <li class="list-group-item">我是列表项</li>
        </ul>
    </div>
    <div class="panel-footer">作者:大漠</div>
</div>

运行效果如下:

技术分享

优化代码:

和嵌套表格一样,如果你觉得这样有间距不好看,你完全可以把列表组提取出来:

<div class="panel panel-default">
    <div class="panel-heading">图解CSS3</div>
    <div class="panel-body">…</div>
    <ul class="list-group">
        <li class="list-group-item">我是列表项</li>
        <li class="list-group-item">我是列表项</li>
        <li class="list-group-item">我是列表项</li>
    </ul>
    <div class="panel-footer">作者:大漠</div>
</div>

运行效果如下:

技术分享

同样的道理,Bootstrap将嵌套在面板中的列表组做了一定的样式优化。具体源码可以查看bootstrap.css文件第5031行~第5053行。


Bootstarp学习(二十)面板