HTML 表单元素的基本样式

标签: html表单样式大全  揭秘 CSS  

HTML 表单元素的基本样式

表单元素主要包括 label、input、textarea、select、datalist、******、progress、meter、output等,以及对表单元素进行分组的 fieldset 和 legend 元素。

根据功能的不同,input 元素又包括 text、password、radio、checkbod、file、submit、reset、search、tel、url、email、number、range、color、Date Pickers等类型。

由于规范只规定了表单元素的功能,并未规定它们的外观。因此,在不同浏览器下,表单元素的外观各不相同。

为了获得更好的用户体验,在所有浏览器下保持统一的风格,通常需要重新定义表单元素的外观,来覆盖浏览器的默认外观。

自定义外观时,元素类型不同,需要重新定义的内容也不尽相同。接下来,针对不同的表单元素,进行分别介绍。

input元素

在input 元素中,单行文本输入框、文件选择框、单选框和复选框、表单按钮在各浏览器下的外观差别较大,需要专门定义外观,来统一风格。

1)单行文本输入框

单行文本输入框,包括text、password、search、tel、url、email、number、Date Pickers,它们的作用是纯粹接受文本,这些文本信息或者由用户手工输入,或者在浏览器的弹出框中选择输入。

假设在一个用户登录界面上,包含一个 type="text" 和一个 type="password" 的文本输入框,分别用来输入用户名的密码:

  1. <form id="layer" action="" method="post">
  2. <p><label>用户名: </label><input type="text" name="username" /></p>
  3. <p><label>密&nbsp;&nbsp;码: </label><input type="password" name="password" />
  4. </form>

在外观上,单行文本输入框就是一个添加了边框的矩形区域,而不同浏览器下的默认尺寸、边框、背景等都不尽相同。如,在Google Chrome下的外观如图 7‑4 所示:

在chrome下的默认外观图7-4 在chrome下的默认外观

在IE8下的外观如图 7‑5 所示:

在IE 8下的默认外观图7-5 在IE 8下的默认外观

可以看出,不同浏览器下的差别很大,即便是相同浏览器的不同版本(如IE6、IE8),也可能有很大差别。因此,为了能够在所有浏览器下表现相同,需要重新定义框的宽度、高度、字体、文本、边框、背景等,来覆盖浏览器的默认外观。如:

  1. input[type="text"] ,
  2. input[type="password"]  {
  3.     width: 240px;
  4.     height: 28px;
  5.     color: #333;
  6.     font-size: 14px;
  7.     background: #fff;
  8.     border: 1px solid #cbcbcb;
  9. }

有时候,为了突显该文本输入框的作用,比如用户登录表单中,在用户名和密码的输入框中,通过背景图像来添加一个小图标,显得更人性化。设置背景图像后,需要为文本框设置相应的左内边距,来为图像腾出空间。

  1. input[type="text"],
  2. input[type="password"] {
  3.     padding-left: 34px;
  4. }
  5. input[type="text"] {
  6.     background: #fff url(user.gif) 10px center no-repeat;
  7. }
  8. input[type="password"] {
  9.     background: #fff url(pass.gif) 10px center no-repeat;
  10. }

运行结果如图 7‑6 所示:

添加图标图7-6 添加图标

在现代浏览器中,可以通过圆角和内部盒阴影,对文本输入框进行渐进式增强,使它看上去更美观,还能增加一点不错的立体效果。

  1. input[type="text"],
  2. input[type="password"] {
  3.     border-radius: 4px;
  4.     box-shadow: inset 2px 2px 4px #d9d9d9;
  5. }

运行结果如图 7‑7 所示:

添加圆角和内部盒阴影图7-7 添加圆角和内部盒阴影

如果在文本输入框获得焦点时,通过改变边框颜色,并在文本框的外面,添加一个淡淡的盒阴影,这样既能向用户作出反馈,又能增强用户体验。

由于大多数现代浏览器中,在文本输入框获得焦点时,都是通过改变文本框的轮廓颜色,来向用户作出反馈。如果不希望如此,可以把 outline 属性设置为 none,关闭此功能。

  1. input[type="text"]:focus,
  2. input[type="password"]:focus {
  3.     outline: none;
  4.     border: 1px solid #bbb;
  5.     box-shadow: 2px 2px 8px #b8b7b7;
  6. }

运行结果如图 7‑8 所示:

添加外部盒阴影图7-8 添加外部盒阴影

2)文件选择框

