RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 641841
Accepted
humster_spb
humster_spb
Asked:2020-03-20 17:05:10 +0000 UTC2020-03-20 17:05:10 +0000 UTC 2020-03-20 17:05:10 +0000 UTC

position: fixed 如何处理元素流中的宽度和位置?

  • 772

现场有这样一个原型(最好全屏观看):

body {
	font-size: 20px;
}

.container {
	border-left: 1px solid silver;
  border-right: 1px solid silver;
}

aside {
	background-color: silver;
	border-radius: 5px;
	padding: 10px;
}

aside ul {
	margin: 0;
}

aside ul li {
	list-style: none;
	margin: 5px;
}

.main {
	background-color: gray;
	border-radius: 5px;
}

#comp, #uslugi, #zakaz, #kontakt {
	height: 400px;
	padding: 20px;
	margin: 20px 5px;
	background-color: silver;
	border-radius: 5px;
}
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<div class="container">
    <div class="jumbotron"><h1>Компания</h1></div>
	  <aside class="col-md-3">
	    <ul>
		    <li>О компании</li>
		    <li>Услуги</li>
		    <li>Заказать</li>
		    <li>Контакты</li>
		  </ul>
	  </aside>
	  <div class="main col-md-8 col-md-offset-1">
	     <div id="comp">Здесь информация о компании</div>
		   <div id="uslugi">Тут описание наших услуг</div>
		   <div id="zakaz">В этом блоке можно оформить заказ</div>
		   <div id="kontakt">Здесь - связаться с нами</div>
	  </div>
</div>

任务是让它只有包含所有信息的主块滚动,而超大屏幕和菜单保留在原位。我为他们设置了 position: fixed 并得到了这个垃圾:

在此处输入图像描述

很明显,随着手鼓跳舞对 left、top、margin、z-index 等进行操作。您可以在页面上实现或多或少可以接受的元素排列(尽管这与“拐杖”非常相似,这很糟糕)。

但最糟糕的是,固定元素的宽度被破坏了:对于超大屏幕,它会折叠,而对于菜单,由于某种原因,它会相反地展开:

在此处输入图像描述

我不想强迫它们有一定的宽度(这样就完全失去了使用引导网格的意义,你将不得不为不同的屏幕尺寸手动调整这个宽度)。

问题:有什么方法可以处理 position: fixed 的元素,让它们在流中保持宽度和位置?

