Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Div占用剩余的水平空间,并在小屏幕上垂直堆叠

Div占用剩余的水平空间,并在小屏幕上垂直堆叠
EN

Stack Overflow用户
提问于 2013-07-01 15:32:30
回答 3查看 3.4K关注 0票数 5

我需要水平地并排堆叠两个div元素,其中右边的应该始终自动调整其大小以适应其内容(直到给定的最大宽度),而左边的应该只使用左边的空间。

如下所示:

到目前为止,没有问题。我已经设法做到了这一点,方法是将右侧的div浮动到右侧,并将左侧的溢出设置为隐藏:

HTML:

代码语言:javascript
代码运行次数:0
复制
<div class="frame">
    <div class="right">
        I adjust my with to my content but still need to know my boundaries if I'm floated right (max-width)
    </div>

    <div class="left">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    </div>
</div>

CSS:

代码语言:javascript
代码运行次数:0
复制
.frame {
    background-color: lightgreen;
    width: 80%;
    padding: 12px;
    overflow: hidden;
}

.left {
    overflow: hidden;

    background-color: #709670;
    border: 1px solid black;
}

.right {
    float: right;
    max-width: 200px;

    background-color: #127212;
    color: white;
    border: 1px solid black;
}

挑战在于,当页面显示在小屏幕(或小浏览器窗口,...)上时,我希望两个div垂直堆叠在一起。如下所示:

基本上,我认为这可以通过一个简单的媒体查询来完成:

代码语言:javascript
代码运行次数:0
复制
@media screen and (max-width: 700px) {
    .right {
        float: none;
        max-width: none;
    }
}

唯一的问题是需要在标记中创建右边的div (根据其内容调整大小),然后再创建左边的work,这样浮动的东西才能工作。因此,它在“小”布局中出现在左侧布局的上方:

下面是一个有效的示例(只需使用中间的调整大小在“小”和“大”布局之间切换):Example on JSFiddle

我已经尝试使用display: tabletable-cell来完成布局,而不是浮点,但是这样我无法使正确的列与其内容一样大,并且仍然有一个有效的最大宽度设置。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-01 15:50:53

正如in this stackoverflow post所说,如果你不想求助于jQuery,Flexbox可以帮助你,因为你只需要一个现代浏览器: Mobile Safari (编辑我也发现IE中left框的高度在我的提琴中不能正常工作,我不知道为什么;它应该)。

对于您来说,应该是: This awesome fiddle!

编辑由于您希望正确的div根据其内容进行调整,因此需要this example

CSS:

代码语言:javascript
代码运行次数:0
复制
.frame {
    position:relative;
    background-color: lightgreen;
    width: 80%;
    padding: 12px;
    overflow:hidden;
    flex-flow:row wrap;

    -webkit-justify-content: flex;
    -moz-justify-content: -moz-flex;
    justify-content: flex;

    display: -webkit-box; /* Safari */ 
    display: -moz-box; /* Firefox 21- */
    display: -ms-flexbox; /* IE 10+ */
    display: -webkit-flex; /* Chrome */
    display: flex; /* Standard (Firefox 22+) */

    -webkit-box-orient: horizontal;
    -moz-box-orient: horizontal;
    -webkit-box-direction: normal;
    -moz-box-direction: normal;
    -ms-flex-direction: row;
    -webkit-flex-direction: row;
    flex-direction: row;
}

.left {    
    -ms-flex-order: 1;     
    -webkit-order: 1;
    order:1;

    -webkit-box-flex: 2;      /* OLD - iOS 6-, Safari 3.1-6 */
    -moz-box-flex: 2;         /* OLD - Firefox 19- */
    -webkit-flex: 2;          /* Chrome */
    -ms-flex: 2;              /* IE 10 */
    flex: 2;                  /* NEW, Spec - Opera 12.1, Firefox 20+ */

    background-color: #709670;
    border: 1px solid black;
    width: auto;
}

