行内块元素间距导致变形问题解决及行内元素、块元素、行内块元素总结

行内块元素标签默认间距问题导致样式变形问题

前几天开发中遇到一个布局问题,需求是在已有模块的基础上,点击按钮动态生成一个相同模块,本以为很简单的一个需求,竟被布局间隔问题折磨了大半天才找到原因。
具体效果及代码如下:

要实现的效果

代码如下:

//模板代码

<div class="form-group apply-servel">
    <div class="add-wrap">
        <div class="flow apply-wrap">
            <label for="inputName" class="apply-title">应用服务</label>
            <select class="select-wrap select-wrap-server apply-select">
                <option value="1">应用组1</option>
                <option value="2">应用组2</option>
                <option value="3">应用组3</option>
            </select>
        </div>
        <div class="flow">
            <label class="flow-title">流量</label>
            <div class="flow-text">
                <input type="text" class="apply-flow" id="" name="inputName" value="" placeholder="">
            </div>
            <span class="flow-unit">MB</span>
        </div>
        <div class="flow">
            <label class="flow-title">周期</label>
            <div class="flow-text">
                <input type="text" class="apply-time" id="" name="inputName" value="" placeholder="">
            </div>
            <span class="flow-unit">月</span>
        </div>
        <div class="flow flow-chose">
            <input type="checkbox"  class="apply-chose"> 
            <span>显示</span>
        </div>
    </div>
</div>

//js代码
$('.add-btn').click(function() {
    var html="";
    html = '<div class="add-wrap"><div class="flow apply-wrap"><label for="inputName" class="apply-title">应用服务</label><select class="select-wrap select-wrap-server apply-select">' + optionHtml + '</select></div><div class="flow"><label class="flow-title ">流量</label><div class="flow-text"><input type="text" class="apply-flow" id="" name="inputName" value="" placeholder=""></div><span class="flow-unit">MB</span></div><div class="flow"><label class="flow-title">周期</label><div class="flow-text"><input type="text" class="apply-time" id="" name="inputName" value="" placeholder=""></div><span class="flow-unit">月</span></div><div class="flow flow-chose"><input type="checkbox" class="apply-chose"><span>显示</span></div></div>';
    $('.apply-servel').append(html);

})

可是结果却不尽人意,结果如下:

最开始以为是样式中有浮动或者是定位影响到了,可是排查了几遍也没发现问题,看看代码,看看效果真是百思不得其解,无奈丢在一边先做其他事情。到了晚上回过头来再看这个问题,js的生成标签和模板里的标签到底有什么不同呢?突然灵光乍现, 是标签间 间距!!! 瞬间想起了之前看行内块元素的时候,有说到,行内块元素之间,浏览器会有一个默认间距,可以通过标签在同一行显示来清除。试了一下把标签放在一行显示果真达到了想要的效果。终于找到了问题的根源,小小的问题点关键的时候,还是很容易疏忽的,现在就来总结一下行内块元素默认间距问题解决办法,毕竟放在一行代码可读性不强,看起来也不太简洁。最后查阅文章总结了如下方法,分享给大家。

总结:行内块元素间距解决方法

  1. 将所有标签全部放在一行显示,超出一行自动换行。(如例子中js代码写法,可读性比较差)
  2. 给行内块元素的父级元素,设置word-spacing为负值,抵消浏览器默加的间距。(一般字体为14,设置-4即可,可根据实际字体大小调整)。
  3. 给行内块元素的父级元素设置font-size:0,行内块元素再设置对应的font-size值。(子元素一定要重新设置font-size值,不然你的文字就没啦)
  4. 给行内块元素的父级元素设置letter-spacing为负值,行内块元素设置letter-spacing为0。(一般字体为14,设置-4即可,可根据实际字体大小调整)。
  5. 给行内块元素设置浮动,这样也不会有间距了。

好啦以上就是行内块元素(display:inline-block),浏览器默认间距问题de解决办法,亲测有效,如果什么问题欢迎提出指正。另外肯定还有其他方法可以实现,大家可以找找看!

延伸扩展

既然聊到了行内元素,那我们就在一起回归一下行内元素、块元素、行内块元素之间的区别和联系

行内元素(display:block)
内容:行内元素只占据它对应标签的边框所包含的空间。
格式:默认情况下,行内元素不会以新行开始。
常见行内元素:span、img、a、label、input、em、i、textarea、select、small、sub、sup,strong...
内容模型:一般情况下,行内元素只能包含数据和其他行内元素。
特性:不可以设置宽(width)、高(height)、行高(line-height),可以设置内边距(padding)以及左右外边距(margin-left,margin-right);

块级元素(display:inline)
内容:块级元素占据其父元素(容器)的整个空间。
格式:默认情况下,块级元素会新起一行。
常见块级元素:div、p、h1~h6、ul、li、hr、header、section、aside、footer...
内容模型:一般块级元素可以包含行内元素和其他块级元素。
特性:可以设置宽度(width)、高度(height)、内边距(padding)和外边距(margin)

行内块元素(display:inline-block)
行内块元素是一个集两者特性的一类元素,该元素既有行内元素的特性又有块元素的特性,既可以设置宽高、margin、padding,又可以和其他行内元素在一行显示。

注意:
1、行内元素、块元素、行内块元素三者可以通过display属性相互装换。
2、有些元素虽然是行内元素也可以设置宽高比如 img、input、select、textarea、button、label,这些又称为置换元素(属性和行内块元素一致,有兴趣的小伙伴可以自行查阅)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335