【问题标题】:creating separate rules for horizontal and vertical alignment in css在 CSS 中为水平和垂直对齐创建单独的规则
【发布时间】:2018-06-18 03:31:54
【问题描述】:

plunkr 链接是https://plnkr.co/edit/mv3lL1vwu2LxoeFZw0TX

我想将div 放置在页面的中心(垂直和水平)。 div 有一个按钮,应该在div 的中心。我在Vertically center in viewport using CSS 找到了一个解决方案,但它对我不起作用。另外,我想创建两条单独的规则,一条用于垂直对齐,一条用于水平对齐,并将它们一起(或单独)使用,以便我可以选择哪个元素应该以哪种方式对齐。

我不想使用 Flex、Bootstrap 等,因为我正在尝试理解 CSS 概念。

水平对齐规则很简单。

.center-horizontally-common-styles {
    display: block;
    margin: auto auto;
}

垂直对齐规则是(修改自SO链接)

.centre-vertical-common-styles {
   position: fixed;
    right: 50%; 
    top: 50%; 
    transform: translateY(-50%);
    transform: translateX(50%);
}


.debug-border-common-styles {
    border: 3px solid black;
    height:40px;
    width:200px;
}

HTML

<div class="debug-border-common-styles centre-vertical-common-styles center-horizontally-common-styles">
    <button type="button"> Click Me! </button>
</div>

我的理解是right: 50%; top: 50%; 将使用浏览器的窗口(视口?)作为参考,并将div 的上边缘和右边缘移动到浏览器各自边缘位置的 50% 标记的位置。 TranslateYTranslateX 现在应该分别向上 (-50%) 和向左 (50%) 移动 div 以将按钮的中心对齐到页面的中间,从而使按钮居中。我面临的问题是:

1) translateY 似乎不起作用。如果我将div 的高度更改为 200px。 div 开始向下增长(即它的顶部边缘似乎是固定的!)如果宽度更改为 200 像素,则不会发生这种情况。

.debug-border-common-styles {
    border: 3px solid black;
    height:200px;
    width:200px;
}

2) div 内的按钮不在 div 的中心。我为该按钮创建了以下css 规则,但 translateY 似乎也不适用于该按钮。

.centre-button-vertical-common-styles {
   position: absolute; /*use absolute so that the origin is no the parent div*/
   right: 50%; 
   top: 50%; 
   transform: translateY(-50%);
   transform: translateX(50%);
}

3) 理想情况下,我想创建两个单独的规则,例如 .center-vertical 和 .center-horizo​​ntal 并将它们组合起来以使用所需的效果。但是,如果我执行以下操作,它将不起作用。是否可以创建两个单独的规则?

.center-horizontally-common-styles {
    display: block;
    margin: auto auto;
}

不要在这里使用,因为水平线应该把项目放在中间

.centre-button-vertical-common-styles {
   position: absolute;
   top: 50%; 
   transform: translateY(-50%);
}

【问题讨论】:

  • 在 CSS 中的属性只能有 1 个值 - 所以你的 transform:translateY(-50%); 会被 transform:translateX(50%); 覆盖
  • 谢谢。那么我怎样才能水平和垂直移动一个元素呢?
  • 您可以为水平垂直居中添加新类。或者你可以尝试使用 flexbox。

标签: css


【解决方案1】:

兄弟,你需要一些风格的箭头。这样做:)

 .centre-vertical-common-styles {
       position: fixed;
        left: 50%; 
        top: 50%; 
        transform: translate(-50%, -50%);
    }
    .debug-border-common-styles {
        border: 3px solid black;
        height:40px;
        width:200px;
        display:flex;
        align-items:center;
        justify-content:center;
    }

【讨论】:

  • 谢谢。我想你的意思是transform: translate(50%, -50%);。只加transform: translate(50%, -50%);就够了(plnkr.co/edit/mv3lL1vwu2LxoeFZw0TX),display:flex; align-items:center; justify-content:center;的目的是什么
  • 块的所有子元素,具有 display:flex;对齐项目:中心;证明内容:中心;将居中对齐,没有任何样式。
  • 我在 plunkr 上试过了。效果不好。将 translate 添加到 div 和 button 似乎比使用 flex 定位更好。见这里 - plnkr.co/edit/mv3lL1vwu2LxoeFZw0TX
  • 抱歉,你是对的。所以我可以使用你的解决方案并从按钮中删除类centre-button-vertical-common-styles,或者我可以使用我的原始解决方案并使用translate而不是translateX/translateY,因为fex1x提到的问题
  • 从浏览器支持的角度来看,translateflex 更好吗?
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2017-07-01
  • 2013-11-25
相关资源
最近更新 更多