响应式文字大小:CSS 根据容器的大小自动调整字体大小

在编写页面时,我们经常需要适应不同的屏幕尺寸,这导致容器的大小会发生变化。有时候,我们希望容器内的文字大小也能够自动调整。幸运的是,有一个属性可以帮助解决这个问题。

container-type 查询容器的大小
cqw cqh 根据容器的大小调整文字的大小

案例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 500px;
            height: 500px;
            resize: both; /* 设置容器可以在水平和垂直方向上调整大小。 */
            overflow: hidden;
            padding: 20px;
            background-color: #35dc54;
            container-type: size; /* 容器查询属性*/
        }
        p {
            font-size: 5cqw;
            text-align: center;
        }
    </style>
</head>
<body>
    <div>
        <p>Hello,Wrod!!!!</p>
    </div>
</body>
</html>

container-type 有三个常用值 分别是normal size inline-size

其中最为常用的是 inline-size 他的作用大致可以理解为 监听盒子的横向轴 如果横向轴的长度发生变化就会被监听到从而间接使页面发生改变
size 就是无论横向还是纵向 都可以监听到

cqw相对单位
相对单位有很多 比如vm vh % 等 那cqw是相对于谁的呢?
cqw会查询这个容器的宽度进行百分比的计算 这点有点类似于% 但是于%不同的是 文字大小是不支持%的 也就是说 font-size: 5%; 这样写的话是不生效的

与之一块的还有cqh 通过是高度进行计算

简单了解一下 容器查询和 cqw单位 这也就不难分析出
如果是 container-type的值是 inline-size的话 那么就只有cqw会生效 cqh也不是不能用 而是如果高度发生变化的话 这个监听器是监听不到的所以里面文字的大小不会发生改变
而如果是size的话就无所谓了 无论是宽度和高度变化 都可以查询到 这就取决于你是用cqw还是cqh了

当然 这篇文章的标题是控制文字的大小改变
如果你问:可不可以改变子盒子的大小呢?
答:当然可以,不但可以而且效果与%一模一样,所以 你为什么不用%呢。

关于container-type

mdn解释:

An element can be established as a query container for container size queries using the container-type CSS property. container-type is used to define the type of size containment used in a container query.

译文:
使用container-type CSS属性可以将元素设置为容器大小查询的查询容器。container-type用于定义容器查询中使用的大小约束类型。

Size containment turns off the ability of an element to get size information from its contents, which is important for container queries to avoid infinite loops. If this were not the case, a CSS rule inside a container query could change the content size, which in turn could make the query evaluate to false and change the parent element’s size, which in turn could change the content size and flip the query back to true, and so on.

The container size has to be set explicitly or by context — for example, block elements, flex containers, and grid containers stretching to the full width of their parent. If an explicit or contextual size is not available, elements with size containment will collapse.

译文:
大小包含(size containment)是指元素无法从其内容中获取大小信息的能力被关闭,这在容器查询中非常重要,以避免陷入无限循环。如果不关闭这个能力,容器查询中的CSS规则可能会改变内容的大小,进而导致查询结果为false,从而改变父元素的大小。而这又可能会影响内容的大小,使查询结果再次变为true,如此循环往复,形成无限循环。
为了避免这种情况发生,容器的大小必须明确地设置或通过上下文来确定。例如,块级元素、弹性容器和网格容器可以根据其父元素的宽度自动延伸至完整宽度。如果没有明确的或上下文的大小可用,具有大小包含的元素将会折叠,即不显示内容。

语法

/* Keyword values */
container-type: normal;/* 默认值。元素不是容器大小查询的查询容器,但仍然可以是容器样式查询的查询容器。 */
container-type: size;/* 将元素建立为容器大小查询的查询容器。容器大小查询可以应用布局约束、样式约束和大小约束。 */
container-type: inline-size;/* 将元素建立为容器的内联维度查询的查询容器。容器的内联维度查询可以应用布局、样式和内联大小约束。 */
/* Global Values */
container-type: inherit;/* 继承父元素的 container-type 属性值。 */
container-type: initial;/* 将 container-type 属性重置为默认值 normal。 */
container-type: revert;/* 恢复 container-type 属性的初始值或继承值。 */
container-type: revert-layer;/* 在CSS层叠上下文的范围内,恢复 container-type 属性的初始值或继承值。 */
container-type: unset;/* 将 container-type 属性重置为其自然值,如果没有自然值,则重置为初始值。 */

值:

size

Establishes a query container for container size queries in both the inline and block dimensions. Applies layout containment, style containment, and size containment to the container.
Size containment is applied to the element in both the inline and block directions. The size of the element can be computed in isolation, ignoring the child elements.