.right {    
    -ms-flex-order: 2;
    -webkit-order: 2;
    order:2;

    -webkit-box-flex: 1;      /* OLD - iOS 6-, Safari 3.1-6 */
    -moz-box-flex: 1;         /* OLD - Firefox 19- */
    -webkit-flex: 1;          /* Chrome */
    -ms-flex: 1;              /* IE 10 */
    flex: 1;                  /* NEW, Spec - Opera 12.1, Firefox 20+ */

    background-color: #127212;
    color: white;
    border: 1px solid black;
    width: auto;

    -webkit-box-ordinal-group: 2;   /* OLD - iOS 6-, Safari 3.1-6 */
    -moz-box-ordinal-group: 2;      /* OLD - Firefox 19- */
    -ms-flex-order: 2;              /* TWEENER - IE 10 */
    -webkit-order: 2;               /* NEW - Chrome */
    order: 2;                       /* NEW, Spec - Opera 12.1, Firefox 20+ */
}

@media screen and (max-width: 700px) {
    .frame {
        -webkit-box-orient: vertical;
        -moz-box-orient: vertical;
        -webkit-box-direction: normal;
        -moz-box-direction: normal;
        box-orient: vertical;
        -ms-flex-direction: column;
        -webkit-flex-direction: column;
        flex-direction: column;
    }
}

我对我的结果非常满意,我觉得你也会的!我相信它几乎完全支持(Mobile Safari不支持它)!

票数 6
EN

Stack Overflow用户

发布于 2013-07-01 16:23:45

一种基于CSS/jQuery的方法

假设HTML和内容可以按如下方式进行调整,其中.left元素出现在.right元素之前:

代码语言:javascript
代码运行次数:0
复制
<div class="frame">
    <div class="left">Lorem ipsum dolor sit amet, c...</div>
    <div class="right">
        <div class="color-wrap">I adjust my width ...</div>
    </div>
</div>

对于宽屏幕,您可以使用以下CSS:

代码语言:javascript
代码运行次数:0
复制
.frame {
    background-color: lightgreen;
    width: 80%;
    padding: 12px;
    overflow: auto;
}
.left {
    background-color: #709670;
    border: 1px solid black;
    display: table-cell;
}
.left .color-wrap {
}
.right {
    display: table-cell;
    width: 200px;
    vertical-align: top;
}
.right .color-wrap {
    background-color: #127212;
    color: white;
    border: 1px solid black;
    display: inline-block;
}

对于较小的屏幕:

代码语言:javascript
代码运行次数:0
复制
@media screen and (max-width: 700px) {
    .left {
        display: block;
    }
    .right {
        display: block;
        width: auto;
    }
    .right .color-wrap {
        display: block;
        width: auto;
        color: yellow;
    }
}

对于大屏幕,您可以使用display: table-cell并设置.right元素的宽度,或者使用最大宽度和最小宽度的组合,这取决于您希望如何处理单行文本的结尾大小写。

如果您需要背景颜色来仅绘制文本区域,则使用包装元素,如.color-wrap,并将背景颜色应用于该元素,而不是应用于表格单元格父元素。

对于较小的屏幕,将display属性重置为block;对于.right,将display属性设置为width: auto

这是一种相对简单的方法,只有一个约束与处理.right具有单行文本的情况有关。

处理右侧的短线-调整宽度

要允许.right块收缩以适应单行内容,您需要调整.right表格单元格的宽度。

这可以使用以下jQuery来完成:

代码语言:javascript
代码运行次数:0
复制
var rightCellMaxWidth = parseInt($(".right").css("width"));

function fixRightCellWidth() {
    $(".right .color-wrap").each(function () {
        var rightCellWidth = $(this).outerWidth();
        var rightCellType = $(this).css("display");
        if (rightCellWidth < rightCellMaxWidth 
            && rightCellType == "inline-block") {
            $(this).parent().width(rightCellWidth);
        } else {
            $(this).parent().removeAttr("style");
        }
    });
}

$(window).resize(function () {
    fixRightCellWidth();
});

fixRightCellWidth();

诀窍是获得元素.right .color-wrap的宽度。您还需要检查显示类型以查看您所处的媒体模式,对于大屏幕使用inline-block,对于较小屏幕使用block

对于较大的屏幕,将右侧表格单元格元素宽度设置为.color-wrap子级的宽度。对于单行文本,宽度将小于200px;对于多行文本,宽度将为最大宽度值200px。

您还需要删除内联样式,以清除多行情况或小屏幕情况的宽度设置。

