clearwater 发表于 2020-1-9 12:07

前端基础:为啥本案例中加了定位的行内元素高度和父级一样高(毒舌和水神不要进来)

本帖最后由 clearwater 于 2020-1-9 12:47 编辑

***********
1、回答正确,并能帮助我理解的前两位大神,各一个热心。(如果当天没有,隔天会补上)
2、其他的大神, 不管答对或答错,在此我都表示感谢。因为每天热心有限,无法一一评分,请见谅。
3、请毒舌和水神放过,不要来回复。我看了心情很不好。
**************


有一个父级 块级盒子 A , 里面装子级 行内元素 B.
给B加上绝对定位之后,B就带有 行内块的特点了,即 宽度是 B的内容撑开的。 (高度也应该是这样。) ---我自己做了一个简单的代码当测试也是这样。

但是我在跟某马的教学视频学习,为啥截图中我圈起来的子级行内元素(没有宽度),加了绝对定位之后,这个截图中的圈起来的盒子变成和 父级的盒子(购物车)一样高?
该盒子里面装一个 ”8“, 它的宽度和 8一样宽,这个我理解了。
我的问题是 高度,为什么不是 和 8一样高? 我哪里理解错了。
问题的相关代码在: CSS公共部分的124-129行。

(以下代码是我跟着教视抄的。我也知道怎么改正确,我就想知道原理。)

我把所有的代码和图片也上传到百度盘了。
链接:https://pan.baidu.com/s/1riio3SW8c2-w2ikJujGS1w
提取码:r0dp


第一部分是:HTML
第二部分是:CSS的公共部分
第三部分是:CSS的基础部分

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>品优购-综合网购首选-正品低价、品质保障、配送及时、轻松购物!</title>
    <meta name="description" content="品优购JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
    <meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,品优购" />
    <!-- 引入favicon.ico网页图标 -->
    <link rel="shortcut icon" href="favicon.ico"/>
    <!-- 引入css初始化的css文件 -->
    <link rel="stylesheet" href="css/base.css">
    <!-- 引入公共样式的common.css -->
    <link rel="stylesheet" href="css/common.css">

</head>
<body>
    <!-- 顶部快捷导航starts -->
    <div class="shortcut">
      <div class="w">
            <div class="fl">
                <ul>
                  <li>品优购欢迎您!</li>
                  <li>
                        <a href="#">请登录</a>
                        <a href="#" class="style-red">免费注册</a>
                  </li>
                </ul>
            </div>
            <div class="fr">
                <ul>
                  <li><a href="#">我的订单</a></li>
                  <li class="spacer"></li>
                  <li><a href="#">我的品优购</a><i class="icomoon"></i> </li>
                  <li class="spacer"></li>
                  <li><a href="#"> 品优购会员</a></li>
                  <li class="spacer"></li>
                  <li><a href="#">企业采购 </a></li>
                  <li class="spacer"></li>
                  <li><a href="#">关注品优购</a><i class="icomoon"></i></li>
                  <li class="spacer"></li>
                  <li><a href="#">客户服务</a><i class="icomoon"></i></li>
                  <li class="spacer"></li>
                  <li><a href="#">网站导航</a><i class="icomoon"></i></li>
                </ul>
               
            </div>
      </div>
    </div>
    <!-- 顶部快捷导航ends -->
    <!-- header starts -->
    <div class="header w">
            <!-- logo starts -->
            <div class="logo">
                <h1>
                  <a href="index.html" title="品优购">品优购</a>
                </h1>
            </div>
            <!-- search starts -->
            <div class="search">
                <input type="text" class="text" value="请搜索内容...">
                <button class="btn">搜索</button>
            </div>
            <!-- hotwords starts -->
            <div class="hotwords">
                <a href="#" class="style-red">优惠购首发 </a>
                <a href="#">亿元优惠</a>
                <a href="#">9.9元团购</a>
                <a href="#">美满99减30</a>
                <a href="#">办公用品</a>
                <a href="#">电脑</a>
                <a href="#">通信</a>
            </div>
            <!-- shopcart starts -->
            <div class="shopcart">
               <i class="cart"></i> 我的购物车<i class="arrow"></i>
               <i class="count">8</i>
            </div>
                                       
         
    </div>

    <!-- header ends -->