在内联和块维度上为容器大小查询建立一个查询容器。将布局约束、样式约束和大小约束应用于容器。
大小约束应用于元素的内联和块方向。可以独立计算元素的大小,忽略子元素。

inline-size

Establishes a query container for dimensional queries on the inline axis of the container. Applies layout, style, and inline-size containment to the element.
Inline size containment is applied to the element. The inline size of the element can be computed in isolation, ignoring the child elements.

在容器的内联轴上建立一个维度查询的查询容器。将布局、样式和内联大小约束应用于元素。
内联大小约束应用于元素。可以独立计算元素的内联大小,忽略子元素。

normal

The element is not a query container for any container size queries, but remains a query container for container style queries.

该元素不是任何容器大小查询的查询容器,但仍然是容器样式查询的查询容器。

对内联维度和块维度的解释

用于描述元素在页面布局中的不同方向的概念。
内联维度是元素在水平方向上的尺寸,通常是指元素的宽度。
块维度是元素在垂直方向上的尺寸,通常是指元素的高度。
在页面布局中,元素可以同时具有内联和块维度,用于确定元素在页面中的位置和大小。通过理解和使用这两个概念,可以更准确地控制元素在页面中的布局。

这个属性再开发的过程中是完全兼容所有的浏览器的 所以不需要有兼容性方面的顾虑
下面是MDN平台的原图
在这里插入图片描述

最后附上位于MDN的连接

https://developer.mozilla.org/en-US/docs/Web/CSS/container-type

  • 33
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用CSS来编写响应式导航,具体的CSS代码如下:nav {display: flex; width: 100%; font-size: 14px; box-sizing: border-box; justify-content: center; text-align: center;} ### 回答2: 要实现一个响应式导航栏,可以按照以下步骤进行编写: 1. 开始HTML代码的编写。在 `<body>` 标签内创建一个 `<nav>` 元素作为导航栏的容器。 2. 在 `<nav>` 元素内部创建一个无序列表 `<ul>` ,列表项为导航栏的菜单选项。 3. 在 `<ul>` 元素内部添加若干个 `<li>` 元素,每个元素代表一个菜单选项。可以根据需要添加更多菜单选项。 4. 在CSS样式中,为 `<nav>` 元素指定宽度和高度,可以使用 `width` 和 `height` 属性设置宽度和高度的数值。同时,使用 `text-align: center` 属性使导航栏中的文字居中。 5. 设置 `<ul>` 元素的 `display` 属性为 `flex`,并使用 `justify-content: center` 属性将菜单选项居中。使用 `padding` 属性增加菜单选项的间距。 6. 为 `<li>` 元素添加悬停效果和过渡动画等样式,提升用户体验。 7. 使用CSS媒体查询,根据设备的屏幕宽度来调整导航栏的显示方式和样式。例如,在较小的屏幕上,可以将导航栏改为垂直显示,并适当调整字体大小和间距等。 8. 最后,通过在HTML文件中引入CSS样式文件,将样式应用到导航栏上。 以上是一个简单的响应式导航栏的实现思路,可以根据具体需求和设计风格进行进一步的自定义和美化。 ### 回答3: 要编写一个响应式导航,可以采用以下的HTML和CSS代码: HTML代码: ```html <div class="navigation"> <ul> <li><a href="#">首页</a></li> <li><a href="#">关于我们</a></li> <li><a href="#">产品</a></li> <li><a href="#">联系我们</a></li> </ul> </div> ``` CSS代码: ```css .navigation { width: 100%; /* 设置导航的宽度为100% */ } .navigation ul { list-style-type: none; margin: 0; padding: 0; overflow: hidden; background-color: #f1f1f1; text-align: center; /* 文字居中 */ box-sizing: border-box; } .navigation li { display: inline-block; width: 25%; /* 设置每个导航项的宽度为25% */ } .navigation li a { display: block; padding: 10px 0; text-decoration: none; font-size: 16px; /* 设置字体大小为16像素 */ text-align: center; color: #333; } .navigation li a:hover { background-color: #ddd; color: #000; } ``` 通过设置导航容器的宽度为100%,导航项的宽度为25%,以及文字字体大小为16像素,可以实现一个有宽度、字体大小、盒子高度和文字居中的响应式导航。导航项采用inline-block布局,使得可以在容器的宽度有所变化时自动调整导航项的排列。通过:hover伪类,可以在鼠标悬停时改变导航项的背景颜色和文字颜色,以提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值