如何用sass(罗盘)垂直居中div?

Yak*_*ako 2 sass mixins vertical-alignment css3 compass-sass

好吧,一切都在问题中...我正在使用登录表单,我希望在身体中心垂直对齐.我是sass和指南针的新手,我很难为此使用正确的mixin ...

HTML代码非常简单:

<body>
   <div>
       A div of unknown height to be vertically centered.
   </div>
</body>
Run Code Online (Sandbox Code Playgroud)

这是使其工作的CSS3代码:

 <style>
    html{
      height:100%;
    }
    body{
      height:100%;
      display:flex; 
      align-items:center;
      /* I spared all the compatibility properties for the different browsers */
    }
</style>
Run Code Online (Sandbox Code Playgroud)

___EDIT:

我想到了这样的事情,但我意识到我误解了使用SASS的父选择器的方法:

div.ieVerticalCentered {
    body.verticalCentering & {
        height:100%;    
        display:-ms-flexbox;
        display:-moz-box;
        display:-webkit-box;
        display:-webkit-flex;
        display:flex;       
        -ms-align-items:center;
        -moz-align-items:center;
        -webkit-align-items:center;
        align-items:center;
            html.verticalCentering & {
            height:100%;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,核心问题是:当子元素具有特定类时,是否可以将特定样式应用于父元素.

据我所知,静态CSS不可能,但可以用JS完成.刚刚发现Sass,我想知道是否可以考虑好事......

Dan*_*rne 14

我使用这个mixin来集中内容.它使用转换,因此不支持所有版本的IE.

MIXIN:

@mixin centre($axis: "both"){
    position:absolute;
    @if $axis == "y"{
        top:50%;
        -webkit-transform: translateY(-50%);
        -moz-transform: translateY(-50%);
        -ms-transform: translateY(-50%);
        -o-transform: translateY(-50%);
        transform: translateY(-50%);
    }
    @if $axis == "x"{
        left:50%;
        -webkit-transform: translateX(-50%);
        -moz-transform: translateX(-50%);
        -ms-transform: translateX(-50%);
        -o-transform: translateX(-50%);
        transform: translateX(-50%);
    }
    @if $axis == "both"{
        top:50%;
        left:50%;
        -webkit-transform: translate(-50%, -50%);
        -moz-transform: translate(-50%, -50%);
        -ms-transform: translate(-50%, -50%);
        -o-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
    }   
}
Run Code Online (Sandbox Code Playgroud)

用法:

Y axis : @include centre(y);
X axis : @include centre(x);
Both axis : @include centre;
Run Code Online (Sandbox Code Playgroud)

工作示例:小提琴