</body>
</html>


/*公共样式*/
.fl {
    float: left;
}
.fr {
    float: right;
}
@font-face {
    font-family: 'icomoon';
    src:url('../fonts/icomoon.eot?7kkyc2');
    src:url('../fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
    url('../fonts/icomoon.ttf?7kkyc2') format('truetype'),
    url('../fonts/icomoon.woff?7kkyc2') format('woff'),
    url('../fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
}
.icomoon {
    font-family: 'icomoon';
    font-size: 16px;
    /*行高小于高,文字可以偏小。高是继承shortcut 31px*/
    line-height: 26px;
}
/*版心*/
.w {
    width: 1200px;
    margin: 0 auto;
}
.style-red {
    color: #c81623;
}
.spacer {
    width: 1px;
    height: 12px;
    background-color: #666;
    margin: 9px 14px 0;
}
/*顶部快捷导航*/
.shortcut {
    height: 31px;
    line-height: 31px;
    background-color: #f1f1f1;         
}
.shortcut li {
    float: left;
}
/*header 区域*/
.header {
    position: relative;
    height: 105px;
    background-color: pink;
}
.logo {
    position: absolute;
    top: 25px;
    left:0;
    width: 175px;
    height: 56px;
    /*background-color: purple;*/
}
.logo a {
    display: block;
    width: 175px;
    height: 56px;
    overflow:hidden;
    background: url(../img/logo.png);
    /*color: transparent;*/
    text-indent:-999px;
    font-size: 0;
}
.search {
    position: absolute;
    top:25px;
    left: 348px;
}
.text {
    float: left;
    width: 445px;
    height: 32px;
    padding-left: 10px;
    border: 2px solid #b1191a;
    color: #ccc;
}
.btn {
    float: left;
    width: 82px;
    height: 36px;
    background-color: #b1191a;
    border: none;
    color: #fff;
    font-size: 16px;
}
.hotwords {
    position: absolute;
    top: 65px;
    left: 348px;

}
.hotwords a {

   margin: 0 10px;
}
.shopcart {
    position: absolute;
    right: 62px;
    top: 25px;
    width: 138px;
    height: 34px;
    line-height: 34px;
    border: 1px solid #dfdfdf;
    background-color: #f7f7f7;
    color: #666;
    text-align: center;
}
.cart {
    font-family: 'icomoon';
    color: #d94f4f;
}

.arrow {
    font-family: 'icomoon';
    margin-left: 5px;
}
.count {
    position: absolute;
    top: 0;
    right: 0;
    background-color: #e60012;
}

/*清除元素默认的内外边距*/
* {
    margin: 0;
    padding: 0
}
/*让所有斜体 不倾斜*/
em,
i {
    font-style: normal;
}
/*去掉列表前面的小点*/
li {
    list-style: none;
}
/*图片没有边框   去掉图片底侧的空白缝隙*/
img {
    border: 0;/*ie6*/
    vertical-align: middle;
}
/*让button 按钮 变成小手*/
button {
    cursor: pointer;
}
/*取消链接的下划线*/
a {
    color: #666;
    text-decoration: none;
}

a:hover {
    color: #e33333;
}

button,
input {
    font-family: 'Microsoft YaHei', 'Heiti SC', tahoma, arial, 'Hiragino Sans GB', \\5B8B\4F53, sans-serif;
    /*取消轮廓线 蓝色的*/
    outline: none;
}

body {
    background-color: #fff;
    font: 12px/1.5 'Microsoft YaHei', 'Heiti SC', tahoma, arial, 'Hiragino Sans GB', \\5B8B\4F53, sans-serif;
    color: #666
}

.hide,
.none {
    display: none;
}
/*清除浮动*/
.clearfix:after {
    visibility: hidden;
    clear: both;
    display: block;
    content: ".";
    height: 0
}

.clearfix {
    *zoom: 1
}

z970815 发表于 2020-1-9 12:30

你没有跟count设置宽度,他就是内容的宽度

clearwater 发表于 2020-1-9 12:31

本帖最后由 clearwater 于 2020-1-9 12:34 编辑

z970815 发表于 2020-1-9 12:30
你没有跟count设置宽度,他就是内容的宽度
这个我知道。

我的问题是:为什么高度不是跟 内容-“数字8”的高度?(而是和父级元素一样高)

count的宽高我都没有设。count加了绝对定位之后,他的属性就变成了类似行内块的元素,即宽高是由内容撑开的,对不对?

{:1_904:}

北海以北少年痴 发表于 2020-1-9 12:41

因为你在shopcart里面设置了行高为34,所以此时你shopcart下面的每一个i标签的高度都已经确定了,而它的宽度是没有的所以只能有里面的文本撑开,这样一来你看到的样式就是宽度是刚好被8撑开的宽度而高度却和它的父元素一样了。

z970815 发表于 2020-1-9 12:43

clearwater 发表于 2020-1-9 12:31
这个我知道。

我的问题是:为什么高度不是跟 内容-“数字8”的高度?(而是和父级元素一样高)


你跟父元素设置了行高

clearwater 发表于 2020-1-9 12:47

z970815 发表于 2020-1-9 12:43
你跟父元素设置了行高

@北海以北少年痴

@z970815

谢谢两位大神的帮助。
@z970815我现在没有能量了,要等晚一点才能给您评分。


ZJReason 发表于 2020-1-9 13:11

本帖最后由 ZJReason 于 2020-1-9 13:19 编辑

clearwater 发表于 2020-1-9 12:31
这个我知道。

我的问题是:为什么高度不是跟 内容-“数字8”的高度?(而是和父级元素一样高)

因为position:absolute属性是相对于 static 定位以外的第一个父元素进行定位,并生成块级框。意思就是说你这里的<i class="count">是根据<div class="shopcart">来定位的,在<div class="shopcart">里相当于一个块级。在不给定高度的情况下,默认跟<div class="shopcart">等高,换句话说,它就是父级元素里的行内块,高度默认一致,宽度是内容宽度。
验证方法就是,你把i标签里面的position属性去掉,它就会是本身内容高度

clearwater 发表于 2020-1-9 13:21

ZJReason 发表于 2020-1-9 13:11
因为position:absolute属性是相对于 static 定位以外的第一个父元素进行定位,并生成块级框。意思就是说 ...

谢谢您的回复。

因为shopcart是父级元素,设有行高,行高可以可以被子元素继承,但是高度并不能子元素继承。

我把公共COMMON. CSS 中110行 line-height:34px注释掉后, 那个子元素高度就变成很小了。

不过不知为啥 8 上下还有padding值?这个我想想看。

如果我说得不对,请大神赐教。{:1_904:}

clearwater 发表于 2020-1-9 16:54

@北海以北少年痴

@z970815

两位大神,你们随便哪位能不能帮我看看。 如果我把shopcart里面的110行中的line-height注释掉。

为什么shopcart 或 8 上面会有那么大的空隙? 我用黄色把那个地方涂出来?

我想8是继承了shopcart里面的啥参数。应该去找找shopcart.

但是我没发现shopcart里面有啥padding   值,能再教教我吗?



北海以北少年痴 发表于 2020-1-10 17:34

clearwater 发表于 2020-1-9 16:54
@北海以北少年痴

@z970815


你的父级元素shopcart使用了absolute,这是会脱离文档流的,会造成子元素拥有浮动的属性,会造成子元素向上靠,或者说你里面的子元素本来就是这样的大小,当你删除掉行高之后会向上聚拢也就很正常了
页: [1]
查看完整版本: 前端基础:为啥本案例中加了定位的行内元素高度和父级一样高(毒舌和水神不要进来)