代码之家  ›  专栏  ›  技术社区  ›  Travis Martin

半屏幕固定部分,半滚动至内容。然后反转截面

  •  1
  • Travis Martin  · 技术社区  · 7 年前

    http://jsfiddle.net/avrahamcool/dtWWA/

    这是每个部分的大致布局。

    http://jsfiddle.net/QMsuD/191/

    #container-main {
      background: tan;
      display: flex;
      width: 100vw;
      height: 100vh;
      justify-content: flex-start;
    }
    
    #container-gray {
      background: gray;
      display: flex;
      flex-direction: row;
      height: 100%;
      width: 50%;
      justify-content: center;
    }
    
    #container-black {
      background: black;
      display: flex;
      flex-direction: column;
      height: 100%;
      width: 50%;
      justify-content: flex-end;
    }
    
    #hello {
      background: blue;
      flex: .5;
      align-self: center;
    }
    
    #container-nav {
      background: white;
      display: flex;
      flex-direction: row;
      justify-content: space-around;
    }
    
    #how {
      background: orange;
    }
    
    #are {
      background: purple;
    }
    
    #you {
      background: pink;
    }
    
    #container-content {
      background-color: beige;
      display: flex;
      flex-direction: column;
      height: 100%;
      width: 50%;
      justify-content: flex-start;
    }
    
    .headings {
      width: 49%;
      align-self: center;
      flex: 1;
    }
    
    .articles {
      width: 85%;
      align-self: center;
    }
    <div id=container-main>
      <div id="container-gray">
        <div id="container-black">
          <p id="hello">Hello</p>
          <div id="container-nav">
            <p id="how">How</p>
            <p id="are">are</p>
            <p id="you">you</p>
          </div>
        </div>
      </div>
      <div id="container-content">
        <h1 class="headings">First heading</h1>
        <article class="articles">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse pharetra enim sagittis velit iaculis, a consectetur nisi sagittis. Etiam sagittis enim sapien, in ultricies nibh maximus quis. Nulla facilisi. Ut mattis gravida semper. Nam nec lacinia
          nulla. Proin euismod dolor lacus, id sagittis sem viverra accumsan. Curabitur eros est, vehicula vel nibh eget, gravida porttitor turpis. Vivamus a sollicitudin nisl.
        </article>
        <h1 class="headings">Second heading</h1>
        <article class="articles">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse pharetra enim sagittis velit iaculis, a consectetur nisi sagittis. Etiam sagittis enim sapien, in ultricies nibh maximus quis. Nulla facilisi. Ut mattis gravida semper. Nam nec lacinia
          nulla. Proin euismod dolor lacus, id sagittis sem viverra accumsan. Curabitur eros est, vehicula vel nibh eget, gravida porttitor turpis. Vivamus a sollicitudin nisl.
        </article>
        <h1 class="headings">Third heading</h1>
        <article class="articles">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse pharetra enim sagittis velit iaculis, a consectetur nisi sagittis. Etiam sagittis enim sapien, in ultricies nibh maximus quis. Nulla facilisi. Ut mattis gravida semper. Nam nec lacinia
          nulla. Proin euismod dolor lacus, id sagittis sem viverra accumsan. Curabitur eros est, vehicula vel nibh eget, gravida porttitor turpis. Vivamus a sollicitudin nisl.
        </article>
        <h1 class="headings">Fourth heading</h1>
        <article class="articles">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse pharetra enim sagittis velit iaculis, a consectetur nisi sagittis. Etiam sagittis enim sapien, in ultricies nibh maximus quis. Nulla facilisi. Ut mattis gravida semper. Nam nec lacinia
          nulla. Proin euismod dolor lacus, id sagittis sem viverra accumsan. Curabitur eros est, vehicula vel nibh eget, gravida porttitor turpis. Vivamus a sollicitudin nisl.
        </article>
      </div>
    </div>
    2 回复  |  直到 7 年前
        1
  •  0
  •   Michael Coker    7 年前

    你可以做一堆 flex 行作为主要部分,添加 overflow-y: scroll position: sticky flex-grow: 1 (或 flex: 1 0 0 (简而言之)以50/50的宽度分割。然后绝对地在内容中放置一个元素,使主部分与边栏的高度匹配。

    :nth-child() 使用flex order 所有物

    * {box-sizing:border-box;}
    
    section {
      max-width: 640px;
      overflow-y: scroll;
      margin: auto;
      border: 1px solid #999;
      display: flex;
      background: #333;
    }
    section:nth-child(even) main {
      order: -1;
    }
    aside,main {
      flex: 1 0 50%;
    }
    aside,.inner {
      padding: .5em;
    }
    aside {
      background: #eee;
      position: sticky;
      top: 0; left: 0;
    }
    main {
      position: relative;
      color: white;
    }
    .inner {
      position: absolute;
      top: 0; left: 0; right: 0; bottom: 0;
    }
    <section>
      <aside>
        aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>
    
      </aside><main>
        <div class="inner">
          main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>
    
        </div>
    
      </main>
    </section>
    <section>
      <aside>
        aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>
    
      </aside><main>
        <div class="inner">
          main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>
    
        </div>
    
      </main>
    </section>
    <section>
      <aside>
        aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>
    
      </aside><main>
        <div class="inner">
          main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>
    
        </div>
    
      </main>
    </section>
    <section>
      <aside>
        aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>aside<br>
    
      </aside><main>
        <div class="inner">
          main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>main<br>
    
        </div>
    
      </main>
    </section>
        2
  •  0
  •   Kelley Rose    7 年前

    您应该能够添加 #overflow: hidden container-main overflow: scroll #container-content 为了实现右部分滚动的目标,而左部分保持静止,直到到达两者的末尾。