文件选择框与单行文本输入框不同,它有一个按钮,供用户选择文件。在不同的浏览器下,文件选择框的外观差别很大,情况稍微有点复杂。

在IE下,文件选择框表现为一个文本输入框和一个“浏览…”按钮。在用户未选择文件时,文本输入框的内容为空,用户选择文件后,文本输入框的内容为文件的绝对路径。如,在IE8下的默认外观如图 7‑9 所示:

文件选择框在IE下效果图7-9 文件选择框在IE下效果

并且,在IE的不同版本下,文件选择框的外观还稍有差别,IE6和IE7下,文本输入框是灰色背景,而IE8下是白色背景。因此,要在IE下获得一致的表现,就必须设置背景和边框的样式。

在Google Chrome浏览器下,它只有一个“选择文件”的按钮,而没有文本输入框。在用户未选择文件时,显示“未选择任何文件”字样,用户选择文件后,在按钮的右侧显示文件的名称。如图 7‑10 所示:

文件选择框在Chrome下效果图7-10 文件选择框在Chrome下效果

为了在所有浏览器下保持统一的风格,常常需要为一个表单中的文本输入框定义宽度、背景和边框:

  1. input {
  2.     width: 320px;
  3.     background: #fff;
  4.     border: 1px solid #94B6ED;
  5. }

当然,上述定义对所有的文本输入框均有效,包括文件选择框。然而,不同的浏览器,对文件选择框应用边框的方式却又不同。

IE浏览器,会为文本输入框和“浏览…”按钮应用相同的边框样式,互不影响。如图 7‑11 所示:

应用边框后在IE下效果图7-11 应用边框后在IE下效果

Google Chrome浏览器,会为“选择文件”按钮和右侧文本同时应用边框,边框出现在“选择文件”按钮和右侧文本的周围。如图 7‑12 所示:

应用边框后在Chrome下效果图7-12 应用边框后在Chrome下效果

当然,这个并不是真正想要的效果,我们希望Google Chrome下,仅仅在“选择文件”按钮周围出现边框。

此时,就可以借助CSS Hack技术中的 '\9',让边框只对IE有效。并使用 webkit 内核专有的 ::-webkit-file-upload-button 伪元素,来设置“选择文件”按钮的样式,使IE和Chrome的按钮风格保持一致:

  1. input {
  2.     width: 320px;
  3.     background: #fff;
  4.     border: 1px solid #7F9DB9\9;
  5. }
  6. ::-webkit-file-upload-button {
  7.     padding: 4px 14px;
  8.     background: #ECE9D8;
  9.     border: 1px solid #7F9DB9;
  10. }

经过上述处理后,在Google Chrome浏览器中的运行结果如图 7‑13 所示:

应用边框后在Chrome下效果图7-13 应用边框后在Chrome下效果

当然,这里只是提供了一种处理问题的思路,并不代表它就是最佳解决方案,显然这种处理方案只对 webkit 内核的浏览器有效,具有很大的局限性。

既然上述解决方案有很大的局限性,能否换一种思路,设计一个文件选择框,让它在任何浏览器下的表现完全一致呢?

答案是肯定的。既然大家已经习惯了IE的文件选择框,就可以在表单上包含一个文本框、一个 "浏览..." 按钮和一个文件框,通过文本框和 "浏览..." 按钮,来模拟文件框的外观,而文件框的功能保持不变,只是被隐藏起来了:

  1. <form action="" method="post" enctype="multipart/form-data">
  2.     <input type="text" id="text" />
  3.     <input type="button" value="浏览..." />
  4.     <input type="file" id="file" />
  5. </form>

首先,设置文本框和按钮的样式,来模仿文件框的外观,主要是设置其宽度和高度。为了兼容IE6和IE7,还需要设置背景和边框样式:

  1. input[type="text"]{
  2.     width: 180px;
  3.     height: 24px;
  4.     line-height: 24px;
  5.     background: #fff;
  6.     border: 1px solid #94B6ED;
  7. }
  8. input[type="button"]{
  9.     width: 70px;
  10.     height: 26px;
  11.     background: #ECE9D8;
  12.     border: 1px solid #94B6ED;
  13. }

然后,让文件选择框使用绝对定位(先要把 form 设置为相对定位),并控制它的尺寸,让它正好覆盖文本框和按钮,还要保证按两个钮正好对齐。再通过透明度,来隐藏文件选择框。这样,用户点击按钮或文本框(现代浏览器下),就等价于点击文件选择框,可以做到以假乱真了。

  1. form {
  2. position: relative;
  3. }
  4. input[type="file"]{
  5. top: 0;
  6. left: 0;
  7. position: absolute;
  8. width: 260px;
  9. height: 26px;
  10. filter: alpha(opacity:0);
  11. opacity: 0;
  12. }

