css的继承之width属性(容易忽略)

众所周知,css的三大特性分别是 继承性,层叠性,和优先级

那么这里就详细说一下css中width的继承性及其特殊情况。

继承性概念详解:css的继承性指的被包在内部的标签拥有外部标签的样式性,子元素可以继承父元素的属性。但也不是所有的css属性都有继承性的。

  常见的拥有继承性的属性以 text- 、 font- 、line- 开头的属性较为常用。其中也有例外如a标签的字体颜色是不继承的,它有它自己的默认颜色-蓝色,下划线等自带样式,h1~h6的字体大小是不继承的,跟a标签一样都是有自带默认值,除非单独为其设置样式 才可以改变。

下面就来详细说一下width属性的“继承”关系。

大家在写代码过程中,是不是经常遇到 个一个父div设置了一个width值 如.father {width:200px}; 其子元素div只设置一个高度就会有宽高了。

正常场景下:

<style>
    .father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

效果图:

特殊场景一:

那么如果子元素是一个内联元素,或内联块元素呢?会是什么效果?

<style>
    .father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        display:inline-block;
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <!-- <div class="son"></div> -->
        <a href="#" class="son"></a>
    </div>
</body>

你会发现只有一个绿色背景,红色子元素并没有显示出来。这表明只有块元素才可以默认“继承”其父元素的width.(项目中就遇到一个类似的坑,所以写此笔记记录一下)。

特殊场景二:

如果子元素是定位元素或浮动元素,其“继承性”还正常么?下面就用代码实验一下。

.father {
        width:200px;
        height:200px;
        background-color:green;
    }
    .son {
        /* position:absolute; */
        float:left;
        height:100px;
        background-color:red;
    }
</style>
<body>
    <div class="father">
        <!-- <div class="son"></div> -->
        <div class="son">我是子元素</div>
    </div>
</body>

实验结果发现,.son的元素宽度只是其字撑开的那么宽,并没有“继承”其父元素的宽度。可见,浮动元素和定位元素也是不默认(不自动)“继承”其父元素宽度的

当我们遇到这三种情况的时候,就需要为这些元素单独设置一下width。width的单位有固定单位和相对单位,你可以把它设置称一个固定值(200px),也可以把它设置为一个百分数(100%)。

那么问题又来了,百分数是一个相对单位,它的基准是什么呢?是相对于谁的百分比呢?

场景一中,其就是默认相对于其父元素.father的宽度。

场景二中,float的子元素其width 百分数也是始终相对于其父元素.father而言, 但定位的子元素就比较特殊了:

  position为absolute的子元素

  (1) 如果.father是一个static的元素,则.son的宽100%是基于body说的。跟body的宽度一样大。

  (2) 但是如果.father也是一个定位的元素,设置了relative或absolut或fixed,则.son的width100%就是相对于.father而言的。否则就是相对于离其最近的一个拥有定位元素的父元素而言。

  position为fixed的子元素:

  其width的100%是相对于body而言。

  position为relative的子元素:

  不管直接其父元素是否为定位元素,其width100%始终是相对于其直接父元素而言的。

总结:

1.当符合css默认“继承”的情况下(子元素必须是块级元素且无定位或浮动),是不需要写width属性,就可以默认“继承”的。

    否则就要特殊声明一下width属性。

2.当使用width:100%的时候 也要注意其基准点到底是谁:

(1)对于使用position:relative的子元素或浮动的子元素,其基准点始终是基于其直接父元素而言的,跟其父元素是否有定位无关。

(2)对于绝对定位position:absolute的子元素,其基准点是相对于离其最近的一层定位父元素而言。如果其所有父级元素均无定位,则是相对于body而言。

(3)对于使用position:fixed的子元素,其基准点就是body。跟父元素无关。

如果还有其他特殊情况,欢迎大家评论指出哦。我会再做补充上去。

原文地址:https://www.cnblogs.com/gaogch/p/10652694.html

时间: 2024-11-09 18:22:56

css的继承之width属性(容易忽略)的相关文章

css中 Span 元素的 width 属性无效果原因及多种解决方案

