vue的自适应布局(%)

目录

1. px与视口
2. %
3. 媒体查询
4. rem
5. vm/vh

一. 百分比

当浏览器的宽度或者高度发生变化时,通过百分比单位,通过百分比单位可以使得浏览器中的组件的宽和高随着浏览器的变化而变化,从而实现响应式的效果。
为了了解百分比布局,首先要了解的问题是:
css中的子元素中的百分比(%)到底是谁的百分比?
直观的理解,我们可能会认为子元素的百分比完全相对于直接父元素,height百分比相对于height,width百分比相对于width。
当然这种理解是正确的,但是根据css的盒式模型,除了height、width属性外,还具有padding、border、margin等等属性。

那么这些属性设置成百分比,是根据父元素的那些属性呢?
此外还有border-radius和translate等属性中的百分比,又是相对于什么呢?
下面来具体分析。

1. 百分比的具体分析
(1)子元素height和width的百分比

子元素的height或width中使用百分比,是相对于子元素的直接父元素,width相对于父元素的width,height相对于父元素的height。比如:

<div class="parent">
  <div class="child"></div>
</div>

(2) top和bottom 、left和right
子元素的top和bottom如果设置百分比,则相对于直接非static定位(默认定位)的父元素的高度,
同样子元素的left和right如果设置百分比,则相对于直接非static定位(默认定位的)父元素的宽度。

(3)padding
子元素的padding如果设置百分比,不论是垂直方向或者是水平方向,都相对于直接父亲元素的width,而与父元素的height无关。
举例来说:

.parent{
  width:200px;
  height:100px;
  background:green;
}
.child{
  width:0px;
  height:0px;
  background:blue;
  color:white;
  padding-top:50%;
  padding-left:50%;
}

子元素的初始宽高为0,通过padding可以将父元素撑大,上图的蓝色部分是一个正方形,且边长为100px,说明padding不论宽高,如果设置成百分比都相对于父元素的width。

(4)margin
跟padding一样,margin也是如此,子元素的margin如果设置成百分比,不论是垂直方向还是水平方向,都相对于直接父元素的width。这里就不具体举例。

(5)border-radius
border-radius不一样,如果设置border-radius为百分比,则是相对于自身的宽度,举例来说:

<div class="trangle"></div>
<!--设置border-radius为百分比:-->
.trangle{
  width:100px;
  height:100px;
  border-radius:50%;
  background:blue;
  margin-top:10px;
}

除了border-radius外,还有比如translate、background-size等都是相对于自身的,这里就不一一举例。

2. 百分比单位布局应用
百分比单位在布局上应用还是很广泛的,这里介绍一种应用。
比如我们要实现一个固定长宽比的长方形,比如要实现一个长宽比为4:3的长方形,我们可以根据padding属性来实现,因为padding不管是垂直方向还是水平方向,百分比单位都相对于父元素的宽度,因此我们可以设置padding-top为百分比来实现,长宽自适应的长方形:

<div class="trangle"></div>
<!--设置样式让其自适应:-->
.trangle{
  height:0;
  width:100%;
  padding-top:75%;
}

通过设置padding-top:75%,相对比宽度的75%,因此这样就设置了一个长宽高恒定比例的长方形.

