漫谈CSS和页面布局

CSS详解漫谈 1 CSS介绍 HTML与CSS就是装修前后的区别 CSS是指层叠样式表 cascading style sheets 通过CSS可以让我们定义HTML元素如何显示(如何美丽的显示) CSS可以让我们原本HTML不能描述的效果,通过CSS描述出来(通过div) 通过CSS描述我们的html页面,可以让我们的页面更加漂亮,可以提高工作效率 HTML是创造世界,CSS是在创造世界的基础上让世界更加美丽 2 CSS与HTML结合方式 2.1 第一种方式 内联/行内样式 就是在我们的HTML标签上通过style属性 阅读详情

http://www.blogjava.net/youxia/archive/2006/12/26/90112.html点击打开链接

网上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位、浮动等概念;二是虽然避免了“表格套表格”的缺点,却带来了“div 套 div”的缺点,过量使用div标签;三是class过多,造成class灾难。

要正确使用css,对css的基本只是就不能够不了解。既然是漫谈,我这里就只讲四个方面,最后给出xkland项目作为实例。

一、CSS中的块模型

在CSS的定义中,有的html标签被浏览器当成一个块来显示,比如div、table、p、ul等等,我们称之为块元素;有的html标签被浏览器显示在文本行之类,如a、span、font等等,我们称之为行内元素。行内元素我这里就不讲了,只讲讲块元素的模型。

每一个块元素都可以分为context、padding、boder和margin几个部分,我们常说的宽和高,指的只是context的宽和高,padding代表内容和边框之间的填充,margin代表边框之外的空白,如下图:
22.JPG

这几个部分都是可以通过CSS进行指定的,当然,CSS还可以控制背景,因此,我们可以通过CSS来灵活控制我们页面的外观。

二、CSS中的文档流模型

所有的块元素在html文档中是按照它们出现在文档中的先后顺序排列的(当然,嵌套不在此列),每一个块都会另起一行。如下图:
23.JPG

他们对应的html如下:

< div  id ="div1" >div1 </ div >
< div  id ="div2" >div2 </ div >
< div  id ="div3" >div3 </ div >

为了定义他们的宽度、高度还有边框,我们定义如下的CSS:
#div1  {
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
}

#div2 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
}

#div3 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
}

三、CSS中的相对定位和绝对定位模型

在文档流中,每个块元素都会被安排到流中的一个位置,我们可以通过CSS中的定位属性来重新安排它的位置。定位分为相对定位和绝对定位,相对定位是相对于该块元素在文档流中的位置的,比如,我们可以使用相对定位把div2放到div1的右侧,CSS代码如下:
#div1  {
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
}

#div2 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    position
: relative;
    top
: -64px;
    left
: 204px;
}

#div3 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
}

下面是效果:
24.JPG

可以看到一个有趣的现象,那就是虽然我们把div2移走了,但是div1和div3中间还是有一个空间,说明相对定位的元素是会占据文档流空间的,这里的div2就是典型的“站着茅坑不拉屎”。

使用绝对定位也是可以把div2摆到div1的右边的,而且绝对定位是不会占据文档流空间的,如下图,div1和div3之间没有空白:
25.JPG

div2的CSS代码:
#div2  {
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    position
: absolute;
    top
: 15px;
    left
: 214px;
}


绝对定位是个好东西,可以把内容显示到页面上的任何位置,但是对于我们程序员来说,却不能使用太多的绝对定位,因为使用程序动态向div中添加内容,div的大小是不可知的,无法将每一个div的位置都定死。

四、CSS中的浮动和清除模型

在CSS中,最让人不好理解的应该算是float和clear意义了。float可以达到这样一个效果,就是本来应该一行一个的块元素,如果定义了float属性,则只要行的空间足够,它会跑别的float元素的屁股后面,而不再会单独占用一行,如下图:
26.JPG

这里把div2和div3都定义了为浮动,代码如下:

#div2  {
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    float
:left;
}

#div3 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    float
:left;
}

那什么情况下需要clear呢?这是因为float的元素和绝对定位的元素一样,也是不占用文档空间的,因此,如果我们把div2和div3都嵌套在div1中,并且把div2和div3都定义为浮动,那么由于它们不占用文档空间,所以作为父元素的div1不知道自动扩展大小,以至于显示出来div2和div3会跑到div1的外面,如下图:
27.JPG

