你真的熟悉background吗?

        一两个月没更新博客了,因为放假刚在深圳找了实习,一直都比较忙碌,不过我觉得再忙,还是需要时间去沉淀一些东西,工作的时候别人看到的只是你有没有实现最终的结果,但自己是否思考,是否去总结,决定着你工作是否轻松。基础不好的话,很多时候时间都花费在修复各种bug上了。所以思考总结很重要,做出好维护的代码才能让我们轻松走天下。找实习还是比较顺利的,有空可以分享下经验。好了,进入正题了,今天分享的是css中的background,平常我们用的都是些常见的属性,今天来看看一些不常用的,其实还是很有价值的。

      我们都知道background是一个复合属性,我们先来大概看看这些单一属性。

  • background-color
  • background-position
  • background-size
  • background-repeat
  • background-origin
  • background-clip
  • background-attachment
  • background-image

大部分其实都是比较简单的,今天主要分享下background-size,background-origin,background-clip。其他的可以自行查阅

1  background-size:水平方向 垂直方向,做移动端的时候经常需要用到这个。

属性值分别有:

1 设置具体的值 。background-size:100px 200px。你设置的多大  背景图片就有多大,当只设置一个值的时候高度会auto。

2 设置百分数 。background-size:100% 100% ,图片的宽高 会以容器的宽度为基准,来生成大小。当只设置一个值的时候,高度的值会默认为auto。但不一定会正好就等于图片的高度显示出来,我之前做一个移动端就是因为我设置的是background-size:100% ,后来发现背景图片的高度只显示了一部分,底部的就是看不到,但我们底部的背景又是需要展现出来的,后来改成background-size:100% 100%就好了。当然如果你的背景的重点不在下面。可以只写一个100%。

3 background-size: cover,这个就是不会考虑图片本身的比例,让图片能够把容器充满,所以很有可能图像只显示一部分,因此还是要根据你的需求来看。

如果你需要显示完整的图片,最好用background-size:100% 100%,如果图片的重点在上面,或者只显示一部分也没影响,可以用background-size:100% 和background-size: cover。

4 background-size: contain 把图像图像扩展至最大尺寸一直到。他们的宽度和高度都能接触到容器。

建议大家私下都动手试试,区别很明显。

2 background-clip以前很少用这个属性,最近看翻译成中文的《CSS揭秘》,发现它还是很有用的。这本书也不错,可以买来看看。

background-clip: border-box|padding-box|content-box;

有三种值,分别是什么呢,先跟着我来看一个例子,假设我们现在要做一个透明的边框。我们可能会这样写

   border: 10px solid rgba(0,0,0,0.2);
   width: 200px;
   height: 200px;
   background: #16ff00;
padding:10px;//测试需要

可是看效果,发现并不是我们想象中的样子,如下,我们会发现边框实际上是在背景上面的,这是什么原因呢?

这不是一个bug,而是本来就是这样子,CSS2中语法规定了背景的渲染模式。就是通过background-clip这个属性来规定的

1 默认值是border-box,意思就是背景是从边框开始绘制的,也就是背景的颜色会包括border+padding+content,(content指的是内容区域),所以下面的背景才包括了边框。

2 当设置值为padding-box的时候,背景会从padding开始绘制,也就是包括padding+content,

3 设置值为content-box,背景颜色就只包括content了。

OK,那如果我们想实现透明边框,就让背景不会从边框绘制就好了。如下,两个属性值都实现了,只是第二个背景只包括内容,所以中间的padding就不会有背景了。大家可以记住这个特性,以很可能会用到。

 

3 background-origin:这个属性呢,经常会与上面一个属性混淆,但其实不是一个东西,background-position这个属性大家都熟悉吧,规定背景显示的位置,但是位置总要有个标准来确定吧。这个标准呢,就是由background-origin这个属性来规定的,有下面三个值,原理跟上面是差不多。也有三个值。

padding-box:默认值。意思就是以padding开始为标准定位。

border-box:以padding开始为标准定位。

content-box:以内容区域为标准定位。

我们来看一个实际的效果,代码如下:

    width: 200px;
    height: 200px;
    background: url(li-ai-jun.png) no-repeat;
    padding: 25px;
    border: 10px dotted #000000;
    background-repeat: no-repeat;
    background-size: 100%;
如下,分别是默认情况,border-box,content-box等情况下的表现,应该一看就懂吧。至于平常能不能用到,就要看业务了。


好啦,今天的分享就到这里了,希望以后能分享更多的经验,最近也有一些朋友私信给我一些问题。有些可以解决,有些真的也是不太会,因为我也是用到什么研究什么,所以很多可能也无能为力,不过学到的,一定会用大白话分享出来。一起加油吧。

我是沐晴。不见不散。

 

转载于:https://www.cnblogs.com/moqing/p/5831244.html

