About modals

A streamlined, but flexible, take on the traditional javascript modal plugin with only the minimum required functionality and smart defaults.

Download file

Static example

Below is a statically rendered modal.

Live demo

Toggle a modal via javascript by clicking the button below. It will slide down and fade in from the top of the page.

Launch demo modal

Using bootstrap-modal

Call the modal via javascript:

$('#myModal').modal(options)

Options

Name type default description
backdrop boolean true Includes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
keyboard boolean true Closes the modal when escape key is pressed
show boolean true Shows the modal when initialized.

Markup

You can activate modals on your page easily without having to write a single line of javascript. Just set data-toggle="modal" on a controller element with a data-target="#foo" or href="#foo" which corresponds to a modal element id, and when clicked, it will launch your modal.

Also, to add options to your modal instance, just include them as additional data attributes on either the control element or the modal markup itself.

<a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
<div class="modal hide" id="myModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Modal header</h3>
  </div>
  <div class="modal-body">
    <p>One fine body…</p>
  </div>
  <div class="modal-footer">
    <a href="https://X.4969.com.cn/" class="btn" data-dismiss="modal">Close</a>
    <a href="https://B.4969.com.cn/" class="btn btn-primary">Save changes</a>
  </div>
</div>
Heads up! If you want your modal to animate in and out, just add a .fade class to the .modal element (refer to the demo to see this in action) and include bootstrap-transition.js.

Methods

.modal(options)

Activates your content as a modal. Accepts an optional options object.

$('#myModal').modal({
  keyboard: false
})

.modal('toggle')

Manually toggles a modal.

$('#myModal').modal('toggle')

.modal('show')

Manually opens a modal.

$('#myModal').modal('show')

.modal('hide')

Manually hides a modal.

$('#myModal').modal('hide')

Events

Bootstrap's modal class exposes a few events for hooking into modal functionality.

Event Description
show This event fires immediately when the show instance method is called.
shown This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).
hide This event is fired immediately when the hide instance method has been called.
hidden This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).
$('#myModal').on('hidden', function () {
  // do something…
})


This plugin adds quick, dynamic tab and pill functionality for transitioning through local content.

Download file

Example tabs

Click the tabs below to toggle between hidden panes, even via dropdown menus.

Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.

Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.


Using bootstrap-tab.js

Enable tabbable tabs via javascript (each tab needs to be activated individually):

$('#myTab a').click(function (e) {
  e.preventDefault();
  $(this).tab('show');
})

You can activate individual tabs in several ways:

$('#myTab a[href="#profile"]').tab('show'); // Select tab by name
$('#myTab a:first').tab('show'); // Select first tab
$('#myTab a:last').tab('show'); // Select last tab
$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed)

Markup

You can activate a tab or pill navigation without writing any javascript by simply specifying data-toggle="tab" or data-toggle="pill" on an element. Adding the nav and nav-tabs classes to the tab ul will apply the bootstrap tab styling.

<ul class="nav nav-tabs">
  <li><a href="#home" data-toggle="tab">Home</a></li>
  <li><a href="#profile" data-toggle="tab">Profile</a></li>
  <li><a href="#messages" data-toggle="tab">Messages</a></li>
  <li><a href="#settings" data-toggle="tab">Settings</a></li>
</ul>

Methods

$().tab

Activates a tab element and content container. Tab should have either a data-target or an href targeting a container node in the DOM.

<ul class="nav nav-tabs" id="myTab">
  <li class="active"><a href="#home">Home</a></li>
  <li><a href="#profile">Profile</a></li>
  <li><a href="#messages">Messages</a></li>
  <li><a href="#settings">Settings</a></li>
</ul>
<div class="tab-content">
  <div class="tab-pane active" id="home">...</div>
  <div class="tab-pane" id="profile">...</div>
  <div class="tab-pane" id="messages">...</div>
  <div class="tab-pane" id="settings">...</div>
</div>
<script>
  $(function () {
    $('#myTab a:last').tab('show');
  })
</script>

Events

