马黑黑 发表于 2022-4-2 17:55

巧用CSS的left|op|right|bottom值快速给子元素定位

本帖最后由 马黑黑 于 2022-4-2 18:07 编辑 <br /><br /><p>假设有父子元素如下:<br>&nbsp;</p>
<pre>&lt;<span style="color:darkred">div</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"father"</span>&gt;
&nbsp; &nbsp;&lt;<span style="color:darkred">div</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"son"</span>&gt;&lt;<span style="color: darkred">/div</span>&gt;
&lt;<span style="color: darkred">/div</span>&gt;
</pre>
<p><br>现在想把儿子元素定位在父亲元素的指定位置,通常的实现思路无非就是分两步走:在CSS里,一是给父子元素设定position为relative和absolute,二是给子元素设定&nbsp;left&nbsp;和&nbsp;top&nbsp;值:<br>&nbsp;</p>
<pre><span style="color: red;">.father </span>{
&nbsp; &nbsp;<span style="color: blue;">margin</span>: auto;
&nbsp; &nbsp;<span style="color: blue;">width</span>: 600px;
&nbsp; &nbsp;<span style="color: blue;">height</span>: 400px;
&nbsp; &nbsp;<span style="color: blue;">background</span>: olive;
&nbsp; &nbsp;<span style="color: blue;">position</span>: relative;
}
<span style="color: red;">.son </span>{
&nbsp; &nbsp;<span style="color: blue;">position</span>: absolute;
&nbsp; &nbsp;<span style="color: blue;">width</span>: 80px;
&nbsp; &nbsp;<span style="color: blue;">height</span>: 50px;
&nbsp; &nbsp;<span style="color: blue;">left</span>: 10px;
&nbsp; &nbsp;<span style="color: blue;">top</span>: 10px;
&nbsp; &nbsp;<span style="color: blue;">background</span>: pink;
}</pre>

<p><br>&nbsp;这是不错的思路。上面的CSS代码,儿子元素在父亲元素的左上角,弄到右上角,用&nbsp;left&nbsp;值来设定位置的话就会有点麻烦,需要去计算父亲元素的宽度,还需要结合自己的宽度尺寸。这时,用&nbsp;right&nbsp;值替代&nbsp;left&nbsp;值就很省事:</p><p><br></p><p>&nbsp; &nbsp;<font color="#0000ff">right:</font> 10px;</p>
<p><br>&nbsp;右下角呢?用&nbsp;right 取代&nbsp;left、用&nbsp;bottom&nbsp;取代&nbsp;top:</p><p><br></p><p>&nbsp; &nbsp; <font color="#0000ff">right</font>: 10px;<br>&nbsp; &nbsp; <font color="#0000ff">bottom</font>: 10px;</p><p><br></p><p>最后是左下角,用&nbsp;bottom&nbsp;取代&nbsp;top:</p><p><br></p><p>&nbsp; &nbsp; <font color="#0000ff">left</font>: 10px;</p><p>&nbsp; &nbsp;<font color="#0000ff"> bottom</font>: 10px;</p><p><br></p><p>当儿子元素偏右或偏下的时候,上述方法比较经济,我们要做的就是儿子元素需要离开右边或底边多少个像素即可。</p><p><br></p><p>但当需要儿子元素绝对居中时,还是要老老实实用公式设定 left 和 top 值(假设儿子元素的宽高分别为80、60像素):</p><p><br></p><p>&nbsp; &nbsp; <font color="#0000ff">left</font>: calc(50% - 40px);</p><p>&nbsp; &nbsp; <font color="#0000ff">top</font>: calc(50% - 30px);</p><p><br></p><p>以上父子元素定位很实用,可以做做尝试,加深体会。我将在后续回复中给出一个完整的实现案例。</p><p><br></p>

马黑黑 发表于 2022-4-2 17:58

<style type="text/css">
.father {
        margin: auto;
        width: 600px;
        height: 400px;
        background: olive;
        position: relative;
}

.father div {
        position: absolute;
        width: 80px;
        height: 60px;
        background: pink;
        text-align: center;
        line-height: 60px;
}
.father div:nth-Child(1) {
        left: 10px;
        top: 10px;
}

.father div:nth-Child(2) {
        right: 10px;
        top: 10px;
}
.father div:nth-Child(3) {
        right: 10px;
        bottom: 10px;
}