使用这种技术设计出来的文件选择框,在任何浏览器下的外观都完全一致。如图 7‑14 所示:

应用边框后在Chrome下效果图7-14 应用边框后在Chrome下效果

不过,由于文件框被隐藏,在用户选择文件后,就不能清楚看到自己的选择。其实这也不难,只需少量的 Javascript 代码就可以实现。

当用户选择文件后,就会触发文件选择框的 onchange 事件,只需在该事件的处理函数中进行相应的处理即可。

如果是单文件选择框,就非常简单,由于它只能选择一个文件,只需根据 id 获取文件框的值,并将它显示在文本框中即可:

  1. <input type="file" onChange="text.value = this.value" />

在HTML5中,为文件选择框新增了 multiple 属性,支持选择多文件。如果是多文件选择框,可以通过一个函数,来遍历文件框的值,并显示在文本框中:

  1. <input type="file" onChange="text.value = getFiles(this.files)" multiple />

对于多文件选择框,当用户选择文件后,会将文件保存在 FileList 对象中,它是一个文件的列表,通过遍历该列表,就可以得到每个文件的信息。

  1. function getFiles(files) {
  2.     var strText = "";
  3.     for(var i = 0; i < files.length; i++) {
  4.         strText += files[i].name + ", ";
  5.     }
  6. return strText;
  7. }

上述函数中,通过遍历 FileList 对象,通过 name 属性得到每个文件的名称,并把它们用逗号连接起来。于是,用户选择文件后,文本框中就会显示用户所选择的文件列表。如图 7‑15 所示:

显示选择的文件列表图7-15 显示选择的文件列表

如果需要,还可以获取文件的大小(size)、类型(type)、最后修改日期(lastModifiedDate)等信息。

3)单选框和复选框

单选框和复选框本身很简单,但有一个问题,就是默认情况下,在所有的浏览器中,单选框和复选框都无法与旁边的文本对齐。如图 7‑16 所示:

单选框和复选框与文本未对齐图7-16 单选框和复选框与文本未对齐

导致这个问题的原因很复杂,限于篇幅,这里不进行深究,只给出解决方案。其实,这个问题的解决方案也很多,一个比较简单的解决方案,就是让单选框和复选框垂直居中对齐,再设置 -2px 的上外边距和 1px 的下外边距:

  1. input[type="radio"],
  2. input[type="checkbox"]  {
  3.     vertical-align: middle;
  4.     margin-top: -2px;
  5.     margin-bottom: 1px;
  6. }

经过上述处理之后,选择框与文本已经对齐,并且,在所有的浏览器中的表现基本相同。在IE下运行结果如图 7‑17 所示:

单选框和复选框与文本对齐图7-17 单选框和复选框与文本对齐

select元素

在表单元素中,下拉列表是最令人头疼的一个元素,因为它的外观非常丑陋,而许多样式对它又不生效。如,字体、文本颜色、边框、背景颜色等,都很容易进行美化处理。但是,任凭怎么美化,默认的下拉箭头始终保持不变,无法直接进行处理。

这个问题有多种解决方案,相对简单的解决方案是,用一个容器来包裹 select 元素。再为容器应用样式,来模拟下拉列表的样式。

在实际应用中,可以根据上下文需要来选择包裹 select 元素的容器。如果希望 select 元素独占一行,就用块级容器进行包裹;否则,就用行内级容器来包裹。这里以块级容器 div 为例进行说明:

  1. <div class="select">
  2. <select>
  3.     <option value="1">北京</option>
  4.     <option value="2">上海</option>
  5. </select>
  6. </div>

首先,设置容器的尺寸,再指定一个自定义的下拉箭头,作为容器的背景,并让它出现在预想的位置,以便能够遮盖 select 元素的默认下拉箭头。如果希望 select 元素在行内显示,还需要设置 display 属性。

  1. .select {
  2.     width: 240px;
  3.     height: 34px;
  4.     overflow: hidden;
  5.     background: #fff url(arrow_down.png) 220px center no-repeat;
  6. }

然后,通过 appearance 属性清除 select 元素的默认样式,并让背景透明,这是本方案的核心,也是最关键的一步。

