界面中的分割方式
在信息设计中,我们常常需要通过分割设计的方式来对信息进行分组,界面中的分割方式大致分为三种:卡片、线条、留白。
界面中的分割方式主要可以分为以下几种:
一、根据规则进行分割:
-
规则网格分割:
- 特点:采用均匀的网格布局,所有单元格大小相同,常用于展示相似内容(如表格)。
- 应用:数据展示、仪表盘、图标排列等。
from manim import *
class TableExamples01(Scene): # 定义一个名为 TableExamples01 的场景
def construct(self): # 定义场景中的构建过程
# 创建一个表格并设置其宽度和行列内容
t2 = Table(
[["This", "is a"], # 表格的内容
["simple", "Table."]],
row_labels=[Text("R1"), Text("R2")], # 行标签
col_labels=[Text("C1"), Text("C2")], # 列标签
top_left_entry=Text(" "), # 左上角的位置,留空
include_outer_lines=True, # 包含外部边框
arrange_in_grid_config={"cell_alignment": RIGHT}, # 单元格内容右对齐
)
# 将表格缩放至接近充满整个页面
#t2.scale(1.0) # 根据需要调整缩放比例,这里保持为1,不缩放
# 设置表格的尺寸
#t2.auto_scale() # 自动调整表格的尺寸
t2.set(width=12, height=6.8) # 设置表格的尺寸
# 获取第二行第二列单元格,并将其设置为红色
red_cell = t2.get_cell((2, 2), color=RED)
t2.add(red_cell)
# 高亮显示第一行第一列的单元格,颜色为黄色
t2.add_highlighted_cell((1, 1), color=YELLOW)
# 创建一个组并添加表格
g = Group(t2)
# 将表格居中摆放
g.move_to(ORIGIN)
self.add(g) # 在场景中添加组
运行结果
-
列式/行式分割:
- 特点:根据列或行的数量进行分割,适合于内容较多且有层级的情况。
- 应用:导航栏、菜单、内容展示区等。
行式:
from manim import *
import random
class TableExamples02(Scene): # 定义一个名为 TableExamples02 的场景
def construct(self): # 定义场景中的构建过程
self.camera.background_color = "#2F4F14"
# 随机文本列表
random_texts = [
"Cut Cell", "Copy Cell", "Paste Cell Below",
"Delete Cell", "Split Cell", "Merge Selected Cells",
"Merge Cell Above", "Merge Cell Below",
"Clear Cell Output", "Clear Outputs of All Cells",
"Enable Scrolling for Outputs", "Disable Scrolling for Outputs",
"Undo Cell Operation", "Redo Cell Operation",
"Restart Kernel...", "New Console for Notebook"
]
# 创建多条水平线和随机文本
for i in range(-8, 10, 1): # 从 -8 到 8,步长为 2
horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.5 * UP + i * DOWN)
self.add(horizontal_line) # 将每条线添加到场景中
# 随机选择一段文本
text = random.choice(random_texts)
text_mobject = Text(text, color=WHITE).next_to(horizontal_line, UP) # 将文本放在横线的上方
self.add(text_mobject) # 将文本添加到场景中
二、根据不规则进行分割:
-
自由形状分割:
- 特点:根据内容需求和设计风格,采用不规则的形状分割,通常具有创意性和个性化。
- 应用:艺术网站、社交媒体、创意作品展示等。
-
响应式分割:
- 特点:依据屏幕大小和用户行为动态调整分割方式,具有灵活性。
- 应用:移动端应用、响应式网站设计等。
from manim import *
class InfiniteLines01(Scene):
def construct(self):
# 设置背景颜色
self.camera.background_color = "#2F4F14"
# 创建无限横向线
horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP)
vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE)
# 创建文本并移动到横线的上方和竖线的左方的中间位置
t = Text("线性代数", font_size=36) # 设置字体大小
t.move_to(UP * 3.2 + LEFT * 3) # 调整位置到横线的上方和竖线的左方的中间
# 添加线条到场景
self.play(Create(horizontal_line))
self.play(Create(vertical_line))
# 添加文本到场景
self.play(Write(t))
self.wait(2)
运行结果:
不规则分割页面的布局:
实列1:
from manim import *
class InfiniteLines02(Scene):
def construct(self):
# 设置背景颜色
self.camera.background_color = "#2F4F14"
# 创建无限横向线
horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP)
vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE)
# 创建文本并移动到横线的上方和竖线的左方的中间位置
t = Text("线性代数", font_size=36)
t.move_to(UP * 3.2 + LEFT * 3)
# 添加线条到场景
self.play(Create(horizontal_line))
self.play(Create(vertical_line))
self.add(NumberPlane())
# 添加文本到场景
self.play(Write(t))
# 创建四个半径为1的圆
circles = []
for x, y in [(-3, 3), (3, 3), (-3, -3), (3, -3)]: # 定义每个圆心的位置
circle = Circle(radius=1, color=BLUE) # 创建圆
circle.move_to(RIGHT * x + UP * y) # 移动到指定位置
circles.append(circle) # 将圆添加到列表
# 添加圆到场景
for circle in circles:
self.play(Create(circle))
self.wait(2) # 保持场景2秒
实例2:
from manim import *
class InfiniteLines03(Scene):
def construct(self):
# 设置背景颜色
self.camera.background_color = "#2F4F14"
# 创建无限横向线
horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(2.8 * UP)
vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE)
# 创建文本并移动到横线的上方和竖线的左方的中间位置
t = Text("线性代数", font_size=36)
t.move_to([-3.505,3.5,0])
# 添加线条到场景
self.play(Create(horizontal_line))
self.play(Create(vertical_line))
# 添加文本到场景
self.play(Write(t))
self.add(NumberPlane())
# 计算每一块的中心点并绘制圆
centers = [(-3.505, 3.5), (3.505, 3.5), (-3.505, -0.5), (3.505, -0.5)] # 各块的中心点坐标
circles = []
for x, y in centers:
circle = Circle(radius=0.25, color=BLUE) # 创建半径为1的圆
circle.move_to(RIGHT * x + UP * y) # 移动到中心点
circles.append(circle) # 添加到圆的列表
# 添加所有圆到场景
for circle in circles:
self.play(Create(circle))
self.wait(2) # 保持场景2秒
三、有规则与不规则分割的特点比较:
-
有规则分割特点:
- 结构清晰,易于理解。
- 适合标准化内容展示,有助于用户快速获取信息。
-
不规则分割特点:
- 视觉吸引力强,能够突出特定内容。
- 提供更多的创造性,灵活性高,但可能会在信息传递上造成一定的混乱。
总的来说,选择分割方式时需根据界面的目标、用户需求和内容特性进行合理设计。
from manim import *
class SplitPage(Scene):
def construct(self):
self.camera.background_color = "#2F4F14"
# 创建无限横向线
horizontal_line = Line(start=LEFT * 8, end=RIGHT * 8, color=WHITE).shift(3 * UP)
vertical_line = Line(start=DOWN * 8, end=UP * 8, color=WHITE)
# 创建一个矩形代表页面
page = Rectangle(width=6, height=4, color=WHITE)
page.move_to(ORIGIN) # 将页面移动到正中心
# 显示页面和线
self.play(Create(horizontal_line))
self.play(Create(vertical_line))
self.play(Create(page))
# 将页面均匀分成两块
left_half = Rectangle(width=3, height=4, color=WHITE).move_to(LEFT * 1.5)
right_half = Rectangle(width=3, height=4, color=WHITE).move_to(RIGHT * 1.5)
# 显示分开的两块
self.add(right_half,left_half)
# 创建不规则的分割线,首先将右边的部分分割成三个不规则的部分
line1 = Line([3, -2, 0], [3, 2, 0], color=BLACK) # 垂直分割线
line2 = Line([3.5, -1.5, 0], [3.5, 1.5, 0], color=BLACK) # 另一条线
# 将分割线添加到场景中
self.play(Create(line1))
self.play(Create(line2))
# 创建右边的三个不规则部分
lower_shape = Polygon(
[3, -2, 0], [4, -1, 0], [3.5, -0.5, 0], color=YELLOW
).set_fill(YELLOW, opacity=0.5).scale(3)
upper_shape = Polygon(
[3, 2, 0], [4, 1, 0], [3.5, 0.5, 0], color=BLUE
).set_fill(BLUE, opacity=0.5).scale(3). shift(6*LEFT+2*DOWN)
# 将不规则部分添加到场景中
self.play(Create(lower_shape))
self.play(Create(upper_shape))
# 结束
self.wait(2)
# 要运行这个例子,请在终端中使用以下命令:
# manim -pql <你的文件名.py> SplitPage
%manim -qm -v WARNING SplitPage