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://3tI.4969.com.cn/" class="btn" data-dismiss="modal">Close</a>
    <a href="https://D.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://effg.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://effg.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.

欧美群迅雷下载民居邮票上海邮票网上海邮票网鸡年邮票邮票互动网大龙邮票生肖邮票龙邮票邮票网“无胚种计划”,维斯帝国于十二年前开展的计划,“与其让战士们练习如何使用剑,还不如让孩子们从一开始就练习。”在这样的政策下诞生的少年少女们,被称为“心无”。 他们在十七岁登上战场,在惨烈的战场中摸爬滚打三年之久,最后幸存的七人在新生的维斯联合王国中生活,他们的命运又将如何?九世药圣,灵根被夺,沦为一介凡人,成为人人唾弃的废物少年——星辰!凭借九星轮回的秘术,走上传奇巅峰。手握星辰踏明月,世间无我这般人。 传言:药圣一怒,便可称帝,阎王惊魂,鬼神哭泣!这里没有玄幻,没有穿越;只有新活的生命,逻辑的真实。 这是一个虚构的故事;一个关于生意与情怀的故事。一群年轻人,在小说主人翁李非的带领下,历经千辛万苦,克服重重困难,在小城香州,书写了一段商业传奇。香水星河酒店,一个给予了无数客人美好记忆,承载着一群酒店人理想的航器,在到达了它辉煌的顶峰后,突然掉头…… 结果怎么样?为什么会这样?是历史的悲剧,还是人生的释然?——一千个读者就有一千个哈姆雷特——如果你想得出自己的结论,请阅读天界无际的小说《香水星河》。7年前突然降临的奇怪游戏,那不会死人的古怪游戏究竟隐藏着什么秘密,为何会不停的选召选手挑战那一轮轮不同的诡异游戏。 偶尔出现在李沐梦境中的奇怪景象,是否与那古怪的疯王游戏有关? 第一次进入疯王游戏却获得三枚堪称许愿币一般的令信,让李沐忍不住想要探究这一切背后的秘密。 而随着李沐进入疯王游戏,现实世界被隐藏的异变也渐渐展露在他面前... 血腥残酷的修真世界,实力为尊,崇尚武力,凡人皆为蝼蚁。想要站到世界的最巅峰,孤儿院长大的他,如何做到?卖力苦修?拜入修真大派?还是寻得名师?统统都不是,偶得万界供应系统统加身,开挂人生由此开始,修炼、金钱、宝物、丹药诸多资源随手可得。从此开始了火箭般的成长之路,从一介凡人蜕变为修真巨贾,不过弹指间。穿越武侠,李纯竟成了统领江湖的天下盟盟主,顺便觉醒了“天下第一盟主”系统。 可是看着盟内一众大佬,李纯顿时傻眼了。 雄霸、帝释天、铁胆神侯、邀月、左冷禅... 全是鼎鼎大名的魔头、大反派! 你让我当他们老大? 盟内牛鬼蛇神,家里也是恐怖至极。 他爹竟是李逍遥! 杀穿全局的江玉燕竟是自己未婚妻! 打铁匠竟是不死不灭的尹仲! .... 老天爷,这个世界师没好人了是吧! 刚进入大学生活的青年,因为一次学校社团招新,机缘巧合之下卷入了神秘的梦境世界,诡异离奇的事情接憧而来,操场上屠夫来自哪里,湖中来客缘起何方,校车为何吃人,楼栋里的巡察使在找谁,谁才是这领域的主宰。一部上古卷轴的史诗巨作。 一部人类英雄的传说。赢飞羽穿越大秦,开局年仅五岁半。 还好身携熊孩子系统,只要不断搞事就能获得奖励。 “什么?系统你说我爹是秦始皇?” 当得知自己竟是嬴政流落在外的第二十四子时,赢飞羽惊了。 为了大秦不再二世而亡,也为了自己的小命,赢飞羽只好出手为嬴政逆天改命,导演沙丘宫之变! 嬴政:“好孩子,跟朕回宫,宫里好吃的多的很!” 小正太:“有泡面吗?” 当代大儒:“小公子,咱们今天学四书!” 小正太:“你瞧瞧我倒背的如何?” 第一武将:“小公子,臣来教你几招!” 小正太:“还是我先给你表演一个空手舞石狮子吧!” 嬴政:“赵佗造反,谁去平定?” 百官:“小公子文能提笔安天下,武能马上定乾坤!” 小正太:“别急!容我先练一只特种兵!” 原本只想作妖混个系统奖励,不曾想竟被秦始皇当做接班人培养! 一名少年天赋异禀,因被手足残害险些命丧他手,不曾想因祸得福在机缘巧合之下寻得仙界神兵。当绝世神兵再现,引仙魔觊觎之时,他又将迎来一场怎样的命运呢?
鸡年邮票 邮票网 世界上第一枚邮票 大龙邮票 纪念邮票 中国邮票价格表 南京文交所钱币邮票交易中心 邮票价格 邮票 邮票互动网 邮票收藏价格表 文革邮票 大龙邮票 上海邮票网 邮票收藏 第三轮生肖邮票 纪念邮票 邮票收藏 邮票市场 女幽灵 百度网盘下载 迅雷下载 南京文交所钱币邮票交易中心 第三轮生肖邮票 龙邮票 香港回归纪念邮票 龙邮票 大龙邮票 邮票收藏价格表 邮票交易所 邮票收藏价格表 香港回归纪念邮票 邮票行情 纪念邮票 邮票行情 奥运邮票 邮票价格 邮票吧 香港回归纪念邮票 上海邮票网 十二生肖邮票 中国邮票价格表 全民星:签之力都市重生之剑仙归来重生之我的高中生涯乱劫咒地狱踏破悟命弄哭同桌后,我天下无敌!永恒的道特异使者入江湖,莫回首月寒宫传九州之凌云志醉风月离奇的梦法之元为新神的诞生献上荆棘王冠都市绝世仙帝异魂行者浮生剑语西游总导演新泰和马桶请复制到浏览器打开 沙发协会 培训课程 生石灰厂家 欧式家具特点 陕西富平房价 民生尚都雅园房价 柏士壁厂家 北京买家具 滑县二手房 铜钱价格表 木质皮质结合沙发 优势 工厂仓库 武汉柜子定制 衣柜禾 东莞家具厂 浴霸的价格 最好的马桶哪里产的瓷 自助仓库 成都 欧泰浴室柜 墙衣价格 仓库的用途分类 整体衣柜移门 聚氨酯涂料厂家 衣柜门 翘 宜家 浴室柜台下盆安装高度 临淄二手房 新生小区 挪亚家家具 紫檀家具 北京房价下跌 二手房契税 丰县二手房 整体衣柜厂家 电缆价格 窗帘营销 重庆巴南都汇里房价 桂花苗价格 阳光板价格 窗帘双色水波幔图 桥西区搬家公司电话 乐从家具 衣柜 全套家具 升降晾衣架价格 莲湖区搬家公司电话号码 成都田园房价 索菲亚衣柜 装了马上住 西安中合搬家电话是多少 沙发买软的 还是硬的 燕郊纳丹堡房价 窗帘窗纱 上海货架 比乐 衣柜 石膏板厂家 黄金砂厂家 西安酒店窗帘 香港人人搬屋电话 枝江二手房 杭州办公楼窗帘 广州二手房 水波快速裁法图 家具设计图 窗帘分几种 浴室柜批发 乐从家具网 中圣街房价 整体推拉门衣柜厂家 小区与食堂 定制客厅柜 酒柜衣柜 成都蚂蚁搬家公司电话号码 郎咸平 房价 衣柜门平开 家具漆厂家 王现小区 西安二手房 仓库货架倒塌事故案例 自由筑 房价 田园小区 电视柜价格 假九牧马桶 什么叫堆垛储物仓库 窗帘样本书 湖州货架厂 窗帘帘头水波裁剪尺寸 广州货架展柜厂 美心浴室柜 窗帘钩子 华日沙发 半皮沙发 合成革 老化 上海吕巷房价 南京卫浴 合肥房价走势 定制衣柜杭州 价格 背压阀厂家 上海房价下跌 昆明搬家公电话 电子锁厂家 重型悬臂货架 西山有搬家公司吗 衣柜板材 深圳宝安搬家公司 胡桃木家具 科曼多衣柜 上海窗帘网