Event Description
show This event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
shown This event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
$('a[data-toggle="tab"]').on('shown', function (e) {
  e.target // activated tab
  e.relatedTarget // previous tab
})

About Tooltips

Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use css3 for animations, and data-attributes for local title storage.

Download file

Example use of Tooltips

Hover over the links below to see tooltips:

Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral.


Using bootstrap-tooltip.js

Trigger the tooltip via javascript:

$('#example').tooltip(options)

Options

Name type default description
animation boolean true apply a css fade transition to the tooltip
placement string|function 'top' how to position the tooltip - top | bottom | left | right
selector string false If a selector is provided, tooltip objects will be delegated to the specified targets.
title string | function '' default title value if `title` tag isn't present
trigger string 'hover' how tooltip is triggered - hover | focus | manual
delay number | object 0

delay showing and hiding the tooltip (ms) - does not apply to manual trigger type

If a number is supplied, delay is applied to both hide/show

Object structure is: delay: { show: 500, hide: 100 }

Heads up! Options for individual tooltips can alternatively be specified through the use of data attributes.

Markup

For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.

<a href="https://oat3.4969.com.cn/" rel="tooltip" title="first tooltip">hover over me</a>

Methods

$().tooltip(options)

Attaches a tooltip handler to an element collection.

.tooltip('show')

Reveals an element's tooltip.

$('#element').tooltip('show')

.tooltip('hide')

Hides an element's tooltip.

$('#element').tooltip('hide')

.tooltip('toggle')

Toggles an element's tooltip.

$('#element').tooltip('toggle')

About popovers

Add small overlays of content, like those on the iPad, to any element for housing secondary information.

* Requires Tooltip to be included

Download file

Example hover popover

Hover over the button to trigger the popover.


Using bootstrap-popover.js

Enable popovers via javascript:

$('#example').popover(options)

Options

Name type default description
animation boolean true apply a css fade transition to the tooltip
placement string|function 'right' how to position the popover - top | bottom | left | right
selector string false if a selector is provided, tooltip objects will be delegated to the specified targets
trigger string 'hover' how tooltip is triggered - hover | focus | manual
title string | function '' default title value if `title` attribute isn't present
content string | function '' default content value if `data-content` attribute isn't present
delay number | object 0

delay showing and hiding the popover (ms) - does not apply to manual trigger type

If a number is supplied, delay is applied to both hide/show

Object structure is: delay: { show: 500, hide: 100 }

Heads up! Options for individual popovers can alternatively be specified through the use of data attributes.

Markup

For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.

Methods

$().popover(options)

Initializes popovers for an element collection.

.popover('show')

Reveals an elements popover.

$('#element').popover('show')

.popover('hide')

Hides an elements popover.

$('#element').popover('hide')

.popover('toggle')

Toggles an elements popover.

$('#element').popover('toggle')

About alerts

The alert plugin is a tiny class for adding close functionality to alerts.

Download

Example alerts

The alerts plugin works on regular alert messages, and block messages.

Holy guacamole! Best check yo self, you're not looking too good.

Oh snap! You got an error!

Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.

Take this action Or do this


Using bootstrap-alert.js

Enable dismissal of an alert via javascript:

$(".alert").alert()

Markup

Just add data-dismiss="alert" to your close button to automatically give an alert close functionality.

<a class="close" data-dismiss="alert" href="https://oat3.4969.com.cn/">&times;</a>

Methods

$().alert()

Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the .fade and .in class already applied to them.

.alert('close')

Closes an alert.

$(".alert").alert('close')

Events

Bootstrap's alert class exposes a few events for hooking into alert functionality.

Event Description
close This event fires immediately when the close instance method is called.
closed This event is fired when the alert has been closed (will wait for css transitions to complete).
$('#my-alert').bind('closed', function () {
  // do something…
})

About

Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

Download file

Example uses

Use the buttons plugin for states and toggles.

Stateful
Single toggle
Checkbox
Radio

Using bootstrap-button.js

Enable buttons via javascript:

$('.nav-tabs').button()

Markup

