calc()使用记录、css换行、vertical-align: middle;基线对齐常用的几个特殊属性

本文深入讲解CSS中的calc()函数用于动态计算长度值,initial关键字用于重置样式至默认,inherit关键字实现样式继承,pointer-events属性控制鼠标事件响应,以及多种居中布局技巧,包括vertical-align属性解决行内块元素对齐问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、calc() 函数用于动态计算长度值

calc() 函数用于动态计算长度值

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
	<head>
		<meta charset="utf-8" />
		
		<style>
			.test {
			    width: -webkit-calc(~"100vw - 50px");
  				width: -moz-calc(~"100vw - 50px");
				width: calc(~"100vw - 50px");
			    background: #eee;
			}
		</style>
	</head>
	<body>
		<div class="test">我的宽度为100% - 50px</div>
	</body>
</html>

vw代表浏览器试图窗口的观点度1% 100vw就是窗口宽度

如果不生效,原因是calc 的 - +左右需要留一个空格;在不生效,就写成
width: calc(~“100vw - 223px”);

这里是引用


二、initial 关键字用于设置 CSS 属性为它的默认值

initial 关键字用于设置 CSS 属性为它的默认值

用法:某些css属性样式继承了父级样式,或者是UI组件库的设置样式,需要去除。那么就可以使用initial 设置为默认样式。

property: initial;

三、inherit 关键字指定一个属性应从父元素继承它的值

inherit 关键字指定一个属性应从父元素继承它的值
继承父级的样式

color: inherit ;

四、pointer-events 属性

pointer-events 属性用于设置元素是否对鼠标事件做出反应
一般用来关闭div等元素的click、hover等事件效果

这里是引用

五、居中

多个子div在父中垂直居中 给父元素加
结构如下:需要包裹一层div

                <div class="align_items">
                  <div>
                    <div>1</div>
                    <div>2</div>
                  </div>
                </div>
