[css]如何让一个元素div1的宽度由子元素的宽度决定,并超出父元素div0

本文介绍了一种利用CSS实现div元素横排布局的方法,通过设置white-space:nowrap和display:table或inline-block属性来实现子元素撑开父元素宽度的效果,并提供了一个在线示例。
部署运行你感兴趣的模型镜像

这里针对的都是block的元素

div0

  div1

    div1_1

    div1_2

我希望做到的比较奇葩:

主要目的是使div横排

若div0的宽度够大,超过div1_1, div1_2的总和,则可以直接使用网上搜到的解决方案:使用float:left

在div1有一个较窄的父元素的情况下,希望div1的宽度可以由子元素撑开,超过父元素的宽度。。

div1中有并列的横排div1_1, div1_2

如果对div1_1, div1_2使用

float: left;

将会撑不开div1,自动换行,float会失效:


目标:


block元素的默认宽度是上一个指定宽度的父元素的宽度。

若希望能动态的生成一个由内容决定的宽度(这个问题叫shrinking wrap)

有几种做法 http://haslayout.net/css-tuts/CSS-Shrink-Wrap

比较好的做法是给div1使用css:

white-space:nowrap;/*如果没有这一条,子元素会自动换行*/

display: table; //or inline-block

div1的子元素使用:

display: inline-block;

vertical-align: top;/*使它看起来和float:left一样,默认是底部对齐,对于高度不一样的子div会有影响*/

//如果使用float:left; 将会失效,无法撑宽div1,仍然是两行


顺便推荐一个不错的在线测试网站:

http://jsfiddle.net/


html:

http://jsfiddle.net/PZT47/1

-----------------------------------

<!DOCTYPE HTML>
<html>
<head>
<style>
div{
border: 2px solid black;
margin: 5px
}
#container{
width : 200px;
height : 200px;
position : relative;
background : yellow;
overflow: visible;
}
#inncontainer{
white-space:nowrap;
display: inline-block;
background: cyan;
width: auto;
height : 190px;
  
}
#in1{
height:70px;
}
#in2{
height:80px;
}
.inner{
display: inline-block;
width:90px;
position : relative;
background: red;
}
</style>


    </head>
    <body>
<div id="container">
<div id="inncontainer">
<div id="in1" class="inner">a</div>
<div id="in2" class="inner">b</div> 
   </div>
</div>
</body>
</html>

参考的比较多,其他的找不到了:

http://stackoverflow.com/questions/450903/make-div-width-equal-to-child-contents

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 实现外层 `div` 滚动时子元素宽度父元素保持一致同步滚动 在实现外层 `div` 滚动时,确保子元素宽度父元素保持一致,且在滚动时子元素也同步滚动,可以通过以下方式实现: #### 1. 外层 `div` 设置滚动 外层 `div` 需要设置固定宽度启用横向滚动。通过设置 `overflow-x: auto` 来实现横向滚动功能。同时,为了确保内部子元素在滚动时不会换行,应使用 `white-space: nowrap`: ```css .parent { width: 300px; overflow-x: auto; white-space: nowrap; } ``` ```html <div class="parent"> <div class="child">内容1</div> <div class="child">内容2</div> <div class="child">内容3</div> </div> ``` 通过 `white-space: nowrap` 可以防止子元素换行,从而实现横向排列支持滚动。 #### 2. 子元素宽度父元素保持一致 为了确保子元素宽度父元素保持一致,可以将子元素设置为 `display: inline-block`,为其设置固定宽度。例如: ```css .child { display: inline-block; width: 100%; box-sizing: border-box; } ``` 这样,每个子元素宽度都会与父元素宽度保持一致,且在滚动时不会出现错位。 #### 3. 子元素同步滚动 如果希望子元素在滚动时保持同步,可以通过 JavaScript 监听外层 `div` 的 `scroll` 事件,将滚动位置同步到子元素上: ```javascript const parent = document.querySelector('.parent'); parent.addEventListener('scroll', () => { const scrollLeft = parent.scrollLeft; const children = document.querySelectorAll('.child'); children.forEach(child => { child.style.transform = `translateX(-${scrollLeft}px)`; }); }); ``` 该代码通过监听外层 `div` 的滚动位置,将每个子元素的 `transform` 设置为反向平移,从而实现子元素的同步滚动效果。 --- ### 示例代码 #### HTML + CSS 实现基本结构 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Scroll Sync Example</title> <style> .parent { width: 300px; overflow-x: auto; white-space: nowrap; border: 1px solid #ccc; padding: 10px; } .child { display: inline-block; width: 100%; box-sizing: border-box; padding: 10px; background-color: #f0f0f0; margin-bottom: 5px; } </style> </head> <body> <div class="parent"> <div class="child">内容1</div> <div class="child">内容2</div> <div class="child">内容3</div> </div> </body> </html> ``` #### JavaScript 实现子元素同步滚动 ```javascript const parent = document.querySelector('.parent'); parent.addEventListener('scroll', () => { const scrollLeft = parent.scrollLeft; const children = document.querySelectorAll('.child'); children.forEach(child => { child.style.transform = `translateX(-${scrollLeft}px)`; }); }); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值