<think>嗯,用户之前问过如何在Vue2和Element UI的el-main里做一个右侧侧边栏,我给了用Flex布局的解决方案。现在用户问的是“justify-content 能实现吗?”,这说明用户可能对Flex布局中的justify-content属性不太熟悉,或者想知道是否可以用这个属性来实现侧边栏的右侧定位。 首先,我需要确认用户的问题点。用户可能在使用Flex布局时,对如何排列子元素有疑问。他们可能尝试过使用justify-content来让侧边栏靠右,但发现效果不如预期,所以想知道是否可行。 接下来,我应该回忆Flex布局中justify-content的作用。这个属性主要用于在主轴上分配子元素之间的空间,比如水平方向(默认情况下)。而用户想要侧边栏在右侧,可能需要让主内容区占据剩余空间,侧边栏自然靠右。这时候,flex:1在内容区加上侧边栏固定宽度,其实已经可以达到效果,不需要justify-content。 但用户可能误解了主轴的方向,如果容器是flex-direction: row(默认),主轴是水平的,justify-content会影响水平排列。例如,如果侧边栏在内容区之后,设置justify-content: flex-end会让所有子元素靠右,导致内容区被压缩到右边,侧边栏紧贴其左,这显然不是用户想要的。 所以正确的做法应该是利用flex-grow让内容区自动填充剩余空间,这样侧边栏自然会在右侧。而justify-content在这里并不适用,因为它的作用是分配子元素之间的空间,而不是单个元素的定位。 另外,用户可能没有完全理解Flex布局中主轴和交叉轴的概念,这时候需要简单说明一下两者的区别,以及justify-content和align-items的不同作用。可能用户混淆了这两个属性,导致尝试错误的方法。 总结下来,回答应该明确说明justify-content不适合这个场景,并解释原因,同时对比正确的实现方法,即使用flex-grow或flex属性。还要给出代码示例,说明两者的区别,帮助用户理解为什么他们的尝试可能不成功,以及正确的做法是什么。 此外,用户可能是在尝试调整布局时遇到了问题,比如侧边栏没有靠右,或者内容区没有占据正确的位置。这时候需要指出常见的误区,并提供替代方案,比如margin-left: auto的方法,这也是Flex布局中常用的技巧,让元素靠右。 最后,确保回答清晰,结构合理,先回答问题是否可行,再解释原因,然后给出正确的方法,并附上示例代码,帮助用户巩固理解。同时提醒用户注意Flex容器的方向,以及子元素的排列顺序,避免其他潜在的问题。</think>在Flex布局中,`justify-content` **不能直接实现右侧侧边栏布局**。以下是详细说明和替代方案: --- ### ⚠️ `justify-content` 的局限性 1. **作用范围** `justify-content` 控制的是 **主轴方向** 的子项分布(默认主轴为水平方向),适用于多个子项的**整体分布控制**(如均匀分布、两端对齐等) 2. **不适配场景** 当需要实现「主内容区自适应 + 侧边栏固定右侧」时,`justify-content` 无法单独实现这种**非对称布局** --- ### ✅ 推荐实现方案(通过flex自动填充) ```html <div class="container"> <div class="main-content">主内容区(自动填充剩余宽度)</div> <div class="sidebar">右侧侧边栏(固定300px)</div> </div> <style> .container { display: flex; height: 100vh; } .main-content { flex: 1; /* 关键属性:自动填充剩余空间 */ background: #f0f0f0; } .sidebar { width: 300px; background: #ffffff; box-shadow: -2px 0 8px rgba(0,0,0,0.1); } </style> ``` --- ### 🔄 对比 `justify-content` 的不同表现 | 方案 | 代码 | 效果 | 是否适用场景 | |--------------------------|-----------------------------|---------------------------|------------------------| | 自动填充(推荐) | `flex: 1` + `width` | 主内容自适应,侧边栏固定右侧 | ✅ 单侧边栏布局 | | justify-content: flex-end| `justify-content: flex-end` | 所有子元素整体右对齐 | ❌ 导致主内容被压缩变形 | --- ### 🎯 如果坚持使用 `justify-content` 的替代方案 ```html <div class="container"> <div class="sidebar"></div> <div class="main-content"></div> </div> <style> .container { display: flex; justify-content: flex-end; /* 强制右对齐 */ } .main-content { width: calc(100% - 300px); /* 需要手动计算剩余宽度 */ } .sidebar { width: 300px; } </style> ``` ⚠️ 注意:这种方案需要: 1. 调整DOM元素顺序(侧边栏在前) 2. 手动计算主内容宽度 3. 灵活性较差,不推荐实际使用 --- ### 📚 关键知识总结 | 属性/方法 | 适用场景 | 实现原理 | |------------------------|-------------------------------|--------------------------| | `flex: 1` | 单侧边栏布局(推荐) | 自动填充剩余空间 | | `margin-left: auto` | 单个元素右对齐 | 通过自动外边距推动元素 | | `justify-content` | 多个子项的整体分布控制 | 控制主轴方向的空间分配 | --- ### 🛠️ 最佳实践建议 ```css /* 更健壮的实现方案 */ .container { display: flex; min-height: 100vh; /* 确保容器高度 */ } .main-content { flex: 1; order: 1; /* 通过order控制显示顺序 */ min-width: 0; /* 防止内容溢出 */ } .sidebar { order: 2; width: 300px; flex-shrink: 0; /* 禁止侧边栏收缩 */ } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值