// 垂直居中
.align_items{
  display: flex;
  align-items: center;
}
// 垂直水平居中
.center{
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
// 自适应宽度 垂直水平居中
                  <div style="width:100%;height:50%;  display: flex; justify-content: center; align-items: center;">
                    <div>
                      <div style="width:fit-content;border-bottom:5px solid #007D6B;font-size: 26px;font-weight: 700;margin: auto;">
                        {{ item.value }}
                      </div>
                      <div>
                        问题策略数量
                      </div>
                    </div>
                  </div>

六、vertical-align

元素垂直对齐方式,解决两个行内块不对齐问题

vertical-align:top; // 	把元素的顶端与行中最高元素的顶端对齐

原理说明
vertical-align: middle 会让元素的中线与父元素的基线(baseline)对齐

适用于图标和文字同为 inline 或 inline-block 的场景

七、css选择器

:not使用明细

排除类名

<div class="div1">1</div>
<div class="div1 div2">2</div>
<div class="div1">3</div>

// 不包含使用使用CSS的:not()伪类选择器
.div1:not(.div2) {
    /* 这里添加你需要的样式 */
    background-color: yellow;
}


// 为每个并非 <p> 元素的元素设置颜色:
:not(p) {
    color: #ff0000;
}
    <div class="div1">1</div>
    <div class="div1 div2">2</div>
    <div class="div1 div3">3</div>
    <div class="div1">4</div>

// .div1的里面 排除掉.div2和.div3
.div1:not(.div2,.div3){
  color: red;
}

// .div1的里面 排除掉.div2且.div3
.div1:not(.div2.div3){
  color: red;
}

同时具有多类名

<div class="div1">1</div>
<div class="div1 div2">2</div>
<div class="div1">3</div>

// 找到同时拥有多个class元素.div1.div2
div.div1.div2 {
    /* 这里添加你需要的样式 */
    background-color: yellow;
}
// 或者
.div1.div2 {
    /* 这里添加你需要的样式 */
    background-color: yellow;
}

八、解决多余的滚动条

div下有个table表格,但是div也有滚动条 tabled也有滚动条;如何去掉div的滚动条?
给div设置padding: 0 1px;
在这里插入图片描述

在这里插入图片描述

九、解决flex布局高度超出

解决flex布局高度超出

<think>根据用户的问题,他想要设置el-col元素在同一行显示。从引用[1]中可以看出,问题可能出现在不同浏览器的兼容性上,导致在某些浏览器(如360浏览器)中换行显示。用户提供的代码示例中,每个el-col的span为12,这意味着每行只能显示两个el-col(因为24栅格系统)。但是用户希望三个el-col(每个span=8)在同一行显示。 问题分析: 1. 在Element UI/Element Plus中,el-row默认使用flex布局,正常情况下,三个span=8的el-col应该在同一行显示(因为8*3=24)。 2. 出现换行的原因可能是: - 浏览器兼容性问题,导致flex布局在某些浏览器中不支持或支持不完善。 - 内容高度不一致,导致某一列高度增加,从而引起换行(如引用[1]所述)。 - 可能有额外的margin或padding,使得总宽度超过100%。 解决方案: 1. 确保el-row设置为flex布局,并且允许换行(默认不换行,但可能因为高度问题导致换行)。 2. 为el-col添加样式,设置它们在同一行显示,并且处理可能的高度不一致问题。 3. 针对浏览器兼容性,可以添加一些前缀或使用其他方式。 具体步骤: 步骤1:检查el-row的布局设置 - 确保el-row的`type`属性为`flex`(在Element UI中),在Element Plus中已经默认使用flex,无需设置type。 - 设置`justify`和`align`属性来调整布局。 步骤2:为el-col添加样式,强制它们在同一行 - 可以设置`display: inline-block`,但这样可能会破坏flex布局,所以不推荐。 - 更好的方式是保持flex布局,同时处理可能的高度不一致。 步骤3:处理高度不一致 - 如果因为内容高度不同导致换行,可以设置每个el-col内部元素高度一致,或者使用`align-items: stretch`(默认值)让它们拉伸到同样高度。 步骤4:处理浏览器兼容性 - 添加浏览器前缀,例如`-webkit-box`等(针对旧版浏览器)。 - 或者使用`display: -webkit-box;`等。 然而,用户的问题描述是三个el-col(span=8)不在同一行,而是换行显示。这可能是由于总宽度超过了24,或者由于浏览器兼容性问题导致flex布局失效。 根据引用[1]中的情况,在360浏览器中显示换行,可能是因为浏览器兼容性问题。我们可以尝试以下CSS: 1. 为el-row添加`display: flex; flex-wrap: nowrap;`,这样强制不换行。但是注意,如果内容过多,可能会溢出。 2. 为每个el-col设置`float: left`,并计算宽度(针对不支持flex的浏览器)。 但是,考虑到Element UI/Element Plus本身已经处理了大部分兼容性,我们可以先尝试以下方法: 方法一:使用flex布局并设置不换行 ```html <el-row type="flex" style="flex-wrap: nowrap;"> <el-col :span="8">...</el-col> <el-col :span="8">...</el-col> <el-col :span="8">...</el-col> </el-row> ``` 方法二:检查是否有额外的边距(margin/padding)导致总宽度超过100%。可以重置这些边距: ```css .el-row, .el-col { margin: 0; padding: 0; } ``` 方法三:针对360浏览器(兼容模式)可能使用旧内核,我们可以添加一些兼容性样式: ```css .el-row { display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */ display: -moz-box; /* 老版本语法: Firefox (buggy) */ display: -ms-flexbox; /* 混合版本: IE 10 */ display: -webkit-flex; /* 新版本语法: Chrome 21+ */ display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ */ -webkit-flex-wrap: nowrap; flex-wrap: nowrap; } ``` 方法四:如果内容高度不一致导致换行,我们可以设置每个el-col的高度一致,或者使用`align-items: flex-start`(顶部对齐)避免高度不一致的影响。 根据用户的具体情况,他已经在el-row上设置了`justify="space-between" align="middle"`,这可能会影响布局。我们可以尝试以下CSS: ```css /* 确保行不换行 */ .row-bg { flex-wrap: nowrap !important; } /* 针对旧版浏览器的兼容性 */ .row-bg { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; } /* 确保列不会因为内容而换行 */ .el-col { -webkit-box-flex: 0; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; width: 33.3333%; /* 或者使用calc(100%/3) */ } ``` 但是,注意:el-col的宽度通常由span决定,设置`flex: 0 0 auto`可能会破坏原有的栅格布局。因此,我们可以不设置flex,而是通过设置最小宽度来避免压缩。 另一种思路:将每个el-col的span设置为8,理论上占24,所以不会换行。如果换行,可能是由于边框、内边距等导致总宽度超过100%。我们可以通过设置`box-sizing: border-box`来包含边框和内边距。 ```css .el-col { box-sizing: border-box; } ``` 综合以上,我建议用户尝试以下CSS代码: ```css .row-bg { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-wrap: nowrap; flex-wrap: nowrap; } .el-col { box-sizing: border-box; } ``` 如果问题仍然存在,可以尝试为每个el-col设置固定宽度(百分比): ```css .el-col-8 { width: 33.3333%; } ``` 注意:如果用户使用的是Element UI,则每个span对应的类名为`.el-col-8`,所以可以直接设置宽度。 但是,由于用户已经使用了`:span="8"`,所以每个el-col都会有`el-col-8`的类名(在Element UI中)。因此,我们可以这样写: ```css .el-col.el-col-8 { width: 33.3333%; float: left; /* 针对不支持flex的浏览器,可以添加浮动 */ } ``` 最后,为了确保在旧版浏览器中也能正常显示,我们可以同时使用flex和浮动两种方式,但要注意浮动可能需要清除。 考虑到用户的问题背景,我们给出一个综合的解决方案: 步骤1:在el-row上添加一个自定义类(如`custom-row`),并设置不换行和兼容性样式。 步骤2:在el-col上确保使用`box-sizing: border-box`。 示例代码: ```html <el-row type="flex" class="custom-row" justify="space-between" align="middle"> <!-- 三个el-col --> </el-row> ``` ```css .custom-row { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-wrap: nowrap; flex-wrap: nowrap; /* 以下为可选,根据情况设置 */ -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; } .custom-row > .el-col { box-sizing: border-box; -webkit-box-flex: 0; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; width: 33.3333%; /* 覆盖原有的宽度设置,确保在旧浏览器中正确 */ } ``` 注意:如果同时使用Element的栅格和自定义宽度,可能会冲突。这里我们使用`width: 33.3333%`来覆盖原有的宽度,因为每个列都是8(8/24=1/3)。在支持flex的浏览器中,flex属性会起作用,宽度可能由flex决定。因此,我们设置`flex: 0 0 auto`,并且宽度为33.3333%,这样在旧浏览器中也能显示。 但是,Element UI的栅格系统在span=8时,会设置宽度为33.3333%(在24分栏下),所以我们自定义的宽度和它一致,不会冲突。这样写主要是为了确保在旧浏览器中也能正确显示。 最后,如果问题仍然存在,可能需要检查是否有其他CSS覆盖了样式,或者使用媒体查询调整。 由于用户没有提供实际出现问题的环境,以上方案为通用解决方案,用户可根据实际情况调整。 相关问题: 1. 如何解决Element UI/Element Plus在不同浏览器中的布局兼容性问题? 2. 在flex布局中,如何防止子元素换行? 3. 如何设置Element UI/Element Plus的栅格布局在不同浏览器中保持一致?</think>### 如何设置el-col元素在同一行显示 在Element Plus中,当多个`el-col`元素出现意外换行时(尤其在旧版浏览器如360中),通常是由于浏览器兼容性问题或布局设置不当导致。以下是解决方案和优化方法: #### 原因分析 1. **浏览器兼容性问题**:旧版浏览器(如IE或360兼容模式)对Flexbox支持不完善[^1] 2. **内容高度不一致**:当某列内容高度超出其他列时,可能导致换行 3. **布局计算误差**:边框、间距等细节可能导致总宽度超过100% #### 解决方案 ##### 方法1:强制Flex容器不换行 ```html <el-row type="flex" class="row-bg" style="display: flex; flex-wrap: nowrap;"> <!-- 关键设置 --> <el-col :span="8"><div>左内容</div></el-col> <el-col :span="8"><div>中内容</div></el-col> <el-col :span="8"><div>右内容</div></el-col> </el-row> ``` ##### 方法2:添加浏览器兼容前缀 ```css /* 添加CSS兼容性处理 */ .row-bg { display: -webkit-box; /* 老版本语法 */ display: -webkit-flex; /* Safari */ display: -ms-flexbox; /* IE10 */ display: flex; -webkit-flex-wrap: nowrap; flex-wrap: nowrap; } .el-col { -webkit-box-sizing: border-box; box-sizing: border-box; /* 包含边框和内边距 */ } ``` ##### 方法3:处理内容高度不一致 ```css /* 统一列高度 */ .el-col > div { height: 100%; /* 统一高度 */ overflow: hidden; /* 隐藏溢出内容 */ } ``` ##### 方法4:精确宽度计算(兼容旧浏览器) ```css .el-col-8 { width: 33.3333%; /* 替代span=8 */ float: left; /* 针对不支持flex的浏览器 */ } ``` #### 关键注意事项 1. **盒模型调整**:确保添加`box-sizing: border-box`包含边框和内边距 2. **清除浮动**:在父容器添加`.clearfix`(若使用浮动布局) 3. **响应式处理**:添加媒体查询适应小屏幕 ```css @media (max-width: 768px) { .el-col { width: 100% !important; /* 小屏幕时堆叠显示 */ float: none; } } ``` #### 完整示例 ```html <el-row type="flex" class="row-bg custom-row" justify="space-between" align="middle"> <el-col :span="8"><div class="content-box">左内容</div></el-col> <el-col :span="8"><div class="content-box">中内容</div></el-col> <el-col :span="8"><div class="content-box">右内容</div></el-col> </el-row> ``` ```css /* 兼容性解决方案 */ .custom-row { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-wrap: nowrap; flex-wrap: nowrap; } .el-col { -webkit-box-sizing: border-box; box-sizing: border-box; } .content-box { height: 100%; padding: 10px; border: 1px solid #eee; } /* 清除浮动 */ .custom-row::after { content: ""; display: table; clear: both; } ``` 这些方法通过处理浏览器兼容性、统一内容高度和精确宽度计算,确保三个`el-col`元素始终在同一行显示,即使在旧版浏览器中也能保持布局稳定[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值