演示小提琴:http://jsfiddle.net/audetwebdesign/N4KE2/

设计注释

如果没有JavaScript/jQuery,页面将优雅地降级为固定宽度的右元素,并且页面仍将可用。

票数 3
EN

Stack Overflow用户

发布于 2013-07-01 15:44:11

我想不出任何纯粹的CSS解决方案,但是如果你倾向于使用jquery,你可以像这样使用append方法:

代码语言:javascript
代码运行次数:0
复制
$('.frame').append($('.right'));

这只会将你的“右”块移动到“frame”子元素的末尾。

获取屏幕/窗口/框架宽度有许多解决方案,具体取决于您的浏览器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17408256

复制
相关文章
Fiddler 抓取https请求
  在日常测试中,不管是功能测试还是接口测试,避免不了抓包。抓包工具有很多,这里只讲fiddler的使用,并且是对https请求的抓取。
全栈测试开发日记
2023/02/02
1.1K0
Fiddler 抓取https请求
如何用 fiddler 捕获 https 请求
安装完 Fiddler 后,我们每次打开浏览器输入 url,Fiddler 便会捕获到我们的 http 请求(Fiddler 是以代理 web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888. 当浏览器打开时 Fiddler 会自动设置代理,退出的时候它会自动注销代理,这样就不会影响别的程序)。但是,如果要捕获 https 的请求,我们还需要进行一些额外的设置。
全栈程序员站长
2022/07/05
7720
如何用 fiddler 捕获 https 请求
使用Fiddler把请求从HTTPS改成HTTP
为什么我要把请求从 HTTPS 改成 HTTP?这是因为生产环境是 HTTPS 的,而测试环境却是 HTTP 的,我要在测试环境测试应用,所以需要把请求从 HTTPS 改成 HTTP。为什么我不在测试环境部署一套 HTTPS 证书?这是因为 HTTPS 证书属于敏感信息。
LA0WAN9
2021/12/14
9950
使用Fiddler把请求从HTTPS改成HTTP
iOS 10.3下使用Fiddler抓取HTTPS请求
最近使用Fiddler抓取手机上的HTTPS请求时,遇到一个问题。设置完之后,访问HTTPS的页面,却得到一个错误
meteoric
2018/11/19
8210
通过证书请求Https站点
前几天在做与平安银行对接接口,主要是给平安银行推送用户数据(申请贷款的用户),平安银行提供的是https的地址,请求https地址的时候还要发送证书,刚接到这个任务的时候一头雾水,百度上各种所搜,最后还是给解决了。
写代码的猿
2019/04/11
1.2K0
通过证书请求Https站点
Fiddler抓包1-抓firefox上https请求
前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书。 一、网页不安全 1.用fiddler抓包时候,打开百度网
上海-悠悠
2018/04/08
1.1K0
Fiddler抓包1-抓firefox上https请求
Fiddler 使用fiddler无法抓取苹果手机https请求问题解决方案
手机浏览器访问代理主机监听端口(例中为:http://192.168.0.104:8888,其中192.168.0.104为fiddler所在主机地址,8888为fiddler监听端口),如下
授客
2020/07/16
1.9K0
通过CURL请求示例详解HTTPS协议
基于HTTPS通信是当前互联网最通用便捷的通信方式,简单理解来看可以视为HTTP协议 + SSL/TLS协议,通过一个curl的示例阐述一下HTTPS协议。 特性: 信息加密传输,防止窃听风险 具有校验机制,防止篡改风险 配备身份证书,防止冒充风险 版本变更 SSL1.0 1994年,未发布 SSL2.0 1995年,有严重漏洞 SSL3.0 1996年,大规模应用,有风险现在不建议 TLS1.0 1999年(别称SSL3.1) TLS1.1 2006年(别称SSL3.2) TLS1.2 2008年,201
企鹅号小编
2018/02/01
2.2K0
Fiddler请求过滤
在上一篇:Fiddler抓包基本介绍,了解了如何抓取HTTPS请求以及APP请求。由于 Fiddler 会抓取所有的 HTTP 请求,这样会造成左侧会话的请求不断更新,对我们的调试造成干扰。因此可以通过过滤规则的设置,从而来过滤掉不需要的请求。
可可的测试小栈
2020/02/14
3.8K0
Fiddler请求过滤
HTTPS 原理以及fiddler解密
HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换,然后在后续通信过程中就使用协商密钥进行对称加密通信。
霍格沃兹测试开发学社
2022/06/26
8710
如何用Fiddler抓取https
对Fiddler进行设置设置监听端口下载Fiddler的证书查看请求中的内容 对Fiddler进行设置: 步骤: 勾选“CaptureHTTPS CONNECTs”; 勾选“Decrypt HTTPS traffic”。 选项框中选择“...fromremote clients only”。(因为我们是通过wifi链接) (1)from all processes来自所有的进程,包括客户端和浏览器 (2)from browsers only 只接受来自浏览器的请求 (3)from non-browsers
企鹅号小编
2018/01/15
1.2K0
如何用Fiddler抓取https
HTTPS 原理以及fiddler解密
HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换,然后在后续通信过程中就使用协商密钥进行对称加密通信。
霍格沃兹测试开发Muller老师
2022/06/09
5540
Chrome使用Fiddler抓HTTPS包
Chrome从35之前的某一版本开始会检查HTTPS证书,如果不是信任的证书会阻止访问,报: Failed to load resource: net::ERR_INSECURE_RESPONSE 所以就没办法使用Fiddler抓HTTPS包了。 解决方式是启动Chrome的时候加上 –ignore-certificate-errors 参数,这样Chrome就不会检查证书了。
drunkdream
2018/07/06
6870
我不想过一眼可以看到头的人生
很多创业的小伙伴,可能和我一样。早已厌倦在大公司做一个华丽的螺丝钉,或是一直以来都怀揣一个创业的梦想,希望在年轻的时候做一番轰轰烈烈的大事。选择创业,应该会有很多的原因,但我知道可能有一个共同的理由:不想过一眼可以看到头的人生。
光荣与梦想1987
2018/09/11
7110
HTTPS协议下Fiddler抓包
浏览器通过http协议发送给服务器的内容很容易被拦截,因此,用http协议传输一些敏感数据的话是非常危险的,因此,现在好多网站都采用的是https协议。
小博测试成长之路
2021/03/08
2.8K0
HTTPS协议下Fiddler抓包
Fiddler——如何抓取PHP的curl请求
本文主要介绍如何使用fiddler工具,来进行抓取PHP的curl请求,如果你会使用fiddler,那就是一行代码的事,
思索
2024/08/16
1670
Fiddler——如何抓取PHP的curl请求
使用fiddler模拟http请求
以前看见过,没发,现在又看见了,向大家推荐一下: 概述 与httpwath相比,fiddler能模拟http请求、能断点调试、http分析统计吸引了我,使用之后感觉这个工具非常不错,这篇文章只单介绍一下fiddler工作原理,简单介绍一下它的重要功能,以及如何使用使用fiddler模拟http请求,满足移动服务端开发人员调试的问题。对于其他的功能大家可以自己研究一下。 fiddler工作原理: 当你启动了Fiddler,程序将会把自己作为一个微软互联网服务的系统代理。作为系统代理,所有的来自
逸鹏
2018/04/09
1.8K0
使用fiddler模拟http请求
手机抓包HTTPS (Fiddler & Packet Capture)
打开 Connections 允许远程主机链接 此操作需重启Fiddler生效
WindRunnerMax
2020/08/27
2.8K0
手机抓包HTTPS (Fiddler & Packet Capture)
Fiddler抓包升级,安装https证书
  之前借助过Fiddler来抓取微信公众号的文章和留言(Https协议的,下一篇介绍),所以安装https证书又是必不可少的,这里简单还原下安装步骤。如果没有正确安装证书,Fiddler抓包的时候会提示:HTTPS traffic decryption error: System.Security.Authentication.AuthenticationException
happyJared
2018/09/20
2.6K0
Fiddler抓包升级,安装https证书
https请求过程
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
陈灬大灬海
2018/09/12
4.9K0
https请求过程

相似问题

Fiddler可以解密https通信量。

10

为什么可以嗅探HTTPS / SSL请求?

20

使用HTTPS,可以看到目标域吗?

20

PC客户端能看到HTTPS请求参数吗?

30

UserName和密码信息可以在https上看到。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文