2

スティッキー フッターを適用しようとしていますが、Orchard 内でこれを実装するのに問題があります。

以前の Web サイトで、次のスティッキー フッター メソッドをうまく適用しました: http://www.cssstickyfooter.com/using-sticky-footer-code.html

Orchard 内でスティッキー フッターを機能させることができず、それについて何も見つけることができません。

既存のすべての CSS を削除して、成功せずに機能しない理由を突き止めようとしました。firebug を使用して HTML を検査するときも賢明ではありません。

使用するテンプレート: カスタム テーマ ベースのテーマ マシン (構造に関しては変更なし)。

問題:

ゾーンのパディングsite.cssがこれらの奇妙な問題を引き起こしています。しかし、スティッキーフッターを実現できるように、これからパディングを維持するにはどうすればよいですか?

ゾーンのパディングがないと、すべてのゾーンに必要なすべてのパディングがなくなるためです。

/* Zones */
.zone 
{
    padding: 10px;
}

または、Orchard がスティッキー フッターを実現するためにより適した方法が他にありますか?

補足質問

@tag.StartElement と @tag.EndElement の目的は何ですか?

CSS: (フッターの高さは正確に 40px です)

html, body
{
  height: 100%;
}

#layout-wrapper { min-height: 100%; }

#layout-footer 
{
    position: relative;
    margin-top: -40px; /* negative value of footer height */
    clear:both;
    background-color: #030e27;
}

レイアウト.cshmtl:

@tag.StartElement
@if (Model.Header != null) 
{
    <header>
        <div id="layout-header" class="group">
            <div id="header">
                @Zone(Model.Header)
            </div>
        </div>
        <div id="layout-header-bottom"></div>
    </header>   

}

@if (Model.Navigation != null) 
{
    <div id="layout-navigation" class="group">
        <div id="navigation">
            @Zone(Model.Navigation)
        </div>
    </div>
}


@if (Model.Featured != null) {
<div id="layout-featured" class="group">
    @Zone(Model.Featured)
</div>
}
@if (Model.BeforeMain != null) {
<div id="layout-before-main" class="group">
    @Zone(Model.BeforeMain)
</div>
}

<div id="layout-main-container">
<div id="layout-main" class="group">
    @if (Model.AsideFirst != null) {
    <aside id="aside-first" class="aside-first group">
        @Zone(Model.AsideFirst)
    </aside>
    }
    <div id="layout-content" class="group">
        @if (Model.Messages != null) {
        <div id="messages">
            @Zone(Model.Messages)
        </div>
        }
        @if (Model.BeforeContent != null) {
        <div id="before-content">
            @Zone(Model.BeforeContent)
        </div>
        }
        @* the model content for the page is in the Content zone @ the default position (nothing, zero, zilch) *@
        @if (Model.Content != null) {
        <div id="content" class="group">
            @Zone(Model.Content)
        </div>
        }
        @if (Model.AfterContent != null) {
        <div id="after-content">
            @Zone(Model.AfterContent)
        </div>
        }
    </div>
    @if (Model.AsideSecond != null) {
    <aside id="aside-second" class="aside-second">
        @Zone(Model.AsideSecond)
    </aside>
    }
</div>
</div>

@if (Model.AfterMain != null) {
<div id="layout-after-main" class="group">
    @Zone(Model.AfterMain)
</div>
}
@if (Model.TripelFirst != null || Model.TripelSecond != null || Model.TripelThird != null) {
<div id="layout-tripel-container">
<div id="layout-tripel" class="group">@* as in beer *@
    @if (Model.TripelFirst != null) {
    <div id="tripel-first">
        @Zone(Model.TripelFirst)
    </div>
    }
    @if (Model.TripelSecond != null) {
    <div id="tripel-second">
        @Zone(Model.TripelSecond)
    </div>
    }
    @if (Model.TripelThird != null) {
    <div id="tripel-third">
        @Zone(Model.TripelThird)
    </div>
    }
</div>
</div>
}
@tag.EndElement
<div id="layout-footer" class="group">
    <footer id="footer">
        <div id="footer-quad" class="group">
            @if (Model.FooterQuadFirst != null) {
            <div id="footer-quad-first">
                @Zone(Model.FooterQuadFirst)
            </div>
            }
            @if (Model.FooterQuadSecond != null) {
            <div id="footer-quad-second">
                @Zone(Model.FooterQuadSecond)
            </div>
            }
            @if (Model.FooterQuadThird != null) {
            <div id="footer-quad-third">
                @Zone(Model.FooterQuadThird)
            </div>
            }
            @if (Model.FooterQuadFourth != null) {
            <div id="footer-quad-fourth">
                @Zone(Model.FooterQuadFourth)
            </div>
            }
        </div>
        @if(Model.Footer != null) {
        <div id="footer-sig" class="group">
            @Zone(Model.Footer)
        </div>
        }
    </footer>
</div>

アップデート

次の Orchard CSS の削除と組み合わせた Derk のソリューションは、そのトリックを行っているようです。

/* Clearing Floats
***************************************************************/

.group:after 
{
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}


.zone:after, .widget-control:after /* .zone:after self clears every zone container - .widget-control:after self clears any floats used in a widget */
{
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}

更新 2

クリアフロート csschanging content: "."を削除する代わりにcontent: ""、同じ効果があるようです。

この原因の説明をいただければ幸いです。

よろしく、Zer。

4

1 に答える 1

3

そのパディングの問題については、このボーダーボックス方式を確認することをお勧めします。パディングをdivの外側ではなく内側に移動します。したがって、プロジェクト全体でパディングやdiv幅などを計算する必要はありません。とても助かります!

/* apply a natural box layout model to all elements */
* { 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    box-sizing: border-box; 
}

あなたのスタイルの一番上にドロップするだけです!サイトを形に戻すには多少の調整が必要かもしれませんが、それだけの価値はあります。

しかし今のところ:それをあなたの.zoneのものに追加してください:

.zone {
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    box-sizing: border-box;
    padding: 10px;
}

あなたはここでそれについてもっと読むことができます:ポール・アイリッシュはボーダーボックスについて話します

フッターの場合:

このペンをチェックしてください:加重フッター

コードにはすでにhtmlとbodyが含まれていますが、ある種のラッパーはありますか?

そうでない場合は、次の場所に入れる必要があります。

<div class="main-wrapper">

    <header></header>

    <section class="main-content"></section>

    <div class="footer-buffer">(BUFFER)</div>

</div> <!-- end .main-wrapper -->

<footer></footer>

非常に基本的な構造はここにあります。それで、それ、または同様のものがあなたのテーマに配置されていることを確認してください。

html, body {
  height: 100%;
}

.main-wrapper {
  min-height: 100%;
  height: auto !important; /* for IE 6 */
  height: 100%; /* for IE 6 */
  margin: 0 auto -4em;

  /* new addition */
  overflow: hidden;
}

footer, .footer-buffer {
  height: 4em;
}

私は個人的にこれらすべてを身width: 100%;に付けfloat: left;ます...しかし、あなたは問題を理解するためにそれをできるだけ簡単にする必要があります。.inner {max-width: 980px; margin: 0 auto;}次に、各セクションの内部のような別のdivを使用して、その標準の列のWebサイトを表示する必要があります。私はあなたのCSSファイルをバックアップし、あなたが行っていたようにさらにいくつかのテストを行います。

お役に立てば幸いです。私はその粘着性のあるフッターと戦うのに何時間も何日も費やしました!

于 2013-02-17T19:03:38.807 に答える