Data attributes are integral to the button plugin. Check out the example code below for the various markup types.

<!-- Add data-toggle="button" to activate toggling on a single button -->
<button class="btn" data-toggle="button">Single Toggle</button>
<!-- Add data-toggle="buttons-checkbox" for checkbox style toggling on btn-group -->
<div class="btn-group" data-toggle="buttons-checkbox">
  <button class="btn">Left</button>
  <button class="btn">Middle</button>
  <button class="btn">Right</button>
</div>
<!-- Add data-toggle="buttons-radio" for radio style toggling on btn-group -->
<div class="btn-group" data-toggle="buttons-radio">
  <button class="btn">Left</button>
  <button class="btn">Middle</button>
  <button class="btn">Right</button>
</div>

Methods

$().button('toggle')

Toggles push state. Gives the button the appearance that it has been activated.

Heads up! You can enable auto toggling of a button by using the data-toggle attribute.
<button class="btn" data-toggle="button" >…</button>

$().button('loading')

Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute data-loading-text.

<button class="btn" data-loading-text="loading stuff..." >...</button>
Heads up! Firefox persists the disabled state across page loads. A workaround for this is to use autocomplete="off".

$().button('reset')

Resets button state - swaps text to original text.

$().button(string)

Resets button state - swaps text to any data defined text state.

<button class="btn" data-complete-text="finished!" >...</button>
<script>
  $('.btn').button('complete')
</script>

About

Get base styles and flexible support for collapsible components like accordions and navigation.

Download file

* Requires the Transitions plugin to be included.

Example accordion

Using the collapse plugin, we built a simple accordion style widget:

Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

Using bootstrap-collapse.js

Enable via javascript:

$(".collapse").collapse()

Options

Name type default description
parent selector false If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior)
toggle boolean true Toggles the collapsible element on invocation

Markup

Just add data-toggle="collapse" and a data-target to element to automatically assign control of a collapsible element. The data-target attribute accepts a css selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class in.

<button class="btn btn-danger" data-toggle="collapse" data-target="#demo">
  simple collapsible
</button>
<div id="demo" class="collapse in"> … </div>
Heads up! To add accordion-like group management to a collapsible control, add the data attribute data-parent="#selector". Refer to the demo to see this in action.

Methods

.collapse(options)

Activates your content as a collapsible element. Accepts an optional options object.

$('#myCollapsible').collapse({
  toggle: false
})

.collapse('toggle')

Toggles a collapsible element to shown or hidden.

.collapse('show')

Shows a collapsible element.

.collapse('hide')

Hides a collapsible element.

Events

Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

Event Description
show This event fires immediately when the show instance method is called.
shown This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).
hide This event is fired immediately when the hide method has been called.
hidden This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).
$('#myCollapsible').on('hidden', function () {
  // do something…
})


About

A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.

Download file

Example

Start typing in the field below to show the typeahead results.


Using bootstrap-typeahead.js

Call the typeahead via javascript:

$('.typeahead').typeahead()

Options

Name type default description
source array [ ] The data source to query against.
items number 8 The max number of items to display in the dropdown.
matcher function case insensitive The method used to determine if a query matches an item. Accepts a single argument, the item against which to test the query. Access the current query with this.query. Return a boolean true if query is a match.
sorter function exact match,
case sensitive,
case insensitive
Method used to sort autocomplete results. Accepts a single argument items and has the scope of the typeahead instance. Reference the current query with this.query.
highlighter function highlights all default matches Method used to highlight autocomplete results. Accepts a single argument item and has the scope of the typeahead instance. Should return html.

Markup

Add data attributes to register an element with typeahead functionality.

<input type="text" data-provide="typeahead">

Methods

.typeahead(options)

Initializes an input with a typeahead.

