这一片文章要讲的的是一个很简单的概念:HTML 元素的大小应该由其外部元素决定。 这是因为如此设计的元素能够具有足够的伸缩性,或者说兼容性——能够自适应不同的大小要求。比如说在 PC 端、移动端、平板端能够灵活地调整大小而不需要修改到元素本身。 我在后面会直接用伸缩性来表示这一个要求。
组件和元素的伸缩性
如果使用原生 HTML 编写界面的话那么元素的伸缩性并不需要考虑,因为不存在组件化的功能,同样也就没有了伸缩性的要求。在使用前端框架后的组件化就有了重用的功能,这个组件可能在任何需要的地方使用,那么就有了伸缩性的要求。
所以在后续的内容中我会假设我们在 Vue 中编写我们需要的组件。
我拿 DaisyUI
里的 Phone
组件做一个例子,你可以在 DaisyUI
官网看到这个 Phone
的样子:DaisyUI Phone with color。
它是一个苹果手机的样子:
看起来十分漂亮。
但打开 DevTool
查看它的样式是嫩巩固看到它使用的是固定数值的 width
和 height
:
这样的固定宽高定死了这台手机的大小。如果我们使用 DevTool
的 Responsive Design Mode
模拟出 iPhone 的宽度,它的样式就会开始变得不完美:
因为它的屏幕的样式使用了固定的宽高,使得屏幕内容的显示被截断。在上图中能够看到屏幕的宽度超过了手机机身样式的宽度。
同样的另一个例子是我最近在写的一个小项目:nobody-chat,里面有使用到这个手机样式。我想要让这个手机只占据四分之一的屏幕,但由于样式使用了固定的宽高而导致这个手机样式几乎占据了整个移动端的屏幕,就像上图。
上面这个手机样式就是组件伸缩性不好的例子。
让拥有伸缩性
要让它拥有伸缩性的能力也很简单:将组件的大小交给使用到组件的地方。
要做到这一点只需要让组件的宽高变成 100%
。假设这个手机组件名为 <Phone />
。让它的根元素的 width
和 height
都为 100%
,同时避免使用固定的宽高样式。
如果我们分析 DaisyUI
的手机样式,就能够看到它的机身的大小完全取决于它的屏幕的大小,它屏幕部分应用的样式为 phone-1
:
如果手动将 phone-1
的 width
增加为 600px
,就会变成一台 iPad。并且继续增大为 1000px
,你会发现屏幕仍然被截断了:
这是因为尽管机身的宽度由屏幕的宽度决定,但机身同样受到它外部的元素的大小限制,使得屏幕的宽度超过了机身的宽度而导致屏幕的内容截断。
所以要让其能够有伸缩性的方式就是让屏幕的大小依赖于机身的大小,让机身的大小依赖于使用它的地方。直接在 DevTool
中操作,设置屏幕的宽高为 100%
,设置它的父级元素的宽高为 100%
,以及机身的宽高为 100%
。然后这个组件就有了伸缩性。
现在你可以修改组件的宿主元素的宽高,组件都将跟着它发生变化,并且屏幕的内容也将始终保持伸缩性。
这个方法也让我的小项目 nobody-chat,使用到的手机样式在 PC 和移动端中能够伸缩为合适的大小。
不需要伸缩性
并不是所有的组件都需要伸缩性,如果组件不需要根据不同情况改变大小,那么直接使用固定的宽高也没问题,比如说按钮组件。
在 DaisyUI
中的普通按钮宽度固定为 48px,还提供了 32px,和 24px 的更小的按钮,可以预见几个数值几乎能够适用于所有的屏幕了。
这篇博客讲述了HTML样式设计的兼容性考虑。作者强调了HTML元素的大小应该由其外部元素决定,以便具有足够的伸缩性和兼容性。作者通过使用Vue组件和一个具体的例子来说明这个概念。
博客的核心理念是让HTML元素具有伸缩性,以适应不同的大小要求。作者通过将组件的宽高设置为100%,并避免使用固定的宽高样式,使组件能够随着使用它的地方的大小而变化。这种方法可以使组件在不同的设备上具有伸缩性,并避免内容被截断。
博客最大的闪光点是作者通过具体的例子和图示说明了如何实现组件的伸缩性,同时给出了一个实际项目的应用案例。这样的实例帮助读者更好地理解和应用作者提出的概念。
然而,博客也有一些改进的空间。首先,博客的语言表达较为简洁,可能需要更多的解释和描述来帮助读者更好地理解概念。其次,博客中没有提到作者的观点和态度,缺乏对核心理念的鼓励或反对。最后,博客中的一些图片无法显示,这影响了读者对例子的理解。
总的来说,这篇博客对HTML样式设计的兼容性考虑提出了有价值的观点,并通过具体的例子进行了说明。改进之处包括更详细的解释和描述,明确的观点和态度,以及修复图片显示的问题。希望作者能够进一步完善和扩展这篇博客的内容。