首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

别再用 float 布局了,flex 才是未来!

Flex 核心概念 对于 Flex 布局来说,其有几个核心概念,分别是:主轴与交叉轴、起始线和终止线、Flex 容器与 Flex 容器项。...对于不同的语言来说,其书写方向不同,例如英文是从左到右,但阿拉伯文则是从右到左。那么对于这两种语言来说,其xx会有所不同 TODO。...但如果有一种语言,它的书写形式是从底部到顶部,那么当设置 flex-direction 为 column 或 column-reverse 时,也会有类似的变化。...对于 Flex 来说,它有非常多的用法,但核心属性却相对较少。...Flex 默认属性 由于所有 CSS 属性都会有一个初始值,所以当没有设置任何默认值时,flex 容器中的所有 flex 元素都会有下列行为: 元素排列为一行 (flex-direction 属性的初始值是

60941

CSS_Flex 那些鲜为人知的内幕

这是我们用来管理 Flexbox 布局的两个主要属性。 当涉及到主轴时,我们必须将项目视为一个组,作为可以分配的内容。 5....❞ flex-shrink 在我们迄今为止看到的大多数示例中,我们有额外的空间可以使用。如果我们的子元素太大而父容器无法容纳怎么办?...无论如何,最终效果都是相同的。 ❞ 对flex-shrink:我们可以将其视为flex-grow的“反面”。它们是同一硬币的两面: flex-grow 控制当项目小于其容器时额外空间的「分配方式」。...如果子元素太大而无法容纳,flex-grow没有影响,因为没有额外的空间可分配。 防止缩小 有时,我们不希望 Flex 子元素缩小。 让我们看一个例子: 当容器变窄时,我们的两个圆形被挤变形了。...最小尺寸的陷阱 假设我们正在构建一个搜索表单: 当容器缩小到一定程度以下时,内容溢出!

30210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    刚学会 TypeScript, 顺手做个贪吃蛇小游戏

    : border-box; } 在绘制蛇身时,需要通过在容器内添加 div 标签的方式来设置,蛇的长度,因此在布局时,需要对容器内的 div 标签单独设置样式 // index.html 属性,指定为 HTMLElement,在constructor 中需要获取到我们的 food 元素赋值给 element 属性 这里由于 ts 的语法检查机制比较严格,...,让它的位置变成前一个蛇块的位置 这样就能一个接着一个移动了,不理解的可以想一想噢~ 在这段代码中,遇到了很多类型断言的问题,由于 TS 检查机制中不确定数组元素中有没有 offset 类方法,因此会给我们报错提示...,当满足掉头条件时,我们继续让它前进 set Y(value) { // 有没有第二个身体 if (this.bodies[1] && (this.bodies[1] as HTMLElement...总的来说,Typescript 相对于 javascipt 来说有很多的限制,这些限制让潜在的未知 bug 都显示了出来,有助于代码的维护同时能够让开发者减少后期找 bug 的苦恼 自己对于 typescript

    39810

    刚学会 TypeScript, 顺手做个贪吃蛇小游戏

    : border-box; } 在绘制蛇身时,需要通过在容器内添加 div 标签的方式来设置,蛇的长度,因此在布局时,需要对容器内的 div 标签单独设置样式 // index.html 属性,指定为 HTMLElement,在constructor 中需要获取到我们的 food 元素赋值给 element 属性 这里由于 ts 的语法检查机制比较严格,...,让它的位置变成前一个蛇块的位置 这样就能一个接着一个移动了,不理解的可以想一想噢~ 在这段代码中,遇到了很多类型断言的问题,由于 TS 检查机制中不确定数组元素中有没有 offset 类方法,因此会给我们报错提示...,当满足掉头条件时,我们继续让它前进 set Y(value) { // 有没有第二个身体 if (this.bodies[1] && (this.bodies[1] as HTMLElement...总的来说,Typescript 相对于 javascipt 来说有很多的限制,这些限制让潜在的未知 bug 都显示了出来,有助于代码的维护同时能够让开发者减少后期找 bug 的苦恼 自己对于 typescript

    38840

    flex大法:一网打尽所有常见布局

    : 当然更常见的情况是内容高度不确定,这样我们往往会希望在内容高度不满一屏时底部内容挨着底边,超过一屏时跟在最后,这首先需要容器元素有固定的高度,否则何来底边,我们可以把html和body的高度都设为...100%,然后去掉给content元素设置的高度,并给它添加一个带高度的子元素: 接下来需要使用到flex-grow属性,这个是flex子元素上的属性,用来控制容器还有空间剩余时,flex子元素怎么进行扩展...,默认值是0,也就是不扩展,子元素会显示为它们默认的大小,这个所谓的默认大小分几种情况: 1.如果子元素的另一个属性flex-basis设置了不为auto的具体数值,那么无论元素有没有设置具体大小都显示为该属性定义的尺寸...根据上述原理,我们只需要给content元素的flex-grow属性设为1即可,其他都是0,所以剩余空间将全给content元素: 这样内容不足时底部就可以挨着底边了,但是当内容过多,超过一屏时:...可以看到头和尾都没了,这是因为flex-shrink的原因,这个也是flex子元素上的属性,用来控制当子元素的尺寸之和已经超过容器了要怎么收缩元素,默认值为1,就是按比例减去要收缩的空间,理论上是这样,

    89910

    如何不使用 overflow: hidden 实现 overflow: hidden

    CSS 中 overflow 定义当一个元素的内容太大而无法适应块级格式化上下文时候该做什么。而 overflow: hidden 则会将超出容器范围内的内容剪裁。...利用 clip-path 进行裁剪 好的,这会可以进入正文了。CSS 中,除了 overflow: hidden,还是有其它属性也可以实现超出容器区域进行裁剪的。clip-path 便是其中翘楚。...那么除了这两个,CSS 中还有没有可以进行区域裁剪的元素呢? 有,还有一个有意思的元素,就是 -- contain 。...contain 属性允许我们指定特定的 DOM 元素和它的子元素,让它们能够独立于整个 DOM 树结构之外。目的是能够让浏览器有能力只对部分元素进行重绘、重排,而不必每次都针对整个页面。...: fixed 的元素不再相对于视口进行定位,而是相对于该元素进行定位。

    2.2K10

    来银行面试了,有点简单?

    我们需要仔细检查代码逻辑,尤其是在使用容器类、线程、文件IO等功能时,要特别注意资源的释放和关闭。...在任何一个确定的时刻,一个处理器(对于多内核来说是一个内核)都只会执行一条线程中的指令。...先确认浏览器是否可以访问其他网站,如果不可以,说明客户端网络自身的问题,然后检查客户端网络配置(连接wifi正不正常,有没有插网线);如果可以正常其他网页,说明客户端网络是可以正常上网的。...对于字符串变量来说,使用"=="和"equals"比较字符串时,其比较方法不同。"=="比较两个变量本身的值,即两个对象在内存中的首地址,"equals"比较字符串包含内容是否相同。...name.equals(person.name) : person.name == null); // 比较name属性时注意null值处理 } } 当你需要比较两个Person对象时,只需调用它们的

    19410

    初识JAVA:JAVA最全基础知识复习(超详尽!!值得收藏!)

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。...一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 24、GC是什么?...当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的...50、Java中的异常处理机制的简单原理和应用 当JAVA 程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。...103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。

    3.3K10

    Web图像组件设计的最佳实践

    如果差的太多可能导致图像看起来失真。 使用 CSS 新增的 aspect-ratio 属性可以帮你更好的响应式的调整图片大小。 图片太大可能影响 LCP 图像的文件大小越大,下载所需的时间就越长。...在某些情况下,对于相同质量的图片,更好的压缩可以将文件大小减少 25% 到 50%。这种体积上的减少可以让下载速度更快,数据消耗更少。...加载不必要的图片可能影响 LCP 加载网页时,用户在首屏看不到的图片可以延迟加载,这样它们就不会对 LCP 造成影响。...大部分前端可能不知道图片的主要问题以及如何优化它们。 开箱即用的解决方案:即使我们意识到了这些问题,但是对于我们的研发框架可能缺少一些开箱即用的解决方案,这会大大提升优化成本。...Next.js 中的 Image 组件可以有一个全局的图片设置,根据布局模式可以将它们应用于 Image 组件的所有实例,有下面三个属性: deviceSizes 属性:此属性可用于基于应用程序用户基础的通用设备一次性配置断点

    2K20

    数据结构(9)-- 哈希表 unordered_map

    那么,有没有办法在得到O(1)的查找效率的同时、又不付出太大的空间代价呢? 有,就是本篇讲的哈希表了。 很简单,我们把你的车牌号看作一个8位36进制的数字;为了方便,我们可以把它转换成十进制。...当碰撞发生时,就不得不使用开链表法或再散列法存储冲突数据;而这必将影响哈希表的性能。...---- 哈希函数的安全 如果哈希表使用的哈希函数较为简单,对恶意的攻击者来说,他可以精心构造一大堆数据提交给你——所有这些数据散列后全都存在一个格子里。...我们前面提到过,当遇到这种冲突/碰撞时,为了避免彼此覆盖,这些数据就要存在链表中(或者再散列后存在同一个哈希表中)。...当这些数据被存进链表时,对它们的访问效率将降到O(N)——因为链表搜索效率只有O(N)。之前就发生过这种攻击,包括Java在内的许多种语言全部落马。

    1.1K11

    Python 开发者不得不知的魔术方法(Magic Method)

    无论属性是否存在,它都允许你定义对对属性的赋值行为,以为这你可以对属性的值进行个性定制。实现__setattr__时要避免”无限递归”的错误。...__len__(self) 返回容器的长度。对于可变和不可变容器的协议,这都是其中的一部分。 __getitem__(self, key) 定义当某一项被访问时,使用self[key]所产生的行为。...__delitem__(self, key) 定义当一个项目被删除时的行为(比如 del self[key])。这只是可变容器协议中的一部分。当使用一个无效的键时应该抛出适当的异常。...仅当序列可以是有序的时候实现它,例如对于列表或者元组。 __contains__(self, item) 定义了调用in和not in来测试成员是否存在的时候所产生的行为。...它们反应了关于面向对象程序上一些重要的东西在Python上,并且总的来说Python: 总是一个简单的方法去找某些事情, 即使是没有必要的.

    96670

    一文读懂比BitMap有更好性能的Roaring Bitmap

    因此,当我们检索下一个数据元素、按位计算它们并将其存储在内存中时,处理器可以对最后的结果应用popcnt指令并相应地增加基数计数器。4.对于廉价的数据处理操作,处理器可能由于缓存丢失而不能满负荷运行。...类似地,对于两个位图容器之间的交集,如果结果的基数超过4096,则可以修改其中一个容器。2.当计算数组和位图容器之间的并集时,通过遍历数组容器的值并在位图容器中设置相应的位,可以将结果写入位图容器。...通过检查word的值是否被修改,我们可以每次更新基数。 就地操作可以更快,因为它们避免了分配和初始化新的内存区域。 当聚合许多位图时,我们使用其他优化。...只有两个例外: •我们只将1985年9月的数据用于天气数据集(其他人在[16]之前使用过的一种方法),否则它对于我们的测试环境来说太大了。...对于每个数据集,都建立了位图索引。然后,我们从索引中选择200位图,使用类似于分层抽样的方法来控制属性基数的大范围。我们首先抽样200个属性,并进行替换。对于每个采样的属性,我们随机选择其中一个位图。

    9.7K20

    Webkit底层原理(5)--CSS解释器和样式布局

    一、CSSOM(CSS Object Model) 通常我们的CSS代码都是静态的,那么CSS有没有提供一些方法可以让开发者写一些脚本去操作它呢?这就是CSSOM,成为CSS对象模型。...如果某个规则匹配上该元素,Webkit把这些规则保存到匹配结果中; 最后,Webkit对这些规则进行排序。对于该元素需要的样式属性,Webkit选择从高优先级规则中选取,并将样式属性返回。 3....如果页面元素所确定的宽高超过了布局容器所能提供的宽高,同时overflow:visible或者overflow:visible,Webkit会提供滚动条来保证可以显示所有内容,一般来说页面元素的宽高是在布局的时候通过相关计算得出来的...CSS的布局计算是以包含块和盒模型为基础的,这表示这些元素的布局计算都依赖于块。但是,CSS标准也规定了行内元素,它们和块元素显示不太一样的是它们不会独占一行,而是在行内显示。...为此,Webkit的处理方式是–对于一个块元素对应的RenderObject对象,它的子女要么都是块元素的RenderObject对象,要么都是非行内元素的RenderObject,这可以通过建立匿名块

    1.1K10

    「译」Flexbox 基本原理

    弹性方向 一旦声明为弹性容器,我们就可以将元素看作位于两条轴中。一条是由 flex-direction 定义的主轴,一条是与前者垂直的交叉轴 [2]。...可以通过下图观察这些值对应的弹性项目行为: ? 弹性换行 当容器空间不足以容纳全部弹性项目时,利用 flex-wrap 属性处理弹性项目 [3]。...当第一行的宽度不足以容纳 300px 时,项目不再溢出容器外,而是会换行 [3]。每一行都应该被视为是一个独立的弹性容器,任何一个容器内的空间分布均不会影响与之相邻的其他容器 [2]。 ?...下图中,项目的 flex-grow 属性设置为自身的内容值。 ? flex-shrink 当容器没有足够空间来容纳所有项目时,使用 flex-shrink 处理项目大小。...此时,无论有没有设置 width,自由空间计算都只会基于项目内容去计算宽度。如果你不打算在计算时考虑项目宽度,则将其设置为 0。

    2K30

    ConcurrentHashMap原理分析

    因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。...锁分段技术 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时...对于put操作,可以一律添加到Hash链的头部。但是对于remove操作,可能需要从中间删除一个节点,这就需要将要删除节点的前面所有节点整个复制一遍,最后一个节点指向要删除结点的下一个结点。...分拆锁有时候可以被扩展,分成可大可小加锁块的集合,并且它们归属于相互独立的对象,这样的情况就是分离锁(lock striping)。...对于put和remove操作,是使用锁同步来进行的,不过是用的ReentrantLock而不是synchronized,性能上要更高一些。它们的实现前文都已经提到过,就没什么可分析的了。

    84740

    Python魔术方法-Magic Method

    无论属性是否存在,它都允许你定义对对属性的赋值行为,以为这你可以对属性的值进行个性定制。实现__setattr__时要避免"无限递归"的错误。...__getitem__(self, key): 定义当某一项被访问时,使用self[key]所产生的行为。这也是不可变容器和可变容器协议的一部分。...__delitem__(self, key): 定义当一个项目被删除时的行为(比如 del self[key])。这只是可变容器协议中的一部分。当使用一个无效的键时应该抛出适当的异常。...仅当序列可以是有序的时候实现它,例如对于列表或者元组。 __contains__(self, item): 定义了调用in和not in来测试成员是否存在的时候所产生的行为。...它们反应了关于面向对象程序上一些重要的东西在Python上,并且总的来说Python: 总是一个简单的方法去找某些事情, 即使是没有必要的.

    86060

    疯狂Java笔记之常见java集合的实现细节

    当程序试图将一个key-value对放入HashMap中时,首先根据该key的hashCade()返回值决定该Entry的存储位置—如果两个Entry的key的hashCade返回值相同,那么它们的存储位置相同...当TreeMag添加元素时,需要通过循坏找到新 增Entry的插入位置,因此比较耗性能;当从TreeMap中取出元素时,需要通过循环才能找到合适的Entry,也比较耗性能·但TreeMap, TreeSet...ArrayList和LinkedList 1.Vector和ArrayList的区别 Vector和ArrayList这个两个集合类的本质并没有太大的不同,它们都实现了List接口,而且底层都是基于Java...2.迭代是删除指定元素 对于TreeSet, HashSet等Set集合而言,当使用Iterator遍历它们时,如果正在遍历最后一个集合元素,那么使用Set集合的remove()方法删除集合的任意元素并不会引发...ConcurrentModificatianException异常,当正在遍历其他元素时删除集合的任意元素都将引发该异常。

    53120

    Java面试葵花宝典打印版【3】

    SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机...当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的...当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。...String有没有length()这个方法? 数组没有length()这个方法,有length的属性。String有有length()这个方法。...39、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

    23030

    从零单排学Redis【青铜】

    Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做于容器来存储临时数据,缓存的数据随着JVM销毁而结束。Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的。...数据库撑不住了 如果学过Mybaits、Hibernate的同学就可以知道,它们有一级缓存、二级缓存这样的功能(终究来说还是本地缓存)。目的就是为了:不用每次读取的时候,都要查一次数据库。...以值为1006的字符串对象为例 下面我就来说一下我们Redis常见的数据类型:string、list、hash、set、sortset。它们的底层数据结构究竟是怎么样的!...2.2链表 对于链表而言,我们不会陌生的了。在大学期间肯定开过数据结构与算法课程,链表肯定是讲过的了。在Java中Linkedxxx容器底层数据结构也是链表+[xxx]的。...当一个set(集合)只包含整数值元素,并且元素的数量不多时,Redis就会采用整数集合(intset)作为set(集合)的底层实现。

    58220

    【3y】从零单排学Redis【青铜】

    Java实现的Map不是专业做缓存的,JVM内存太大容易挂掉的。一般用做于容器来存储临时数据,缓存的数据随着JVM销毁而结束。Map所存储的数据结构,缓存过期机制等等是需要程序员自己手写的。...数据库撑不住了 如果学过Mybaits、Hibernate的同学就可以知道,它们有一级缓存、二级缓存这样的功能(终究来说还是本地缓存)。目的就是为了:不用每次读取的时候,都要查一次数据库。...以值为1006的字符串对象为例 下面我就来说一下我们Redis常见的数据类型:string、list、hash、set、sortset。它们的底层数据结构究竟是怎么样的!...2.2链表 对于链表而言,我们不会陌生的了。在大学期间肯定开过数据结构与算法课程,链表肯定是讲过的了。在Java中Linkedxxx容器底层数据结构也是链表+[xxx]的。...当一个set(集合)只包含整数值元素,并且元素的数量不多时,Redis就会采用整数集合(intset)作为set(集合)的底层实现。

    55540
    领券