再根据需要,设置 select 元素的尺寸、内边界、字体、背景、边框等属性。使用百分比设置尺寸的好处是,在修改容器尺寸时,不必修改 select 元素的样式,让布局更灵活、更独立,可以提高代码的可维护性。

  1. .select  select {
  2.     width: 100%;
  3.     height: 100%;
  4.     padding: 5px;
  5.     font-size: 14px;
  6.     background: transparent;
  7.     border: 1px solid #94B6ED;
  8.     -moz-appearance: none;
  9.     -webkit-appearance: none;
  10. }

经过上述处理后,下拉列表的运行效果如图 7‑18 所示:

下拉列表箭头效果图7-18 下拉列表箭头效果

当然,可以更进一步美化,当用户执行点击操作后,将向下的箭头动态改变为向上的箭头,使下拉列表更加人性化。这个功能只需简单的jQuery即可实现。

首先,定义一个类,它让容器使用向上的箭头作为背景图像。

  1. .selected {
  2.    background-image: url(arrow_up.png);
  3. }

然后,当jQuery检测到用户执行点击操作后,为容器添加 .selected 类,来改变箭头的方向。点击操作既可以由容器触发,也可以由下拉列表触发,根据实际情况进行选择。

  1. $(function() {
  2.     $(".select").click(function() {
  3.        $(".select").addClass("selected");
  4.     });
  5. });

上述这种直接书写代码的方式确实很方便,但它不利于代码的重用。如果把这个点击操作封装为一个函数,再为容器绑定单击事件的处理函数 οnclick="changArrow()" ,可以大大提高代码的重用性。

  1. function changArrow() {
  2.     $(".select").addClass("selected");
  3. }

而当鼠标移出容器时,需要删除 .selected 类,来恢复箭头的方向。同理,需要为容器绑定鼠标移出事件的处理函数

  1. onmouseout="removeArrow()"
  2. function removeArrow() {
  3.     $(".select").removeClass("selected");
  4. }

现在,下拉列表趋于完美了,用户点击后,会自动把向下的箭头改为向上的箭头,当鼠标移出时,再恢复箭头的方向。运行结果如图 7‑19 所示:

改变下拉列表箭头图7-19 改变下拉列表箭头

表单按钮

默认的按钮非常丑陋,并且不同浏览器下的外观又不尽相同。如果使用图像按钮,还需要向服务器请求图像,会增加服务器的额外负担。因此,使用原生的表单按钮,再使用纯CSS进行美化,才是最佳的选择。

HTML中,共有三类表单按钮,分别是提交按钮、重置按钮和普通按钮,无论哪种按钮,美化方法完全相同。

其实非常简单,首先设置按钮文本的颜色、字体,在通过 padding 属性文本在按钮中的位置,再根据上下文的风格,设置按钮的背景颜色。为了让按钮有一点立体感,可以增加一个边框,让边框跟背景使用相同色系,但颜色稍深一点:

  1. input[type="submit"] { 
  2.     color: #fef4e9;
  3.     font-size: 16px;
  4.     font-family: "Microsoft YaHei";
  5.     padding: .4em 2em .45em;
  6.     background: #f78d1d;
  7.     border: 1px solid #da7c0c;
  8. }

当鼠标悬停到按钮上时,通过改变背景颜色,来提醒用户:

  1. input[type="submit"]:hover {
  2.     background: #f47c20;
  3. }