html
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Pavel Mayorov
    2020-03-20T17:53:43Z2020-03-20T17:53:43Z

    这是固定块的预期行为。如果您需要这些块不爬出网格,并且在页面上为它们保留一个位置也无妨,您可以尝试制作两个相同的块。

    第一个 - 安装visibility: hidden后,它会简单地计算位置。第二个 - 对于已安装的position: fixed,需要通过脚本将其严格放置在第一个之上。

    最好先显示第一个块,然后用脚本隐藏它——然后页面将正确显示,直到脚本开始。而如果。第二个块可以使用相同的脚本创建,以免受到布局的影响。

    结果会是这样的:

    $(".jumbotron, aside").each(function() {
      var $this = $(this), $copy = $this.clone().insertAfter($this);
    
      $this.css('visibility', 'hidden');
      $copy.css('position', 'fixed')
        .css('z-index', '1');
    
      setBounds();
      $(window).on('resize', setBounds);
    
      function setBounds() {
        var offset = $this.offset();
        $copy.css({
            left: offset.left,
            top: offset.top,
            width: $this.outerWidth(),
            height: $this.outerHeight(),
        });
      }
    })
    
    • 2
  2. Qwertiy
    2020-03-21T01:30:08Z2020-03-21T01:30:08Z

    现在还为时过早,但我仍然会写下这个答案——当它派上用场时突然间:

    body {
      margin: auto;
      width: 70%;
    }
    
    header {
      position: sticky;
      top: 0;
      background: silver;
      overflow: hidden;
    }
    <header>
      <h1>Это заголовок</h1>
      <p>
        Он всегда остаётся в верху страницы
        <br>
        <span style="color:red">Но только в Chrome 56+ и FF 32+</span>
      </p>
    </header>
    
    <section>
      <h1>А это - часть контента</h1>
      <p>Она скроллится под заголовком</p>
    </section>
    
    <section>
      <h1>Ещё контент</h1>
      <p>Lorem ipsum integer amet at <i>nulla mauris</i> sapien nulla, proin ligula elementum a auctor. Tellus sagittis, sed <a href="#">nam: sodales, quisque: eget</a> curabitur leo morbi urna. Sit curabitur ultricies congue, rutrum mattis quisque amet sed&nbsp;&mdash; congue tellus, sapien <b>nibh, at leo quam</b> at gravida et eget congue. Enim <b>nulla maecenas diam, adipiscing</b> ipsum <i>vulputate, vivamus in</i> diam curabitur, adipiscing, ornare enim et integer ut elementum urna. Duis tempus vitae massa ultricies metus non vitae adipiscing, metus non eros fusce. Diam&nbsp;&mdash; orci amet diam integer nibh&nbsp;&mdash; lectus porttitor, congue enim arcu tellus tempus, curabitur massa quam&nbsp;&mdash; sodales in eget. Nibh lectus, porttitor rutrum, congue orci sodales metus rutrum, <b>quisque vivamus.</b> Proin ultricies cursus pellentesque rutrum cursus massa <b>lorem sagittis ut</b> sodales.</p><p>Pharetra urna, eros sagittis <b>orci mauris auctor sapien lorem</b> malesuada porta congue lorem metus eros molestie nam leo, lorem: mattis sed. Pharetra&nbsp;&mdash; <a href="#">at, ultricies, sit mattis, porta eget</a> leo, sodales vitae metus ornare <b>diam duis ut lorem elementum</b> nulla nam. Ipsum arcu fusce, <i>auctor ornare</i> sodales pharetra quam duis, at. Integer molestie non nulla sodales sit morbi nibh tellus congue fusce enim&nbsp;&mdash; fusce non, ipsum malesuada porttitor at <b>eros. Sed</b> commodo arcu magna, congue lectus sed cursus <i>eu sem ligula lectus ligula arcu nam urna</i> integer, morbi maecenas.</p><p>In amet, a malesuada curabitur <a href="#">risus leo</a>, eros amet morbi curabitur sit: rutrum nam ultricies orci. In vitae justo nibh pellentesque curabitur vitae non sodales tempus congue donec in tellus orci porttitor adipiscing at quisque curabitur. Morbi tempus congue ornare diam&nbsp;&mdash; quam malesuada <a href="#">morbi arcu</a> ut&nbsp;&mdash; metus sem porta massa commodo duis eget curabitur auctor <a href="#">vivamus pellentesque enim</a> metus mauris morbi. Sodales lectus ornare lectus vitae enim pharetra nibh sem eget orci ultricies ut amet fusce mattis diam ligula vivamus et fusce eros curabitur. Sed urna curabitur, porta donec massa sagittis tellus non mauris, ligula risus: urna&nbsp;&mdash; lorem.</p><p>Vitae sem sed mattis quisque proin ligula enim arcu duis massa: sagittis orci ut. Lorem elementum integer curabitur proin donec molestie leo ornare quisque ornare ligula, proin donec eget risus, <a href="#">auctor lorem.</a> Pharetra nibh arcu commodo, adipiscing, quam pharetra porta molestie sapien, sagittis quisque curabitur at nam. Arcu <a href="#">ipsum eu orci sagittis nam</a> pharetra pellentesque sed: porttitor lorem ornare sit vivamus porta magna.</p><p>Eget duis lorem tempus pellentesque non mattis quisque, donec: justo donec ipsum, et lorem morbi leo <a href="#">a. Sem</a>: nam, <b>nibh nam justo in eget lorem, pharetra</b> fusce risus leo ultricies tellus integer arcu leo lorem.</p> 
    </section>

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5