搜尋
首頁web前端Bootstrap教程淺談Bootstrap-table的用法

這篇文章跟大家介紹一下Bootstrap-table的用法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

淺談Bootstrap-table的用法

相關推薦:《bootstrap教學

一、什麼是Bootstrap-table?

  在業務系統開發中,對表格記錄的查詢、分頁、排序​​等處理是非常常見的,在Web開發中,可以採用很多功能強大的插件來滿足要求,且能極大的提高開發效率,本隨筆介紹這個bootstrap-table是一款非常有名的開源表格插件,在許多專案中廣泛的應用。 Bootstrap-table插件提供了非常豐富的屬性設置,可實現查詢、分頁、排序​​、複選框、設置顯示列、Card view視圖、主從表顯示、合併列、國際化處理等處理功能,而且該插件同時也提供了一些不錯的擴充功能,如移動行、移動列位置等一些特殊的功能,插件可以用基於HTML5的data-*屬性標識設置,也可以使用Javascript方式進行設置,非常方便。本篇隨筆介紹bootstrap-table插件在我實際專案中的應用情況,總結相關使用中碰到的問題處理經驗。

二、怎麼使用Bootstrap-table?

Bootstrap-Table顯示資料到表格的方式有兩種,一種是客戶端(client)模式,一種是伺服器(server)模式。

  客戶端模式:指的是在伺服器中把要顯示到表格的資料一次載入出來,然後轉換成JSON格式傳到要顯示的介面中,客戶端模式較為簡單,它是把資料一次載入出來放到介面上,然後根據你設定的每頁記錄數,自動生成分頁。點擊第二頁時,會自動載入出數據,不會再向伺服器發送請求。同時用戶可以使用其自帶的搜尋功能,可以實現全數據搜尋。對於資料量較少的時候,可以使用這個方法。

  伺服器模式:指的是根據設定的每頁記錄數和目前要顯示的頁碼,發送資料到伺服器進行查詢,然後再顯示到表格中。此方法可以根據使用者的需求動態的載入數據,節省了伺服器的資源,但是不能使用其自帶的全數據搜尋功能。

Bootstrap-table是基於Boostrap開發的插件,因此使用的時候,需要引入Bootstrap的腳本和樣式。

如果我們專案中沒有引入相關的文件,則需要引入這些樣式和腳本文件,如下所示。

<link>
<script></script>
<script></script>

然後是Bootstrap-table的依賴引用:

CSS檔案引入

<link>

腳本檔案引入

<script></script>

<script></script>

bootstrap-table在頁面中的使用,可以分為兩種,一種是純粹用HTML5的寫法,透過data-*的方式指定各種屬性設置,一種是HTML JS方式實現彈性設定。

如果我們採用HTML5標識的方式初始化HTML程式碼,則是下面的程式碼。



    
        
            
            
            
        
    
Item IDItem NameItem Price

 如果我們採用JS程式碼方式來初始化表格插件,那麼只需要在HTML上宣告一個表格物件即可,如下程式碼。


js程式碼如下:

$('#table').bootstrapTable({
    url: 'data1.json',
    columns: [{
        field: 'id',
        title: 'Item ID'
    }, {
        field: 'name',
        title: 'Item Name'
    }, {
        field: 'price',
        title: 'Item Price'
    }, ]
});

 不過其實我們使用 bootstrap-table的JS設定功能肯定比這個複雜很多,下面介面效果是實際表格的資料展示。

淺談Bootstrap-table的用法

三、Bootstrap-table詳解:

#1)整個JS屬性配置

以上圖為例,上圖展示結果的JS程式碼如下:

var $table;
        //初始化bootstrap-table的内容
        function InitMainTable () {
            //记录页面bootstrap-table全局变量$table,方便应用
            var queryUrl = '/TestUser/FindWithPager?rnd=' + Math.random()
            $table = $('#grid').bootstrapTable({
                url: queryUrl,                      //请求后台的URL(*)
                method: 'GET',                      //请求方式(*)
                //toolbar: '#toolbar',              //工具按钮用哪个容器
                striped: true,                      //是否显示行间隔色
                cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
                pagination: true,                   //是否显示分页(*)
                sortable: true,                     //是否启用排序
                sortOrder: "asc",                   //排序方式
                sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
                pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
                pageSize: rows,                     //每页的记录行数(*)
                pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
                search: false,                      //是否显示表格搜索
                strictSearch: true,
                showColumns: true,                  //是否显示所有的列(选择显示的列)
                showRefresh: true,                  //是否显示刷新按钮
                minimumCountColumns: 2,             //最少允许的列数
                clickToSelect: true,                //是否启用点击选中行
                //height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
                uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
                showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
                cardView: false,                    //是否显示详细视图
                detailView: false,                  //是否显示父子表
                //得到查询的参数
                queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
                    var temp = {
                        rows: params.limit,                         //页面大小
                        page: (params.offset / params.limit) + 1,   //页码
                        sort: params.sort,      //排序列名
                        sortOrder: params.order //排位命令(desc,asc)
                    };
                    return temp;
                },
                columns: [{
                    checkbox: true,
                    visible: true                  //是否显示复选框
                }, {
                    field: 'Name',
                    title: '姓名',
                    sortable: true
                }, {
                    field: 'Mobile',
                    title: '手机',
                    sortable: true
                }, {
                    field: 'Email',
                    title: '邮箱',
                    sortable: true,
                    formatter: emailFormatter
                }, {
                    field: 'Homepage',
                    title: '主页',
                    formatter: linkFormatter
                }, {
                    field: 'Hobby',
                    title: '兴趣爱好'
                }, {
                    field: 'Gender',
                    title: '性别',
                    sortable: true
                }, {
                    field: 'Age',
                    title: '年龄'
                }, {
                    field: 'BirthDate',
                    title: '出生日期',
                    formatter: dateFormatter
                }, {
                    field: 'Height',
                    title: '身高'
                }, {
                    field: 'Note',
                    title: '备注'
                }, {
                    field:'ID',
                    title: '操作',
                    width: 120,
                    align: 'center',
                    valign: 'middle',
                    formatter: actionFormatter
                }, ],
                onLoadSuccess: function () {
                },
                onLoadError: function () {
                    showTips("数据加载失败!");
                },
                onDblClickRow: function (row, $element) {
                    var id = row.ID;
                    EditViewById(id, 'view');
                },
            });
        };

 上面JS程式碼的設定屬性,基本上都加了註解說明,是比較容易理解的了。

2)查詢及分頁

這裡的表格資料分頁是採用伺服器分頁的方式,根據搜尋條件從伺服器傳回資料記錄的,並使用了排序的處理方式,這裡的queryParams參數就是提交到伺服器端的參數了。

//得到查询的参数
queryParams : function (params) {
//这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = {
           rows: params.limit,                         //页面大小
           page: (params.offset / params.limit) + 1,   //页码
           sort: params.sort,      //排序列名
           sortOrder: params.order //排位命令(desc,asc)
     };
   return temp;
},

 另外我們看到回傳資料的URL位址介面是FindWithPager,我們來看看這個MVC控制器方法是如何處理資料回傳的。

/// <summary>
        /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
        /// </summary>
        /// <returns>指定对象的集合</returns>
        public override ActionResult FindWithPager()
        {
            //检查用户是否有权限,否则抛出MyDenyAccessException异常
            base.CheckAuthorized(AuthorizeKey.ListKey);

            string where = GetPagerCondition();
            PagerInfo pagerInfo = GetPagerInfo();
            var sort = GetSortOrder();

            List<testuserinfo> list = null;
            if (sort != null && !string.IsNullOrEmpty(sort.SortName))
            {
                list = baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);
            }
            else
            {
                list = baseBLL.FindWithPager(where, pagerInfo);
            }

            //Json格式的要求{total:22,rows:{}}
            //构造成Json的格式传递
            var result = new { total = pagerInfo.RecordCount, rows = list };
            return ToJsonContent(result);
        }</testuserinfo>