下面是它们的html代码:
< div  id ="div1" >div1
< div  id ="div2" >div2 </ div >
< div  id ="div3" >div3 </ div >
</ div >

下面是它们的css代码:
#div1  {
    border
: 1px solid #000099;
    height
: 60px;
    width
: 450px;
    margin
:2px;
}

#div2 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    float
:left;
}

#div3 
{
    border
: 1px solid #000099;
    height
: 60px;
    width
: 200px;
    margin
:2px;
    float
:left;
}

因为float的元素不占用文档流空间,有时候被的元素还会重叠到float元素上,这里我就不举例了。

为了解决上面的问题,就需要在float之后的元素上面使用clear,在此例中,我们在div3后面加入一个空段落,并设置其为clear,如下:
< div  id ="div1" >div1
< div  id ="div2" >div2 </ div >
< div  id ="div3" >div3 </ div >
< p  class ="clear" ></ p >
</ div >

下面是新增加的空段落的CSS代码:
.clear {
    clear
:left;
}

效果图:
28.JPG

还是以我的xkland项目为例,来设计一个完整的页面吧。下面是我的welcome.jsp页面的布局图:
20.JPG

在这个页面中,我完全摆脱了“表格套表格”的模式,而且除了最上面一行在一个div里面显示logo、advertisment和appendix的div外,其它的地方没有div嵌套。尽量减少div嵌套的有力武器是理解div的意义,div代表division,是部分的意思,也就是说只有在确实没有标签能够作为一个部分的根元素的时候才需要div。在上面的例子中,菜单条就没有使用div。菜单条是使用列表实现的,因为列表的都包含在ul标签中,因此没有必要使用div。下面是上图的html代码:
< body >
< div  id ="header" >
   < div  id ="logo" >此处显示 id "logo" 的内容 </ div >
   < div  id ="appendix" >此处显示 id "appendix" 的内容 </ div >
   < div  id ="advertisment" >此处显示 id "advertisment" 的内容 </ div >
</ div >
< ul  id ="menu" >
   < li >菜单项一 </ li >
   < li >菜单项二 </ li >
   < li >菜单项三 </ li >
   < li  class ="lastMenuItem" >最后一个菜单项 </ li >
</ ul >
< div  id ="loginView" >此处显示 id "loginView" 的内容 </ div >
< div  id ="catalog" >此处显示 id "catalog" 的内容 </ div >
< div  id ="search" >此处显示 id "search" 的内容 </ div >
< div  id ="newTopics" >此处显示 id "newTopics" 的内容 </ div >
< div  id ="newReply" >此处显示 id "newReply" 的内容 </ div >
< div  id ="hotTopics" >此处显示 id "hotTopics" 的内容 </ div >
< div  id ="statistics" >此处显示 id "statistics" 的内容 </ div >
< div  id ="hotGroups" >此处显示 id "hotGroups" 的内容 </ div >
< div  id ="hotUsers" >此处显示 id "hotUsers" 的内容 </ div >
< div  id ="footer" >此处显示 id "footer" 的内容 </ div >
</ body >

是不是很简洁?

而关于页面美化和布局的内容,全部转移到了CSS中。先来说说菜单项,菜单项是使用列表实现的,而列表常规的显示样式是下面这样的:
19.JPG

怎么样才能让它们显示到一行呢?那就是我前面讲到的float属性。我们给id为menu的ul定义如下样式,来显示边框:
#menu  {
    border
: 1px solid #0F54C3;
    padding
:5px;
    margin
:0px;
    width
:804px;
    margin
:1px 0px;
    height
: 12px;
}

为了避免前面讲到的float元素跑到边框之外,我这里没有使用clear,而是将menu的height属性定义为12px,和页面上的字体等高,而菜单只有一行,因此不会跑到边框之外。menu中的每一个菜单项都是一个li,我们可以通过#menu li { }来定义它的样式,这种方式叫做后代选择器,充分使用这种选择器,是避免使用过多的类的有力武器,从前面的html代码中可以看出,我只对最后一个菜单项定义了类,因为我不想最后一个菜单后面还跟一个小竖线,菜单项之间的小竖线是通过定义li的右边框样式做到的,其css代码如下:
#menu li  {
    float