先运行下程序看下: <span style='width:300px;'>123</span> 输出:123 可以看到 span会自动根据包含的内容来变化宽度 这是因为:对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素) width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout .而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 he

css中 Span 元素的 width 属性无效果原因及多种解决方案(转自http://www.cnblogs.com/hnyei/archive/2012/03/12/2392026.html)

先运行下程序看下: <span style='width:300px;'>123</span> 输出:123 可以看到 span会自动根据包含的内容来变化宽度 这是因为:对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素) width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout .而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 he

Canvas标签width属性和css的width属性

本篇只是一个渣渣写的笔记,要说的都在代码中的注释中,在我看来不求甚解的话没准根本不知道两者的区别更好 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Canvas标签width属性和css的width属性</title> <style type="text/css"> .mycanvas { border:

css超出一行添加省略号属性:text-overflow和white-space

css超出一行添加省略号属性:text-overflow和white-space A-A+ 前端博客?前端开发?CSS?14994View1 文章目录 1.text-overflow: ellipsis; 2.white-space属性 3.word-wrap 通过使用text-overflow和white-space属性来使文本在一行内显示,超出则加省略号,添加如下HTML代码: <p>前端开发博客专注前端开发和技术分享,如果描述超过100像素,则会隐藏,添加省略号</p> CS

CSS入门:CSS中Position、Float属性深入探讨

文章来源:http://www.zretc.com/technologyDetail/430.html Position.Float是平时使用频率非常高的两个CSS属性,对于这两个属性的使用,可能大多数人存在一些模糊与不清晰的地方.今天小卓为大家分享的文章主要是对这两个属性使用上的介绍,以及两个属性交叉使用上的一些探讨. 1.HTML布局的基本要点 如果要掌握.运用好Position.Float属性必须要对HTML的两个基本点有清晰的了解. 盒子模型(box model) HTML的普通流(no

关于css问题继承、权值问题

关于css问题: 一.Css的继承 .codeClass{color:#000000;} <p class="codeClass"><span>你好</span>世界</p> Span继承了,来自codeClass的color.也就是说,子元素会从父元素继承属性,当然不是所有的CSS属性都有继承性,文本属性(color.font.line-height.text-align.text-decoration.other)是具有继承性的,而自

[ css 深入理解 vertical-align line-height 属性 ] css中深入理解vertical-align和line-height的基友关系及实例演示的区别

一.想死你们了 几个星期没有写文章了,好忙好痒:个把月没有写长篇了,好忙好想:半个季度没在文章中唠嗑了,好痒好想. 后面一栋楼有对夫妻在吵架,声音雄浑有力,交锋酣畅淋漓,还以为只有小乡镇才有这架势,哦,突然想起来,我就是住在上海郊外的小乡镇上. 刚刚买了几十股京东的股票,第一次玩这个,看好京东的发展.其实股价21的时候就打算入手了,但是,转外汇的时候,提示,要工作时间.然后一忙二忘,等现在入的时候,已经涨了20%多了,科科,肥皂弄人啊!写到这里的时候,忍不住拿出手机一看,哎呦,不错哦,盈利28刀

css中如何使用border属性与display属性

原文:css中如何使用border属性与display属性 border属性介绍# border属性设置元素边框. 边框3个要素如:粗细.线型.颜色. 边框线型属性值说明表如:# 属性指 描述 none 定义无边框. hidden 与 "none" 相同.不过应用于表时除外,对于表,hidden 用于解决边框冲突. dotted 定义点状边框.在大多数浏览器中呈现为实线. dashed 定义虚线.在大多数浏览器中呈现为实线. solid 定义实线. double 定义双线.双线的宽度等

CSS的继承与优先级

CSS样式继承性 body,div,p{} html文档可以上图的种种节点树的形式表示,css层叠样式表中的各元素也有这种对应关系 <body>是文档中最大的根节点,body中的所有元素都是body的后代元素 从各元素的关系上分析:各元素之间有如下几种关系: E F 后代关系 E>F 父子关系 E,F (E,可以是任意的元素类型,可以跨级) E+F 相邻关系 详细说明: HTML文档是一种树状的结构.各元素之间有一定的层级关系.这种关系同样反映在CSS中. CSS中,内层元素将继承外层元