面碼處理了兩個部分的物件訊息,一個是分頁實體類別訊息,一個是排序信息,然後根據這些條件獲取記錄,返回類似

{total:22,rows:{}}

格式的JSON數據記錄。

var result = new { total = pagerInfo.RecordCount, rows = list };
return ToJsonContent(result);

 取得分頁的參數資訊如下所示

/// <summary>
        /// 根据Request参数获取分页对象数据
        /// </summary>
        /// <returns></returns>
        protected virtual PagerInfo GetPagerInfo()
        {
            int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);
            int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);

            PagerInfo pagerInfo = new PagerInfo();
            pagerInfo.CurrenetPageIndex = pageIndex;
            pagerInfo.PageSize = pageSize;

            return pagerInfo;
        }

 取得排序參數資訊的程式碼如下所示

/// <summary>
        /// 获取排序的信息
        /// </summary>
        /// <returns></returns>
        protected SortInfo GetSortOrder()
        {
            var name = Request["sort"];
            var order = Request["sortOrder"];
            return new SortInfo(name, order);
        }

 最後就是具體實作特定條件、具體頁碼、具體排序條件下的資料記錄了,這部分可以依照自己的要求實作邏輯,這裡只是給一個封裝好的處理呼叫即可。

baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);

 实际情况下,我们列表的展示,一般需要使用不同的条件进行数据的查询的,虽然这个Bootstrap-table控件提供了一个默认的查询按钮,不过一般是在客户端分页的情况下使用,而且略显简单,我们一般使用自己查询条件进行处理,如下界面所示。

或者如下:

那么这样对于上面的js属性就需要调整下接受查询条件参数queryParams 了

//得到查询的参数
                queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                    var temp = {
                        rows: params.limit,                         //页面大小
                        page: (params.offset / params.limit) + 1,   //页码
                        sort: params.sort,      //排序列名
                        sortOrder: params.order //排位命令(desc,asc)
                    };
                    return temp;
                },

 对于自定义查询条件,我们可以用下面的常规方式增加参数,如下所示

但是查询条件的参数我们不方便一一设置,我们想通过一种较为快捷的方式来处理,那么就需要对这个处理方式进行一个特别的修改了,首先添加一个扩展函数来处理表单的条件(参考博客http://www.cnblogs.com/zcsj/p/6635677.html的介绍)

//自定义函数处理queryParams的批量增加
        $.fn.serializeJsonObject = function () {
            var json = {};
            var form = this.serializeArray();
            $.each(form, function () {
                if (json[this.name]) {
                    if (!json[this.name].push) {
                        json[this.name] = [json[this.name]];
                    }
                    json[this.name].push();
                } else {
                    json[this.name] = this.value || '';
                }
            });
            return json;
        }

 然后我们就可以批量处理表单的查询条件了

queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                    var temp = $("#ffSearch").serializeJsonObject();
                    temp["rows"] = params.limit;                        //页面大小
                    temp["page"] = (params.offset / params.limit) + 1;  //页码
                    temp["sort"] = params.sort;                         //排序列名
                    temp["sortOrder"] = params.order;                   //排位命令(desc,asc)

                    //特殊格式的条件处理
                    temp["WHC_Age"] = $("#WHC_Age").val() + "~" + $("#WHC_Age2").val();
                    temp["WHC_BirthDate"] = $("#WHC_BirthDate").val() + "~" + $("#WHC_BirthDate2").val();

                    return temp;
                },

然后后端统一按照逻辑处理查询参数即可。

3)格式化输出函数及其他

对于上面JS的配置信息,我们再来回顾一下,例如对于数据转义函数,可以格式化输出的内容的,如下界面代码。