:left;
    padding-left
:10px;
    padding-right
:10px;
    border-right-width
: 1px;
    border-right-style
: solid;
    border-right-color
: #0F54C3;
}

#menu .lastMenuItem 
{
    border-right-style
:none;
}


对于下面那么多的框框,除了#netTopics我使用绝对定位把它摆到了右边作为主要内容区之外,其它的都是顺着文档流摆下来的,只定义了宽度,而不需要定义位置。

如果我们要美化页面,比如添加网站特有的图片,我们可以修改#logo、#advertisment、#appendix的css代码,甚至当以后别人美化我的网站时,可以把这三个div的visible设置为false,而直接定义#header的样式。在这里,我们只简单的把#logo的背景设置为logo图片,并去掉边框。下面是css代码:

#logo  {
    float
:left;
    height
: 60px;
    width
: 200px;
    background
:url(../images/xkland_logo.gif) no-repeat left top;
}


对于其他的div,我们还需要为它们添加内容,#loginView这个稍微特殊一点,需要添加标题和表单,而其他的div就简单得多,只需要标题和列表就够了。这里我们以#loginView为例,下面是添加内容之后的效果:
21.JPG

别看这里面布局也挺复杂的,我也完全没有使用表格。下面是html代码:

< div  id ="loginView" >
   < h3 >用户登录 </ h3 >
< form  name ="form1"  id ="form1"  method ="post"  action ="" >
   < p >用户名:
       < input  class ="textInput"  name ="userName"  type ="text"  id ="userName"   />
   </ p >
   < p >密 码: 
     < input  class ="textInput"  name ="password"  type ="password"  id ="password"   />
   </ p >
   < ul >
       < li >忘记密码? </ li >
       < li >新用户注册 </ li >
       < li >< input  type ="checkbox"  name ="checkbox"  value ="checkbox"   />记住我 </ li >
   </ ul >
   < p  class ="clear" >
   < input  type ="submit"  name ="Submit"  value ="登 录"   />
   </ p >
</ form >
</ div >

可以看到,我使用的h3标签来作为标题,这样避免了为标题另外嵌套一个div,对输入文本框定义了类textInput来定义它们的样式,而其他的文本内容,我都是使用了p标签和ul、li标签,从上面的效果图就可以看出CSS的强大。下面是它们的css代码:
#loginView  {
    border
: 1px solid #0F54C3;
    width
: 280px;
    margin
:1px 0px;
}

h3 
{
    border-bottom-width
: 2px;
    border-bottom-style
: solid;
    border-bottom-color
: #0F54C3;
    padding-top
: 5px;
    padding-right
: 5px;
    padding-bottom
: 5px;
    padding-left
: 15px;
    margin
: 0px;
    font-size
: 10.5pt;
}

#loginView p 
{
    margin
:3px;
    text-align
:center;
}

#loginView form 
{
    margin
:0px;
}

.textInput 
{
    border
: 1px solid #CCCCCC;
    width
: 15em;
    height
:12px;
}

#loginView ul 
{
    margin
:8px 10px 3px 10px;
}

#loginView ul li 
{
    float
: left;
    width
: 130px;
    height
:18px;
}

.clear 
{
    clear
: left;
}

总之,使用CSS将程序和美工分离是绝对的真理,我们程序员只要能够在框框内输出正确的数据就够了,这样能够尽量减少程序的bug,美化页面的事就让界面设计师去做吧。当然,我们程序员还是要能够在html中设计正确的division划分和嵌套,让界面设计师在设计界面的时候能够找到定义CSS的锚点。

最后提一下,如果你的公司附近有几所大学的话,那么恭喜你,你只需要设置少量的奖金举办一个什么CSS设计大赛,那么你的网站就有成十上百的界面可用,何乐而不为呢?


Dinic算法的复杂度分析及证明 一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O... 阅读详情

相关推荐

Jenkins离线安装保姆级教程:从下载.war包到SVN+Maven项目一键部署(附避坑脚本)

本文详细介绍了Jenkins离线安装的全流程,包括.war包下载、SVN+Maven项目配置及自动化部署。特别针对内网环境提供解决方案,涵盖插件管理、开发工具链配置、构建触发器和SSH部署等关键步骤,帮助企业在网络隔离环境下实现高效持续集成。

