【CSS】定位

参考w3school

定位机制:

CSS的三种定位机制:普通流、浮动和绝对定位。
默认普通流,元素的位置由它们在html中的位置决定


position属性:

position有4种属性:static, relative, absolute和fixed

static:

元素框正常生成。块级元素形成矩形框,行内元素会创建行框,置于父元素中

relative:

元素框偏移某个距离,元素保持未定位前的形状,它原本所占的空间仍然保留。
比如下面两个样式,style1将元素从它原来应该在的位置左移了20px,style2将元素从它原来该在的位置右移了20px。

<html>
<head>
<style type="text/css">
h2.pos_left
{
position:relative;
left:-20px
}
h2.pos_right
{
position:relative;
left:20px
}
</style>
</head>

<body>
<h2>正常位置的标题</h2>
<h2 class="pos_left">左移位置的标题</h2>
<h2 class="pos_right">右移位置的标题</h2>
<p>相对定位会按照元素的原始位置对该元素进行移动。</p>
<p>样式 "left:-20px" 从元素的原始左侧位置减去 20 像素。</p>
<p>样式 "left:20px" 向元素的原始左侧位置增加 20 像素。</p>
</body>

</html>

在这里插入图片描述

absolute:

元素框从文档流中完全删除,相对其包含的块定位。
比如下面这段代码:

<html>
<head>
<style type="text/css">
h2.pos_left
{
position:relative;
left:-20px
}
h2.pos_right
{
position:relative;
left:20px
}
</style>
</head>

<body>
<h2>这是位于正常位置的标题</h2>
<h2 class="pos_left">这个标题相对于其正常位置向左移动</h2>
<h2 class="pos_right">这个标题相对于其正常位置向右移动</h2>
<p>相对定位会按照元素的原始位置对该元素进行移动。</p>
<p>样式 "left:-20px" 从元素的原始左侧位置减去 20 像素。</p>
<p>样式 "left:20px" 向元素的原始左侧位置增加 20 像素。</p>
</body>

</html>

显示的效果为:
在这里插入图片描述

fixed:

表现类似absolute,不过包含块是视窗本身。
例如对于下面的定位:

<html>
<head>
<style type="text/css">
p.one
{
position:fixed;
left:5px;
top:5px;
}
p.two
{
position:fixed;
top:30px;
right:5px;
}
</style>
</head>
<body>

<p class="one">一些文本。</p>
<p class="two">更多的文本。</p>

</body>
</html>

显示的效果为:
在这里插入图片描述

元素溢出处理

元素溢出指的是元素的大小超过了它的容器的大小。例如我们有一段文本需要占据500px * 500px的大小,但是如果我们当前浏览器的窗口人为缩小到400px * 400px时,不同的处理方式会有不同的效果。
元素溢出的三种处理方式是:hidden、scroll、auto

hidden:

使用hidden模式时,如果元素的大小超过了容器的大小,溢出的部分会被隐藏,不可以通过滚动条来滑动显示。例如对于下面的设置:

<html>
<head>
<style type="text/css">
div 
{
background-color:#00FFFF;
width:150px;
height:150px;
overflow: hidden
}
</style>
</head>

<body>
<p>如果元素中的内容超出了给定的宽度和高度属性,overflow 属性可以确定是否显示滚动条等行为。</p>

<div>
这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。默认值是 visible。
</div>
</body>

</html>

overflow设置为hidden,显示的效果为:
在这里插入图片描述
可以看到文本溢出的不同直接隐藏不显示了。

scroll:

设置溢出应对模式为scroll时,不管元素的大小是否超过了容器的大小,都会设置滚动条。例如对于下面的设置:

<html>
<head>
<style type="text/css">
div 
{
background-color:#00FFFF;
width:150px;
height:150px;
overflow: scroll;
}
</style>
</head>

<body>
<p>如果元素中的内容超出了给定的宽度和高度属性,overflow 属性可以确定是否显示滚动条等行为。</p>