3. 百分比单位缺点
如果全部使用百分比单位来实现响应式的布局,有明显的以下两个缺点:
(1)计算困难,如果我们要定义一个元素的宽度和高度,按照设计稿,必须换算成百分比单位。
(2)从小节1可以看出,各个属性中如果使用百分比,相对父元素的属性并不是唯一的。 比如width和height相对于父元素的width和height,而margin、padding不管垂直还是水平方向都相对比父元素的宽度、border-radius则是相对于元素自身等等, 造成我们使用百分比单位容易使布局问题变得复杂。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的。 Vue.js 是一个流行的 JavaScript 前端框架,可以帮助开发者更快速、高效地开发 Web 应用。 如果你想要在 Vue.js 中实现自适应布局,你可以使用 CSS 自适应布局方案,比如 Flexbox 和 Grid 布局。 下面是一个使用 Flexbox 实现自适应布局的示例代码: ``` <template> <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> </template> <style> .container { display: flex; flex-wrap: wrap; } .item { flex: 1 1 auto; } </style> ``` 上面的代码定义了一个父容器 `container`,并且设置了 `display: flex` 和 `flex-wrap: wrap`,这样子元素会自动换行,实现自适应布局。同时,给子元素设置了 `flex: 1 1 auto`,表示子元素会自动填满剩余空间。 当然,你也可以使用 Grid 布局来实现自适应布局,示例代码如下: ``` <template> <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> </template> <style> .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); } .item { grid-column: span 1; } </style> ``` 上面的代码定义了一个父容器 `container`,并且设置了 `display: grid` 和 `grid-template-columns: repeat(auto-fill, minmax( ### 回答2: Vue.js是一种流行的JavaScript框架,用于构建交互式的Web界面。要实现Vue自适应布局,我们可以使用Vue的响应式设计原则和CSS媒体查询。 首先,在Vue组件中,我们可以使用Vue的响应式数据来动态地调整布局。我们可以定义一个响应式的数据属性,例如`isMobile`,并在组件的`mounted`钩子函数中使用窗口的宽度来更新这个值。例如: ```javascript mounted() { this.updateLayout(); window.addEventListener('resize', this.updateLayout); }, methods: { updateLayout() { this.isMobile = window.innerWidth < 768; } } ``` 接下来,我们可以使用Vue的条件渲染指令(`v-if`和`v-else`)来根据不同的布局情况,渲染不同的内容。例如,我们可以在模板中使用`v-if="isMobile"`来显示适合移动设备的布局,而使用`v-else`来显示适合桌面设备的布局。例如: ```html <template> <div> <div v-if="isMobile"> // 移动设备布局 </div> <div v-else> // 桌面设备布局 </div> </div> </template> ``` 除了使用Vue的响应式设计原则来实现自适应布局,我们还可以使用CSS媒体查询来调整样式。通过在不同的屏幕大小上设置不同的样式,我们可以实现自适应布局。例如,我们可以在CSS中使用`@media`查询,并在相应的查询条件下设置不同的样式。例如: ```css @media (max-width: 767px) { /* 移动设备样式 */ } @media (min-width: 768px) { /* 桌面设备样式 */ } ``` 通过结合Vue的响应式设计原则和CSS媒体查询,我们可以实现自适应布局,让我们的网页在不同的设备上都能正确显示和使用。 ### 回答3: Vue自适应布局代码可以通过使用CSS的媒体查询和Vue指令来实现。在这里,我将向您展示一种简单的方法。 首先,在Vue组件中,通过`v-bind`指令将组件的属性绑定到屏幕宽度。例如,您可以为组件的宽度设置一个响应式的计算属性,如下所示: ``` <template> <div class="my-component" :style="componentStyle"></div> </template> <script> export default { data() { return { screenWidth: 0, }; }, computed: { componentStyle() { return { width: `${this.screenWidth}px`, }; }, }, mounted() { this.screenWidth = window.innerWidth; window.addEventListener("resize", this.handleResize); }, beforeDestroy() { window.removeEventListener("resize", this.handleResize); }, methods: { handleResize() { this.screenWidth = window.innerWidth; }, }, }; </script> ``` 接下来,您可以使用媒体查询来根据屏幕宽度设置样式。例如,您可以在CSS文件中添加以下代码: ```css @media (max-width: 600px) { .my-component { /* 在小于等于600px的屏幕设置特定样式 */ } } @media (min-width: 601px) and (max-width: 1200px) { .my-component { /* 在大于600px且小于等于1200px的屏幕设置特定样式 */ } } @media (min-width: 1201px) { .my-component { /* 在大于1200px的屏幕设置特定样式 */ } } ``` 通过使用上述代码,您可以根据不同的屏幕宽度动态调整Vue组件的样式。无论用户在哪种屏幕设备上查看您的网页,组件都会自动根据屏幕宽度进行布局调整。注:代码中的屏幕宽度范围和样式仅作示例使用,您可以根据实际需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值