.father div:nth-Child(4) {
        left: 10px;
        bottom: 10px;
}
.father div:nth-Child(5) {
        left: calc(50% - 40px);
        top: calc(50% - 30px);
}
</style>

<p>演示实例:<br>&nbsp;</p>

<div class="father">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
</div>

马黑黑 发表于 2022-4-2 17:58

二楼代码:
<style type="text/css">
.father {
        margin: auto;
        width: 600px;
        height: 400px;
        background: olive;
        position: relative;
}

.father div {
        position: absolute;
        width: 80px;
        height: 60px;
        background: pink;
        text-align: center;
        line-height: 60px;
}
.father div:nth-Child(1) {
        left: 10px;
        top: 10px;
}

.father div:nth-Child(2) {
        right: 10px;
        top: 10px;
}
.father div:nth-Child(3) {
        right: 10px;
        bottom: 10px;
}

.father div:nth-Child(4) {
        left: 10px;
        bottom: 10px;
}
.father div:nth-Child(5) {
        left: calc(50% - 40px);
        top: calc(50% - 30px);
}
</style>

<div class="father">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
</div>

马黑黑 发表于 2022-4-2 18:04

二楼的演示,为了简洁,子元素我用了 :nth-child(x) 选择器,x 代表儿子元素的第 x 个。

儿子元素的共性属性放在 .father div {...} 选择器里。然后用 :nth-child(x) 分别设定第 x 个子元素的位置。

:nth-child(x) 中的 child 我在示例中用了大写的 C(受JS影响太深),其实规范是用小写,好在这里并不影响。

红影 发表于 2022-4-2 19:20

非常实用的知识,黑黑辛苦了{:4_187:}

马黑黑 发表于 2022-4-2 23:50

红影 发表于 2022-4-2 19:20
非常实用的知识,黑黑辛苦了

这个确实很实用

红影 发表于 2022-4-3 19:14

马黑黑 发表于 2022-4-2 23:50
这个确实很实用

嗯,上下左右要会巧用,我只习惯用TOP和LEFT,弄得数字老大的{:4_173:}

加林森 发表于 2022-4-3 19:31

受教了,这个方法好。跟到学习。

马黑黑 发表于 2022-4-3 20:10

加林森 发表于 2022-4-3 19:31
受教了,这个方法好。跟到学习。

{:4_190:}

马黑黑 发表于 2022-4-3 20:10

红影 发表于 2022-4-3 19:14
嗯,上下左右要会巧用,我只习惯用TOP和LEFT,弄得数字老大的

合适的时候用用吧

加林森 发表于 2022-4-3 20:25

马黑黑 发表于 2022-4-3 20:10


谢谢!

马黑黑 发表于 2022-4-3 20:25

加林森 发表于 2022-4-3 20:25
谢谢!

客气了

加林森 发表于 2022-4-3 20:29

马黑黑 发表于 2022-4-3 20:25
客气了

我感觉我得慢慢接受这些的,快了就容易糊涂了。

马黑黑 发表于 2022-4-3 20:38

加林森 发表于 2022-4-3 20:29
我感觉我得慢慢接受这些的,快了就容易糊涂了。

消化需要过程

加林森 发表于 2022-4-3 20:39

马黑黑 发表于 2022-4-3 20:38
消化需要过程

嗯嗯,我不能急的。

马黑黑 发表于 2022-4-3 20:40

加林森 发表于 2022-4-3 20:39
嗯嗯,我不能急的。

对,慢慢来

加林森 发表于 2022-4-3 20:44

马黑黑 发表于 2022-4-3 20:40
对,慢慢来

嗯嗯,我慢慢去消化吧。

马黑黑 发表于 2022-4-3 21:17

加林森 发表于 2022-4-3 20:44
嗯嗯,我慢慢去消化吧。

{:4_190:}

加林森 发表于 2022-4-3 21:22

马黑黑 发表于 2022-4-3 21:17


今晚你喝酒没有呢?

马黑黑 发表于 2022-4-3 21:45

加林森 发表于 2022-4-3 21:22
今晚你喝酒没有呢?

喝了喝了
页: [1] 2
查看完整版本: 巧用CSS的left|op|right|bottom值快速给子元素定位