格式化的数据转义函数如下,主要就是根据内容进行格式化输出的JS函数,好像是需要放在一个文件内。

//连接字段格式化
        function linkFormatter(value, row, index) {
            return "<a>" + value + "</a>";
        }
        //Email字段格式化
        function emailFormatter(value, row, index) {
            return "<a>" + value + "</a>";
        }
        //性别字段格式化
        function sexFormatter(value) {
            if (value == "女") { color = 'Red'; }
            else if (value == "男") { color = 'Green'; }
            else { color = 'Yellow'; }

            return '<div>' + value + '</div>';
        }

 另外,我们看到行记录的最后增加了几个操作按钮,方便对当前记录的查看、编辑和删除操作,如下效果图所示。

这部分我们也是通过格式化函数进行处理的

//操作栏的格式化
        function actionFormatter(value, row, index) {
            var id = value;
            var result = "";
            result += "<a><span></span></a>";
            result += "<a><span></span></a>";
            result += "<a><span></span></a>";

            return result;
        }

  如果我们需要双击弹出编辑界面的层,我们可以处理表格的双击事件,如下代码所示。

onDblClickRow: function (row, $element) {
                    var id = row.ID;
                    EditViewById(id, 'view');
                },

 

如果我们需要设置行的不同的样式展示,可以通过增加rowStyle的JS处理函数即可,如下代码所示

rowStyle: function (row, index) { //设置行的特殊样式
                    //这里有5个取值颜色['active', 'success', 'info', 'warning', 'danger'];
                    var strclass = "";
                    if (index == 0) {
                        strclass = "warning";
                    }
                    return { classes: strclass }
                }

  对于表格记录的获取,我们可以通过下面的代码进行获取:$table.bootstrapTable('getSelections')

var rows = $table.bootstrapTable('getSelections');
           if (rows.length > 0) {
               ID = rows[0].ID;
           }

 如果是多条记录的处理,例如删除记录