<div>
这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。默认值是 visible。
</div>
</body>

</html>

显示的效果为:
在这里插入图片描述
可以看到文本元素的左右是没有超过容器的,但是容器的最底下还是设置了滚动条。

auto:

溢出处理设置为auto的话,容器会根据元素的溢出情况自动设置是否需要滚动条,例如:

<html>
<head>
<style type="text/css">
div 
{
background-color:#00FFFF;
width:150px;
height:150px;
overflow: auto
}
</style>
</head>

<body>
<p>如果元素中的内容超出了给定的宽度和高度属性,overflow 属性可以确定是否显示滚动条等行为。</p>

<div>
这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。默认值是 visible。
</div>
</body>

</html>

显示效果为:
在这里插入图片描述

先看效果: https://renmaiwang.cn/s/jkhfz Hue系列产品将具备高度的个性化定制能力,并且借助内置红、蓝、绿三原色LED的灯泡,能够混合生成1600万种不同色彩的灯光。 整个操作流程完全由安装于iPhone上的应用程序进行管理。 这一创新举措为智能照明控制领域带来了新的启示,国内相关领域的从业者也积极投身于相关研究。 鉴于Hue产品采用WiFi无线连接方式,而国内WiFi网络尚未全面覆盖,本研究选择应用更为普及的蓝牙技术,通过手机蓝牙与单片机进行数据交互,进而产生可调节占空比的PWM信号,以此来控制LED驱动电路,实现LED的调光功能以及DIY调色方案。 本文重点阐述了一种基于手机蓝牙通信的LED灯设计方案,该方案受到飞利浦Hue智能灯泡的启发,但考虑到国内WiFi网络的覆盖限制,故而选用更为通用的蓝牙技术。 以下为相关技术细节的详尽介绍:1. **智能照明控制系统**:智能照明控制系统允许用户借助手机应用程序实现远程控制照明设备,提供个性化的调光及色彩调整功能。 飞利浦Hue作为行业领先者,通过红、蓝、绿三原色LED的混合,能够呈现1600万种颜色,实现了全面的定制化体验。 2. **蓝牙通信技术**:蓝牙技术是一种低成本、短距离的无线传输方案,工作于2.4GHz ISM频段,具备即插即用和强抗干扰能力。 蓝牙协议栈由硬件层和软件层构成,提供通用访问Profile、服务发现应用Profile以及串口Profiles等丰富功能,确保不同设备间的良好互操作性。 3. **脉冲宽度调制调光**:脉冲宽度调制(PWM)是一种高效能的调光方式,通过调节脉冲宽度来控制LED的亮度。 当PWM频率超过200Hz时,人眼无法察觉明显的闪烁现象。 占空比指的...
<think>我们正在讨论的是CSS定位网页元素的方法和技巧。根据用户的问题,结合之前的对话历史和提供的引用内容,我们需要整理关于CSS选择器定位的详细方法和技巧。 引用[1]提到了Playwright的元素定位,包括基本的CSS选择器和XPath表达式,并强调通过CSS选择器定位元素是自动化测试和网页操作中的重要技能。 引用[2]是关于CSS中的定位(position)属性,包括相对定位、绝对定位、固定定位等,以及堆叠层级(z-index)和定位元素的位置设置(inset)。注意,这里的“定位”是指CSS中的布局定位,而不是元素选择定位。但用户的问题明显是指选择元素的方法,即使用CSS选择器来定位元素。 引用[3]和引用[4]都提到了Selenium中使用CSS选择器(cssSelector)来定位页面元素,介绍了其基本语法和高级用法。 因此,我们需要将重点放在如何使用CSS选择器来定位网页元素(即选择元素)上,而不是CSS布局中的定位(position)属性。 以下是我们将要讲解的内容结构: 1. CSS选择器基础语法 - 元素选择器 - 类选择器 - ID选择器 - 属性选择器 - 伪类选择器 2. 组合选择器 - 后代选择器 - 子元素选择器 - 相邻兄弟选择器 - 通用兄弟选择器 3. 高级CSS选择器技巧 - 使用多个条件 - 根据部分属性值匹配 - 使用伪类选择器(如:first-child, :nth-child, :not等) 4. 在自动化工具中的应用(如Selenium、Playwright) - 如何通过CSS选择器定位元素 5. 实际案例演示 6. 常见问题及注意事项 注意:我们不会讨论CSS布局中的定位(position)属性,因为这与用户的问题不符(用户的问题是关于选择元素的定位)。 根据引用[3]和引用[4],我们可以给出在Selenium中使用CSS选择器的例子。同时,引用[1]提到了Playwright,我们也可以提及。 由于引用[2]的内容(关于CSS布局定位)与我们当前的主题不直接相关,我们将忽略它,除非用户特别询问。 现在,我们开始组织内容。 </think> ### CSS定位网页元素的方法与技巧 CSS定位网页元素是网页抓取和自动化测试的核心技能。以下是系统化的方法和实用技巧,结合引用内容整理: --- #### 一、基础选择器定位 1. **元素选择器** ```css div /* 选择所有<div>元素 */ input /* 选择所有<input>元素 */ ``` 2. **类选择器** ```css .btn-primary /* 选择class="btn-primary"的元素 */ ``` 3. **ID选择器** ```css #search-box /* 选择id="search-box"的元素 */ ``` 4. **属性选择器** ```css [data-toggle="dropdown"] /* 选择自定义属性 */ input[type="email"] /* 选择特定属性值 */ a[href^="https"] /* 匹配以https开头的链接 */ ``` --- #### 二、组合选择器(高级技巧)[^3][^4] 1. **后代与子代选择器** ```css .menu > li /* 直接子元素 */ .container p /* 所有后代元素 */ ``` 2. **相邻兄弟选择器** ```css h1 + p /* 紧接在<h1>后的<p> */ ``` 3. **通用兄弟选择器** ```css h2 ~ ul /* <h2>之后的所有<ul> */ ``` 4. **组选择器** ```css button, .link /* 同时匹配按钮和链接 */ ``` --- #### 三、伪类选择器(动态元素定位) 1. **状态伪类** ```css a:hover /* 鼠标悬停状态 */ input:focus /* 输入框聚焦状态 */ ``` 2. **结构伪类** ```css li:nth-child(2) /* 第二个<li>元素 */ tr:first-child /* 表格首行 */ div:empty /* 空元素 */ ``` 3. **内容伪类** ```css p:contains("更多") /* 非标准! Playwright支持[^1] */ ``` --- #### 四、定位布局元素(CSS Position)[^2] | 定位类型 | CSS代码 | 特点 | |---------------|---------------------|--------------------------| | 相对定位 | `position: relative` | 相对原位置偏移 | | 绝对定位 | `position: absolute` | 相对最近定位父元素 | | 固定定位 | `position: fixed` | 相对视口固定 | | 粘性定位 | `position: sticky` | 滚动时固定在特定位置 | **定位居中技巧**: ```css .center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); /* 精确居中 */ } ``` --- #### 五、自动化工具应用 1. **Selenium示例** ```python # 通过CSS选择器定位搜索框[^4] search_box = driver.find_element(By.CSS_SELECTOR, 'input[id="kw"]') ``` 2. **Playwright示例** ```python # 定位包含特定文本的元素[^1] element = page.locator("css=button:has-text('提交')") ``` --- #### 六、实战技巧 1. **优先选择器策略** ```text ID > Class > 属性 > 结构伪类 # 稳定性排序 ``` 2. **避免脆弱定位** - 用`data-testid`等自定义属性代替动态类名 - 避免`:nth-child(3)`改用`:nth-of-type` 3. **调试工具使用** - Chrome开发者工具:`Ctrl+F`在Elements面板测试CSS选择器 ```javascript $$('div.product:not(.hidden)') // 控制台验证选择器 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值