上述按钮可以适应于所有的浏览器,并在所有浏览器下的表现完全相同。为了在现代浏览器下表现得更好,可以通过圆角、文本阴影,对按钮进行渐进式增强,并通过盒阴影和渐变背景,让按钮的立体感更加逼真:

  1. input[type="submit"] { 
  2.    
  3.     border-radius: 4px;
  4.     text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
  5.     box-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
  6.     background: linear-gradient(180deg, #faa51a, #f47a20);
  7. }

在Chrome浏览器下的运行效果如图 7‑20 所示:

表单按钮图7-20 表单按钮

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

                        <li class="tool-item tool-active is-like tool-clicked"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">2</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/ixygj197875">
                    <img src="https://profile.csdnimg.cn/4/E/E/3_ixygj197875" class="avatar_pic" username="ixygj197875">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/1x/5.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/ixygj197875" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">ixygj197875</a></span>
                                                    <span class="flag expert">
                                <a href="https://blog.csdn.net/home/help.html#classicfication" target="_blank">
                                    <svg class="icon" aria-hidden="true">
                                        <use xlink:href="#csdnc-blogexpert"></use>
                                    </svg>
                                    博客专家
                                </a>
                            </span>
                                            </div>
                    <div class="text"><span>发布了622 篇原创文章</span> · <span>获赞 219</span> · <span>访问量 96万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://bbs.csdn.net/forums/p-ixygj197875" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    </article>
    
版权声明:本文为qq_41973526原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41973526/article/details/103618460

智能推荐

JAVA环境变量配置

位置 计算机->属性->高级系统设置->环境变量 方式一 用户变量新建path 系统变量新建classpath 方式二 系统变量 新建JAVA_HOME,值为JDK路径 编辑path,前加 方式三 用户变量新建JAVA_HOME 此路径含lib、bin、jre等文件夹。后运行tomcat,eclipse等需此变量,故最好设。 用户变量编辑Path,前加 系统可在任何路径识别jav...

常用的伪类选择器

CSS选择器众多 CSS选择器及权重计算 最常用的莫过于类选择器,其它的相对用的就不会那么多了,当然属性选择器和为类选择器用的也会比较多,这里我们就常用的伪类选择器来讲一讲。 什么是伪类选择器? CSS伪类是用来添加一些选择器的特殊效果。 常用的为类选择器 状态伪类 我们中最常见的为类选择器就是a标签(链接)上的为类选择器。 当我们使用它们的时候,需要遵循一定的顺序问题,否则将可能出现bug 注意...

ButterKnife的使用介绍及原理探究(六)

前面分析了ButterKnife的源码,了解其实现原理,那么就将原理运用于实践吧。 github地址:       点击打开链接 一、自定义注解 这里为了便于理解,只提供BindView注解。 二、添加注解处理器 添加ViewInjectProcessor注解处理器,看代码, 这里分别实现了init、getSupportedAnnotationTypes、g...

1.写一个程序,提示输入两个字符串,然后进行比较,输出较小的字符串。考试复习题库1|要求:只能使用单字符比较操作。

1.写一个程序,提示输入两个字符串,然后进行比较,输出较小的字符串。 要求只能使用单字符比较操作。 参考代码: 实验结果截图:...

小demo:slideDown()实现二级菜单栏下拉效果

效果如下,鼠标经过显示隐藏的二级菜单栏 但是这样的时候会存在一个问题,就是鼠标快速不停移入移出会导致二级菜单栏闪屏现象,一般需要使用stop()来清除事件  ...

猜你喜欢

基于docker环境的mysql主从复制

1、安装docker 可以参考之前的博客,之前写过了~ 2、拉取mysql镜像 3、创建mysql01和mysql02实例 主: 从: 4、进入容器修改配置 1)修改主数据库配置 进入主数据库容器 切换到 etc/mysql/目录下 查看可以看到my.cnf文件,使用vim编辑器打开,但是需要提前安装 安装vim命令: 安装成功后,修改my.cnf文件 新增配置后的my.cnf: binlog 日...

机器学习算法之决策树

原文:http://www.jianshu.com/p/6eecdeee5012 决策树是一种简单高效并且具有强解释性的模型,广泛应用于数据分析领域。其本质是一颗由多个判断节点组成的树,如: 决策树 在使用模型进行预测时,根据输入参数依次在各个判断节点进行判断游走,最后到叶子节点即为预测结果。 如何构造决策树 决策树算法的核心是通过对数据的学习,选定判断节点,构造一颗合适的决策树。 假设我们从用户...

Netty实现一个简单的RPC框架

微服务 微服务通讯 API构建需要考虑的因素 通讯协议 文本协议或者二进制协议 支持的调用方式:单向、双向、Streaming API定义与声明 API容错、可伸缩性 RPC框架 REST http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm REST即Representational State Transf...

04-键值对操作(pair RDD)

前言 键值对(pair RDD)是Spark的一部分,与普通RDD具有相同的特性,却又拥有不同于普通RDD的一些特性和操作。 简单来pair RDD就是以key-value形式的RDD。 1 创建pair RDD 根据文本内容,以第一个单词作为键为例: map()函数需要设置key-value参数,如该例中:key=x.split(" ")[0], value=x。 2 pai...

高二&高一&初三模拟赛17 总结

蛋糕 题目描述 输入格式 一行两个整数 n 和 P, 意义如题面所示。 输出格式 一行一个整数, 表示有多少种切法。 输入样例 【样例一输入】 6 1000000007 【样例二输入】 20 572541752 输出样例 【样例一输出】 14 【样例二输出】 266161148 题解(卡特兰数+线性筛+快速幂) 题目看上去像个dp,设f[n]为n边形的答案,选一个三角形分割,将问题划分成两边,则f...