做者:Ahmad shaded 译者:前端小智 来源:sitepointcss
点赞再看,微信搜索 【大迁世界】 关注这个没有大厂背景,但有着一股向上积极心态人。本文
GitHub
github.com/qq449245884… 上已经收录,文章的已分类,也整理了不少个人文档,和教程资料。html
一般,咱们但愿限制元素相对于其父元素的宽度,同时使其具备动态性。所以,有一个基础宽度或高度的能力,使其扩展的基础上,可用的空间。好比说,咱们有一个按钮,它的宽度应该是最小的,不该该低于它的宽度。这就是最大和最小属性变得方便的地方。前端
在本文中,咱们将详细介绍CSS的最大和最小宽度和高度属性,并使用可能的用例和技巧详细解释每个属性。ios
首先要讨论的是与宽度相关的属性。咱们有min-width
和max-width
,它们中的每个都很重要,都有本身的用例。git
设置min-width
的值时,其好处在于防止width
属性使用的值变得小于min-width
的指定值。 请注意,min-width
的默认值是auto
,它解析为0
。github
让咱们举一个基本的例子来讲明这一点。web
咱们有一个按钮,里面有一个变化的文本。文本的范围可能从一个单词到多个单词。为了确保即便只有一个单词,它也有最小宽度,应该使用min-width
。浏览器
最小宽度为100px
,这样即便按钮的内容很短,好比Done
,或者只有一个图标,它仍然足够大,能够被注意到。在使用阿拉伯语等多语言网站时,这一点很是重要。 考虑如下来自Twitter的示例:bash
在之前的状况下,按钮上带有单词“تم”,表示完成。 按钮的宽度过小,所以在后面的案例中,我增长了它的最小宽度。微信
在内容较长的状况下,min-width
能够扩展按钮的宽度,而水平方向上的padding
应该被添加,以实现一个合适的外观按钮。
你们都说简历没项目写,我就帮你们找了一个项目,还附赠【搭建教程】。
在设置max-width
值时,它的好处在于防止width
属性使用的值超过max-width
的指定值。max-width
的默认值是none
。
max-width
的常见且简单的用例是将其与图像一块儿使用。 考虑如下示例:
图像比它的父元素大。经过使用max-width: 100%
,图像的宽度不会超过其父图像的宽度。若是图像比父图像小,则max-width: 100%
不会对图像产生实际影响,由于它比父图像小。
当min-width
和max-width
都用于一个元素时,它们中的哪个将覆盖另外一个?换句话说,哪一个优先级更高?
html
<div class="wrapper">
<div class="sub"></div>
</div>
复制代码
css
.sub {
width: 100px;
min-width: 50%;
max-width: 100%;
}
复制代码
初始width
值为100px
,并在其上加上min-width
和max-width
值。 结果是元素宽度未超过其包含的块/父元素的50%
。
除了最小和最大宽度属性外,咱们还具备与高度相同的属性。
设置min-height
的值时,其好处在于防止使用的height
属性值变得小于min-height
的指定值。 请注意,最小高度的默认值为auto
,它解析为0
。
咱们用一个简单的例子来演示一下。
咱们有一个带有描述文本的部分。目标是为section
设置一个最小高度,这样它就能够处理短或长内容。考虑下面的基本状况
.sub {
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
min-height: 100px;
color: #fff;
background: #3c78dB;
}
复制代码
最小高度为100px
,使用flexbox时,内容水平和垂直居中。 若是内容更长,会发生什么? 例如一段?
是的,你猜对了!section
的高度将展开以包含新内容。有了它,咱们就能够构建灵活的组件,并对其内容作出响应。
在设置max-height
值时,它的好处在于防止height
属性使用的值超过max-height
的指定值。注意,max-height
的默认值是none
。
考虑下面的示例,其中我为内容设置了max-height
。 可是,由于它大于指定的空间,因此会发生溢出。 所以,文本超出了其父边界。
你们都说简历没项目写,我就帮你们找了一个项目,还附赠【搭建教程】。
咱们将介绍min-width
,min-height
,max-width
和max-height
的一些常见和不常见的用例。
当有一个标签列表时,建议限制一个标签的最小宽度,这样若是它的内容很短,它的外观就不会受到影响。
经过具备这种灵活性,不管内容有多短,标签都将看起来不错。 可是,若是内容做者输入了一个很是长的标签名称,而他使用的内容管理系统没有标签的最大字符长度,将会发生什么状况呢? 咱们也可使用max-width
。
.c-tag {
display: inline-block;
min-width: 100px;
max-width: 250px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
/*Other styles*/
}
复制代码
经过使用max-width
,标签宽度将被限制为特定值。 可是,这还不够,标签名称应被截断。
对于按钮的最小值和最大值有不一样的用例,由于按钮组件有多种变体。考虑下面的图:
请注意,按钮的“Get”
宽度过小。 若是不设置最小宽度,则因为任何缘由而没有文本时,状况可能会变得更糟。 在这种状况下,设置最小宽度很重要。
flexbox
将最小宽度设置为零min-width
的默认值是auto
,它被计算为0
。当一个元素是一个flex
项时,min-width
的值不会计算为零。flex 项目的最小大小等于其内容的大小。
根据CSSWG:
默认状况下,
flex
项目不会缩小到它们的最小内容大小(最长单词或固定大小元素的长度)如下。要更改此设置,请设置min-width
或min-height
属性。
考虑下面的例子
这我的的名字有一个很长的单词,这致使了溢出和水平滚动。尽管如此,我仍是在标题中添加了下面的CSS来截断它
.c-person__name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
复制代码
因为title
是flex
项目,所以解决方案是重置min-width
并将其强制为零。
.c-person__name {
/*Other styles*/
min-width: 0;
}
复制代码
下面是修复后的样子
根据CSSWG:
在弹性项目的主轴上可见溢出的项目上,当在弹性项目的主轴
min-size
属性中指定时,指定自动最小尺寸。
意味着,将
overflow
设置为visible
值之外的值会致使min-width
被计算为0
,这解决了咱们不设置min-width: 0
的问题。
虽然与min-width
相比,这是一个不太常见的问题,可是它可能发生。 只是为了确认,问题与不能少于其内容的弹性项目有关。 结果min-height
值被设置为与内容同样长。
考虑如下示例:
用红色表示的文本应该在父文本中裁剪。由于面板主体是一个flex
项目,因此它的min-height
与它的内容相等。为了防止这种状况,咱们应该从新设置最小高度值。看看HTML和CSS是怎么样的。
HTML
<div class="c-panel">
<h2 class="c-panel__title"><!-- Title --></h2>
<div class="c-panel__body">
<div class="c-panel__content"><!-- Content --></div>
</div>
</div>
复制代码
CSS
.c-panel {
display: flex;
flex-direction: column;
height: 180px;
}
.c-panel__body {
min-height: 0;
}
.c-panel__content {
overflow-y: scroll;
height: 100%;
}
复制代码
经过向面板主体添加min-height: 0
,这将重置该属性,而且如今应该能够正常工做。
在某些状况下,咱们有一个最小宽度的元素,但同时,它没有最大宽度。这可能会致使组件太宽,而咱们并不想这样作。考虑如下示例
因为宽度是以像素为单位定义的,所以不能保证上面的方法适用于移动视口。为了解决这个问题,咱们可使用百分比来代替像素做为最小和最大属性。考虑下面这个具备article
主体的示例。
我为图像添加了如下CSS:
img {
min-width: 35%;
max-width: 70%;
}
复制代码
#### 页面包装器/容器
最经常使用的`max-width`用例之一是页面包装器或容器。经过向页面添加最大宽度,咱们能够确保内容对用户来讲是可读的、易于浏览的。
下面是一个包装器的例子,它是居中的,左右两边有水平的填充。
.wrapper {
max-width: 1170px;
padding-left: 16px;
padding-right: 16px;
margin-left: auto;
margin-right: auto;
}
复制代码
ch
单位ch
是一个相对于数字0的大小,1ch
就是数字 0
的宽度。如定义一个3ch
的宽度,那么就只能装下 3
个0
。
<!-- HTML代码 -->
<div>0000</div>
/* CSS代码 */
div {
width: 3ch;
background: powderblue;
}
复制代码
在前面的wrapper元素示例中,咱们能够利用ch
单元,由于它是一个article
主体。
.wrapper {
max-width: 70ch;
/* Other styles */
}
复制代码
在某些状况下,咱们面临着使手风琴或移动菜单具备意想不到的内容高度的挑战。在这种状况下,max-height
多是一个很好的解决方案。
请考虑如下示例:
单击菜单按钮后,菜单应随动画从上到下滑动。 若是没有固定的高度(不建议这样作),除非使用JavaScript,不然这是不可能的。 可是,对于max-height
,这是可能的。 想法是为高度添加一个较大的值,例如max-height:20rem
,可能没法达到,而后咱们可使用动画从max-height: 0
变换到max-height: 20rem
。
.c-nav {
max-height: 0;
overflow: hidden;
transition: 0.3s linear;
}
.c-nav.is-active {
max-height: 22rem;
}
复制代码
点击菜单按钮能够看到动画的运行。
通常来讲,我不喜欢给元素添加固定的高度。我以为这样作,会破坏流式布局的结构。但有些状况设置固定高度却颇有用。
考虑下面的例子,在这里咱们有一个设置了固定高度的hero
部分。
是,当内容较长时,它会溢出并离开hero
包装器,这可不太好。
为了预先解决这个问题,咱们可使用min-height
来代替height
。咱们能够用这种方式先解决问题,尽管这可能会致使页面看起来很奇怪,可是我认为应该首先防止内容管理系统(CMS)中发生这样的事情。这样,问题就解决了,看起来也不错。
内容溢出的问题不只在于内容是否大于固定的hero
高度。它能够发生在屏幕大小调整做为文本换行的结果。
若是改用min-height
,则上述状况根本不会发生。
你们都说简历没项目写,我就帮你们找了一个项目,还附赠【搭建教程】。
对于模态组件,它须要最小和最大宽度,以即可以适应移动设备到PC的屏幕上的适应。
思路1
.c-modal__body {
width: 600px;
max-width: 100%;
}
复制代码
思路2
.c-modal__body {
width: 100%;
max-width: 600px;
}
复制代码
对于我来讲,我更喜欢第二个思路,由于我只须要定义max-width: 600px
。modal
是一个<div>
元素,所以它已经具备其父元素的100%
宽度,对吗?
考虑下面为模态设计简化的测试案例。 请注意,若是可用视口空间不足,则宽度如何更改成其父级的100%
。
当一个网站的内容不够长,它但愿看到页脚粘到底部。让咱们用一个可视化的例子来更好地展现这一点。
请注意,页脚未粘贴在浏览器窗口的末尾。 那是由于内容不足以达到浏览器窗口高度的长度。 修复后,其外观应以下所示:
首先,将body
元素做为flexbox
容器,而后将其最小高度设置为视口高度的100%
。
为了使比例容器可以根据视口大小进行响应缩放,引入了padding hack。 如今,咱们能够经过组合CSS中的视口单位和最大宽度/高度来模仿相同的行为。
咱们有一个尺寸为644 * 1000
像素的图像。 为了使其流畅,咱们须要如下内容:
height
为视口宽度的100%乘以纵横比max-heigh
,该高度是容器的宽度乘以纵横比max-width
设置为等于容器宽度人才们的 【三连】 就是小智不断分享的最大动力,若是本篇博客有任何错误和建议,欢迎人才们留言,最后,谢谢你们的观看。
原文: www.impressivewebs.com/min-max-wid…
代码部署后可能存在的BUG无法实时知道,过后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给你们推荐一个好用的BUG监控工具 Fundebug。
文章每周持续更新,能够微信搜索 【大迁世界 】 第一时间阅读,回复 【福利】 有多份前端视频等着你,本文 GitHub github.com/qq449245884… 已经收录,欢迎Star。