//实现删除数据的方法
        function Delete() {
            var ids = "";//得到用户选择的数据的ID
            var rows = $table.bootstrapTable('getSelections');
            for (var i = 0; i <p> 如果需要设置显示列显示,如下界面所示</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-8.png?x-oss-process=image/resize,p_40" class="lazy" alt=""></p><p>以及排序处理</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-9.png?x-oss-process=image/resize,p_40" class="lazy" alt=""></p><p>这些需要在JS代码开启相关的属性即可。</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-10.png?x-oss-process=image/resize,p_40" class="lazy" alt=""></p><p>还有就是一种CardView的卡片视图格式,如下所示。</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/6963891c8b828c775579d23bea64c194-1淺談Bootstrap-table的用法?x-oss-process=image/resize,p_40" class="lazy" alt=""></p><p>另外一种是父子表的展开明细的格式,如下所示</p><p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/024/6963891c8b828c775579d23bea64c194-12.png?x-oss-process=image/resize,p_40" class="lazy" alt=""></p><p> 以上就是bootstrap-table插件在我实际项目中的应用情况,基本上对JS各个属性的使用进行了一些介绍了,具体的应用我们可以参考它的文档,获取对应属性、方法、事件的详细说明,这样我们就可以更加详细的应用这个插件的各种功能了。</p><p> http://bootstrap-table.wenzhixin.net.cn/documentation/</p><p>PS:以上为转载内容,经过自己的梳理后重新发布,感谢原作者伍华聪,原文路径:https://www.cnblogs.com/wuhuacong/p/7284420.html</p><h2 id="四-怎么在Spring-MVC及SpringBoot项目中使用Bootstrap-table进行分页">四、怎么在Spring MVC及SpringBoot项目中使用Bootstrap-table进行分页?</h2><p id="前端代码块">话不多说,直接上代码。</p><p>前端代码块:</p><pre class="brush:php;toolbar:false">页面:  
   JS:   function initTable(){               $('#test-table').bootstrapTable({                   method: 'get',                   toolbar: '#toolbar',    //工具按钮用哪个容器                   striped: true,      //是否显示行间隔色                   cache: false,      //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)                   pagination: true,     //是否显示分页(*)                   sortable: false,      //是否启用排序                  sortOrder: "asc",     //排序方式                  pageNumber:,      //初始化加载第一页,默认第一页                  pageSize: ,      //每页的记录行数(*)                  pageList: [, , , ],  //可供选择的每页的行数(*)                  url: "/testProject/pagelist.json",//这个接口需要处理bootstrap table传递的固定参数                  queryParamsType:'', //默认值为 'limit' ,在默认情况下 传给服务端的参数为:offset,limit,sort                                      // 设置为 ''  在这种情况下传给服务器的参数为:pageSize,pageNumber                    //queryParams: queryParams,//前端调用服务时,会默认传递上边提到的参数,如果需要添加自定义参数,可以自定义一个函数返回请求参数                  sidePagination: "server",   //分页方式:client客户端分页,server服务端分页(*)                  //search: true,      //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大                  strictSearch: true,                  //showColumns: true,     //是否显示所有的列                  //showRefresh: true,     //是否显示刷新按钮                  minimumCountColumns: ,    //最少允许的列数                  clickToSelect: true,    //是否启用点击选中行                  searchOnEnterKey: true,                  columns: [{                      field: 'id',                      title: 'id',                      align: 'center'                  }, {                      field: 'testkey',                      title: '测试标识',                      align: 'center'                  }, {                      field: 'testname',                      title: '测试名字',                      align: 'center'                  },{                      field: 'id',                      title: '操作',                      align: 'center',                      formatter:function(value,row,index){                          //通过formatter可以自定义列显示的内容                          //value:当前field的值,即id                          //row:当前行的数据                          var a = '测试';                      }                   }],                  pagination:true              });

在前端通过请求获取table数据时,bootstrap table会默认拼一个 searchText的参数,来支持查询功能。

服务端代码:

@RequestMapping(value = "/page4list.json")
public void page4list(Integer pageSize, Integer pageNumber, String searchText, HttpServletRequest request,
            HttpServletResponse response) {

        //搜索框功能
        //当查询条件中包含中文时,get请求默认会使用ISO-8859-1编码请求参数,在服务端需要对其解码
        if (null != searchText) {
            try {
                searchText = new String(searchText.getBytes("ISO-8859-1"), "UTF-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //在service通过条件查询获取指定页的数据的list
        List<mwmsgtype> list = mwMsgQueueService.page4List(pageSize, pageNumber, searchText);
        //根据查询条件,获取符合查询条件的数据总量
        int total = mwMsgQueueService.queryCountBySearchText(searchText);
        //自己封装的数据返回类型,bootstrap-table要求服务器返回的json数据必须包含:totlal,rows两个节点
        PageResultForBootstrap page = new PageResultForBootstrap();
        page.setTotal(total);
        page.setRows(list);
        //page就是最终返回给客户端的数据结构,可以直接返回给前端

        //下边这段,只是我自己的代码有自定义的spring HandlerInterceptor处理返回值,可以忽略。
        request.setAttribute(Constants.pageResultData, page);

    }</mwmsgtype>

 完成上述代码,即可实现服务器端自动分页,bootstrap-table根据服务器端返回的total,以及table设定的pageSize,自动生成分页的页面元素,每次点击下一页或者指定页码,bootstrap-table会自动给参数pageNumber赋值,服务器返回指定页的数据。

如果发送的是post请求,因为bootstap table使用的是ajax方式获取数据,这时会将请求的content type默认设置为 text/plain,这样在服务端直接通过 @RequestParam参数映射是获取不到的。

这时就需要在bootstrap-table的参数列表中显式设置:

contentType: "application/x-www-form-urlencoded"

设置成form表单的形式,tomcat内部就会自动将requset payload中的数据部分解析放到request.getParameter()中,之后就可以直接通过@RequestParam映射参数获取

更多编程相关知识,请访问:编程视频!!

以上是淺談Bootstrap-table的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除
Bootstrap的目的:建立一致且有吸引力的網站Bootstrap的目的:建立一致且有吸引力的網站Apr 19, 2025 am 12:07 AM

Bootstrap的主要用途是幫助開發者快速構建響應式、移動優先的網站。其核心功能包括:1.響應式設計,通過網格系統實現不同設備的佈局調整;2.預定義組件,如導航欄和模態框,確保美觀和跨瀏覽器兼容性;3.支持自定義和擴展,使用Sass變量和mixins調整樣式。

Bootstrap與其他框架:比較概述Bootstrap與其他框架:比較概述Apr 18, 2025 am 12:06 AM

Bootstrap優於TailwindCSS、Foundation和Bulma,因為它易用且快速開發響應式網站。 1.Bootstrap提供豐富的預定義樣式和組件庫。 2.其CSS和JavaScript庫支持響應式設計和交互功能。 3.適合快速開發,但自定義樣式可能較複雜。

在React中集成引導樣式:方法和技術在React中集成引導樣式:方法和技術Apr 17, 2025 am 12:04 AM

在React項目中整合Bootstrap可以通過兩種方法:1)使用CDN引入,適合小型項目或快速原型設計;2)使用npm包管理器安裝,適用於需要深度定制的場景。通過這些方法,你可以在React中快速構建美觀且響應式的用戶界面。

React的引導:優勢和最佳實踐React的引導:優勢和最佳實踐Apr 16, 2025 am 12:17 AM

將Bootstrap集成到React項目中的優勢包括:1)快速開發,2)一致性和可維護性,3)響應式設計。通過直接引入CSS文件或使用React-Bootstrap庫,可以在React項目中高效使用Bootstrap的組件和样式。

Bootstrap:網絡框架的快速指南Bootstrap:網絡框架的快速指南Apr 15, 2025 am 12:10 AM

Bootstrap是由Twitter開發的框架,幫助快速搭建響應式、移動優先的網站和應用。 1.易用性和豐富組件庫使開發更快。 2.龐大社區提供支持和解決方案。 3.通過CDN引入並使用類名控製樣式,如創建響應式網格。 4.可自定義樣式和擴展組件。 5.優點包括快速開發和響應式設計,缺點是樣式一致性和學習曲線。

打破bootstrap:是什麼以及為什麼重要打破bootstrap:是什麼以及為什麼重要Apr 14, 2025 am 12:05 AM

Bootstrapisafree,開放式frameworkthatsimplifiesRessiveandMobile-firstwebsitedEvelvelopment.itofferspre-styledComponentsAndAgridSystem,流化inthiningthecreationofaesthethetshethetshetshetshetshetshetshetshetshetshethetshethet interpleaseansing和Runctinctionalwebdesigns。

Bootstrap:使網頁設計更容易Bootstrap:使網頁設計更容易Apr 13, 2025 am 12:10 AM

Bootstrap讓網頁設計更容易的原因是其預設組件、響應式設計和豐富的社區支持。 1)預設組件庫和样式讓開發者無需編寫複雜的CSS代碼;2)內置網格系統簡化了響應式佈局的創建;3)社區支持提供了豐富的資源和解決方案。

Bootstrap的影響:加速網絡開發Bootstrap的影響:加速網絡開發Apr 12, 2025 am 12:05 AM

Bootstrap加速了Web開發,通過提供預定義的樣式和組件,開發者可以快速搭建響應式網站。 1)它縮短了開發時間,例如在項目中幾天內完成基本佈局。 2)通過Sass變量和mixins,Bootstrap允許定製樣式以滿足特定需求。 3)使用CDN版本可以優化性能,提高加載速度。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器