weixin_30096975的博客 375

CSS和页面布局

网上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位、浮动等概念;二是虽然避免了“表格套表格”的缺点,却带来了“div 套 div”的缺点,过量使用div标签;三是class过多,造成class灾难。要正确使用css,对css的基本只是就不能够不了解。既然是漫谈,我这里就只讲四个方面,最后给出xkland项目作为实例。一、CSS中

Sonic 的技术博客 2387

Hermes深入理解及源码解析(二):Hermes的记忆机制

源码位置:tools/memory_tool.py存储内容为两个文件,放在 ~/.hermes/memories/:MEMORY.md:Agent 自己的笔记(环境事实、项目约定、工具坑、学到的东西)—— 上限 2200 字符USER.md:关于用户的画像(角色、偏好、沟通风格)—— 上限 1375 字符作为一个独立的工具注册在系统中(为了让智能体正确使用它,System Prompt()中明确下达了禁令存储目标存储位置数据类型持久偏好/事实MEMORY.md我是谁、我喜欢什么、环境配置。

qq_41984117的博客 561

div元素定位的五种方法及其区别

方法一:默认定位,也就是静态定位,不需要设置定位属性 方法二:固定定位,相对于视口区进行定位。 position:fiexd 区别: 固定在视口区的某一位置, 原先位置不保留,会被后面的元素占有, 如果没有设置定位属性,在原来位置定位。 方法三:相对定位,相对于它自己原来的位置进行定位。 position: relative; 区别:有定位属性时,原先位置保留,不会被后面的元素占有,不脱离文档流;没有定位属性时,默认在当前位置。 方法四:绝对定位,相对于离它最近的定位祖先元素进行定位。 positi

cflsh的博客 9769

C语言入门—初识C语言

一、C语言概述 1、什么是C语言 语言是用来交流沟通的,有一方说,有一方听。必须要两方参与。(自言自语的除外) 语言是人与人交流,而C语言是人与机器交流 语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。 接下来首先了解下计算机的组成: 2、计算机介绍 2.1、计算机结构组成 2.2、计算机系统组成 2.3、程序的指令 指令是对计算机进行程序控制的最小单元 计算机的指令系统是指所有指令的集合 程序是指为完成某一项特定任务而用某种言语编写的一组指令序列 3、C语言发展历程 3.

jun319817的博客 1036

Boost电路双闭环控制MATLAB仿真

通过电流内环控制,我们可以改变目标平均电流基准值的大小来闭环改变占空比,再改变输出电压与电路电流,直到电路电流达到基准电流才达到稳态。但是我们的基准电流依旧是外部提供的,下边的电压外环控制就是电路自己计算基准电流。

Fourglsl的博客 5847

CSS定位

CSS定位 CSS浮动 1,CSS定位: 改变元素在页面上的位置 2,CSS定位机制 普通流:元素按照其在HTML中的位置顺序决定布局的过程。 浮动 绝对布局 3,CSS定位属性: 1、CSS position属性 static relative absolute fixed

Leemin_ios的博客 622

半导体测试(一)

探针台是一种用于在晶圆上进行配合探针卡进行电路量测的设备,在测试过程中,探针工作站会将探针与晶圆上的每个die进行接触,以进行电性测量。在这个过程中,每个die都被测试以确保它能基本满足器件的特征或设计规格书(Specification),通常包括电压、电流、时序和功能的验证。晶圆是一个圆形的硅片,在这个半导体的基础之上,建立了许多独立的单个的电路;在所有的die都被探测(Probed)之后,晶圆被切割成独立的dice,这就是常说的die saw,所有被标示为失效的die都被报废,。

m0_37606066的博客 8434

div的定位

一、DIV定位 1、绝对定位 2、相对定位 3、默认定位 二、绝对定位 1、position:absolute 2、toop、bottom、left、right 3、当多个div在同一位置时,显示那个层由zindex的值决定 三、相对定位 1、position:relative 2、相对于正常位置的top、bottom、left、right ...

m0_46170663的博客 1453

AI赋能合同审查:构建租赁合同智能审核系统的全流程解析

在商业地产、设备租赁等场景中,合同审核效率直接影响业务流转速度。传统人工审核存在三大痛点:审核周期长(平均2-3个工作日)、合规风险高(条款遗漏率约15%)、人力成本居高不下。智能审核系统可将审核时间压缩至秒级,风险识别准确率提升至98%以上。

理论都是虚的,代码才是王道。 1356

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 286

Css的4种定位

css定位

m0_62648436的博客 3802

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 379

SpringSide开发实战(三):漫谈CSS和页面布局

     摘要:  阅读全文。海边沫沫 2006-12-26 15:13 发表评论

Pump Liu 215

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java在菜单的布局实例_SpringSide开发实战(三):漫谈CSS和页面布局

#re: SpringSide开发实战(三):漫谈CSS和页面布局回复更多评论2006-12-27 11:13 by 海边沫沫完整的CSS代码如下:body,td,th {font-size: 12px;color: #0f54c3;}body {margin-left: 5px;margin-top: 10px;margin-right: 10px;margin-bottom: 5px...

weixin_30709179的博客 138

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

写出HTML标准页面结构,Web标准网页布局中HTML结构化漫谈

WEB标准网页布局中HTML结构化漫谈您正在学习WEB标准CSS网页布局吗?是不是还不能完全掌握纯CSS布局?通常有两种需要您特别注意:第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。另一种原因是你对那些非常熟悉的表现层属性束手无策。例如:cellpadding,、...

weixin_31508009的博客 269

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

漫谈css布局

写一篇文章,难免要为之命名,所谓名不正,则言不顺;言不顺,则事不成。这篇文章是要说明一下CSS中的布局,实为入门之法矣。 本想命名为“布局说”的,但是总感觉题目太大,被大神们看到难免沦为笑柄,思来想去,便命名为“初窥CSS布局”。 不管是写一个html页面,还是打算建一个网站,首先应该想的是怎么为之布局,这是常常让我头疼的事情,不知,这是否也曾困扰着 足下?您是怎么为页面布局的呢?是否有为页

柯烽博客 643

前端三件套系列漫谈(2)--HTML和CSS

html是一种用于定义内容结构的标记语言,用来定义内容的结构和骨架,比如标题、正文等语义化结构。核心特点是平台无关性(无需针对特定平台进行修改)和语义化。

喵喵喵? 793

xhtml+css布局漫谈1

1.css布局常用的方法: 引用内容float : none left right取值:none : 默认值。对象不飘浮 left : 文本流向对象的右边 right : 文本流向对象的左边它是怎样工作的,看个一行两列的例子xhtml: view plaincopy to clipboardprint?div id="warp">  div id="column1">这里是第一列div>  

151

漫谈CSS之盒子模型

Css盒模型 css中最讨厌的莫过于盒模型了,一定要把盒模型搞明白 关于页面布局的两种属性: (1)浮动float (2)定位浮动浮动布局示例

Daisy花园 847

CSS中DIV定位

网上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位、浮动等概念;二是虽然避免了“表格套表格”的缺点,却带来了“div 套 div”的缺点,过量使用div标签;三是class 网上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位、浮动等概念;

null 924

【前端基础】HTML + CSS + JavaScript 快速入门(二):CSS 详解

本文是CSS入门教程的第二部分,详细讲解CSS的核心概念和应用。文章首先介绍CSS的作用(美化页面和布局),然后讲解基本语法规范(选择器+声明块)。重点说明三种CSS引入方式(内部样式表、内联样式、外部样式表)及适用场景,推荐使用外部样式表实现结构与表现分离。随后系统介绍各类选择器(基础选择器、复合选择器)和常用样式属性(字体、文本、背景)。最后简要提及盒子模型的概念(内容、内边距、边框、外边距)。全文通过代码示例和对比说明,帮助读者快速掌握CSS的基础知识和实用技巧。

寻星探路的测试技术博客!!! 2219

css 漫谈 – 原理与经验之分享

本文转载自:shipinbobo.com (视频播播) 中山装修网 中山装饰网 中山装修公司 置业中山 中山二手房 中山楼盘 中山房产 中山租房 要说css会的人很多,因为简单方便。只要你熟悉一些基本的属性基本上布局一个页面是没有太大的困难的。不过很多人用了很久的c...

weixin_33777877的博客 257
上一篇: Web 研发模式演变
下一篇: 高仿360云盘android端的UI实现
起风啰
博客等级 码龄16年 30粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值