做网站是三网合一有什么优势网络信息安全演练方案清华信息安全实验室金融公司网络安全网络安全管理技术和应用集群化营销郑州建网站网络营销都做什么哪个学校有信息安全网站响应式和非响应式中国国家信息安全产品认证证书级别如何区分一个持续万余年的计划 只为对抗 第一圣人毁灭世界的阴谋 却不想其他世界的误入 让整个行动造成了无法挽回的偏差 是绝地重生? 还是陷入绝望…… 一个突如其来的灾难,全球陷入了无尽的黑夜之中,层出不穷的文明和怪物开始出现了,神明、机甲、超自然力量,在巨变到来之后,所有人都在想办法活着,而一个叫做零号的人类出现了,他…… 我叫林温,是一名末日生存爱好者,这些年来,一切我能想到的物资我都储备了。 或许别人家里摆着一墙壁的AJ或者手办,而我一整面墙壁,储存了数十斤压缩饼干,上百个罐头,医疗用品、防毒面具以及防化服,甚至还有自制手弩。 我常常幻想着末日降临丧尸围城,那堆满物资的储物间,就会是我最安心的庇护所。 而让我意外的是,当末日真的降临时,一切与我的幻想截然不同。没有血腥残暴的丧尸,没有异想天开的外星人入侵。 那日,璀璨的光团从苍穹降临,它宛如神祇,没有人可以直视。 ……一介神偷无意落入百年阴谋大局,在阴谋中成长,站在世界之巅。“祖师,您在等什么?” “第三柄圣器出世,不,准确的说是在等第三个持圣器之人出现!” “为什么?” “屠神!” 丧尸突然在校园出现,校园只剩二百多名同学包括四个校花,我们的主角苏长影会怎么做呢?他会拿下四个校花冲出校园,过上神仙般的生活吗?月高悬于空,星不见其影。 沉眠的暴君从历史中苏醒,漆黑的双翼划过破晓的黎明;巍峨古堡跨越了尘封的的记忆,矗立在洛尔维亚的群山之巅。 当头戴王冠的公主睁开双眼,从死亡归来的旅人重新握住剑柄—— 国王湖的水面不再平静,却依旧深不见底。在梦里,我梦到了一片海,在海边有一百个人静静地看海。他们说愿意把每个人的故事讲给我,让我写出来。我很羞愧,至今我的作品仍无人问津。他们说相信我,总有一天会闪闪发光。 带着他们的信任我把他们的故事转述出来,这次看似我是作家,其实写作的是他们自己。宅男看动漫魂穿狐妖世界,开局签到生活系统…… 介绍无力 感兴趣就来瞧瞧 一名叫win剑客的故事,来战吧,天地!
太原网站优化 学校网站欣赏中文 微电商营销策划方案 微电商营销策划方案 大市场营销组合构成6P 免费网站申请 大市场营销组合构成6P 网络安全传输 营销型网站设计工资 最优的网站建设 学习成绩差的环境影响【www.richdady.cn】 老公家暴的应对方法咨询【www.richdady.cn】 什么原因意外的前世故事【www.richdady.cn】 学习成绩差的辅导方法咨询【www.richdady.cn】 提高孩子阅读兴趣的方法咨询【www.richdady.cn】 强迫症的环境影响咨询威:⒊⒏⒊⒌⒌O⒏⒏O√转ihbwel 内心恐惧胆怯的咨询技巧【www.richdady.cn】√转ihbwel 不爱读书的改运方法【企鹅383550880】√转ihbwel 学习成绩差的辅导方法咨询【微:qq383550880 】√转ihbwel 升迁障碍的自我提升咨询【Q⒊⒏⒊⒌⒌O⒏⒏O】√转ihbwel 学习成绩差的家庭教育咨询【Q⒊⒏⒊⒌⒌O⒏⒏O】√转ihbwel 克服职场升迁障碍咨询威:⒊⒏⒊⒌⒌O⒏⒏O√转ihbwel 孩子厌学的案例分享咨询【www.richdady.cn】√转ihbwel 前世缘份的前世解析咨询威:⒊⒏⒊⒌⒌O⒏⒏O√转ihbwel 前世今生的故事有哪些经典案例?咨询威:⒊⒏⒊⒌⒌O⒏⒏O√转ihbwel 前世今生的故事是真的吗?咨询【www.richdady.cn】√转ihbwel 心特别累的案例分享【企鹅383550880】√转ihbwel 与公婆前世的故事分析咨询【Q⒊⒏⒊⒌⒌O⒏⒏O】√转ihbwel 孩子厌学的自我提升咨询【Q⒊⒏⒊⒌⒌O⒏⒏O】√转ihbwel 为什么过世的前世记忆咨询【微:qq383550880 】√转ihbwel 金融公司网络安全 信息安全厂家排名 什么是wifi网络安全 珠海专业医疗网站建设 沈阳微网站 定制网站制作广州 微电商营销策划方案 顾问营销系统 市场研究机构idc信息安全 美国网络安全管理评估报告 怎么检测网络安全 网络营销产品策略 信息网络安全协会 网络安全问题的文章 营销代理 关于加强党政部门云计算服务网络安全管理的意见 信息安全评测机构 资质 网络信息安全演练方案 昆明营销团队 昆山高端网站建设 做网站是三网合一有什么优势 天融信网络安全准入系统免费网络安全培训课程 网信部门和有关部门违反网络安全法第三十条规定 网络营销品牌成功案例 网络营销工作任务 聊城网站制作价格 珠海品牌网站设计 聊城网站制作价格 深圳信息安全 优势网网站 信息安全评测机构 资质 微信营销的效果 自建网站套现 网络安全管理流程 西安全网营销推广 家居企业网站建设新闻 信息安全测试平台 网站线框图 网站响应式和非响应式 沧州网站推广 网络安全. 企业网站制作设计 大市场营销组合构成6P 网络安全专家指导 网络安全管理技术和应用 关于进一步推进市属国有企业信息安全等级保护工作的通知 网站优化推广公司 成都 网站设计公司口碑营销的经典案例 丰都网站 2016网络安全国际会议 做网站是三网合一有什么优势 镇江网站建设公司 河东做网站 网络营销推广软件 公共网络安全专项检查 作品网站 卫龙 整合营销 市场研究机构idc信息安全 沈阳微网站 高端广告公司网站建设 沧州网站推广 单页网站制作 网络营销的业务流程 网络安全检测时间 网络营销具体指什么区别 公安机关信息安全 郑州网站建设 关于加强党政部门云计算服务网络安全管理的意见 什么是wifi网络安全 大华 网络安全 信息安全厂家排名 系统上线信息安全培训,-1 中国国家信息安全产品认证证书级别如何区分 临沂网络营销策划 2017信息安全认证 网络营销具体指什么区别 公司网站域名是什么 信息安全产品分类 我国网络安全 qq免费建网站 网络安全产品 公司 huang色网站 为了保护信息安全本次删除已被禁止 昆明营销团队 甘肃网站建设 大型网站开发 怎样办网站 网络市场营销方式 提供常州网站建设 网络安全管理流程 网络安全问题的文章 重庆网站真实案例 系统上线信息安全培训,-1 网络安全监测设备 酒泉网站建设 清华信息安全实验室 营销型网站设计工资 案例展示在网站中的作用 单页网站制作 网络市场营销方式 卫龙 整合营销 昆明响应式网站 淄博网站 什么是wifi网络安全 推广型网站制作哪家好 营销型网站是什么样的 昆山高端网站建设 免费网站申请 信息安全小组,-1 石家庄网络安全公司 网络安全对大学生的 顺德网站制作案例平台 中国网络安全 秦安 网站线框图 网站拖拽 《信息安全研究》互动营销型网站建设 开封做网站 信息安全建设,-1 赢在教育全网营销 推广营销宣传方案 微电商营销策划方案 网络安全 调查报告 推广营销宣传方案 中国网络安全 秦安 省网络安全厅 2016网络安全国际会议 信息安全风险管理培训内容 灵动网站建设 信息安全评测机构 资质 营销代理 句容网站建设 在网站后台上传的图片为什么传到网站上后会变形应该怎么修改 太原网站优化 青岛免费建网站 网络安全专家指导