【问题标题】:Need HTML CSS alignment solution需要 HTML CSS 对齐解决方案
【发布时间】:2015-09-13 06:04:26
【问题描述】:

我真的不确定我是否走在正确的道路上......每次我为之前的问题找到解决方案时,然后当我将“固定”代码与其他东西集成时,它再次中断,所以这让我认为我在这里做一些根本错误的事情。这就是为什么我要求您针对我计划实现的目标审查并提出修复或完成新的解决方案。

我正在尝试显示航班信息,并且每条路线都应按照您在图片上看到的方式显示。

目前,它可以正常工作,但在某些情况下,当出境航班的转接次数多于入境航班时,航班路径(蓝线)会中断并与出境航班中的第二个航班保持在同一水平线上。我希望在当前情况下,蓝色路径一直向下,每个入站/出站飞行路径长度必须同步并且相互关联。 (无论每个航班有多少个连接,长度都相同)

能否请您帮我弄清楚,我如何修复或更改整个架构、解决方案、CSS,以绘制一条蓝色路径线并保持入境和出境航班的长度相同,无论每个航班有多少连接?

Plunker code example

HTML:

    <div class="roundtrip">
        <div class="col-md-6">Outbound

            <div class="trip" ng-repeat="departureFlight in ticket.route.departureFlights">

                <div class="flight align-bottom">
                    <div class="date-time col-md-offset-2 col-md-3">
                        <div class="flight-time">{{departureFlight.departureTime | date:"h:mma"}}</div>
                        <div class="flight-date">{{departureFlight.departureTime | date:"EEE, MMM d, y"}}</div>
                    </div>
                    <div class="col-md-offset-0 col-md-2">{{departureFlight.cityFrom}} ({{departureFlight.flyFrom}})</div>
                </div>


                <div class="flight-path">
                    <div class="flight-path">
                        <div class="flight-duration">{{departureFlight.arrivalTime-departureFlight.departureTime | date:"h:mm"}}hr</div>
                    </div>
                </div>

                <div class="flight align-bottom">
                    <div class="date-time col-md-offset-2 col-md-3">
                        <div class="flight-time">{{departureFlight.arrivalTime | date:"h:mma"}}</div>
                        <div class="flight-date">{{departureFlight.arrivalTime | date:"EEE, MMM d, y"}}</div>
                    </div>
                    <div class="col-md-offset-0 col-md-2">{{departureFlight.cityTo}} ({{departureFlight.flyTo}})</div>
                </div>

                <div class="connection" ng-if="departureFlight.transferFlight">
                   {{departureFlight.arrivalTime | date:"h:mm"}}hr wait
                </div>

            </div>

        </div>
        <div class="col-md-6">Inbound

            <div class="trip" ng-repeat="returnFlight in ticket.route.returnFlights">

                <div class="flight align-bottom">
                    <div class="date-time col-md-offset-2 col-md-3">
                        <div class="flight-time">{{returnFlight.departureTime | date:"h:mma"}}</div>
                        <div class="flight-date">{{returnFlight.departureTime | date:"EEE, MMM d, y"}}</div>
                    </div>
                    <div class="col-md-offset-0 col-md-2">{{returnFlight.cityFrom}} ({{returnFlight.flyFrom}})</div>
                </div>


                <div class="flight-path">
                    <div class="flight-path">
                        <div class="flight-duration">{{returnFlight.arrivalTime-returnFlight.departureTime | date:"h:mm"}}hr</div>
                    </div>
                </div>

                <div class="flight align-bottom">
                    <div class="date-time col-md-offset-2 col-md-3">
                        <div class="flight-time">{{returnFlight.arrivalTime | date:"h:mma"}}</div>
                        <div class="flight-date">{{returnFlight.arrivalTime | date:"EEE, MMM d, y"}}</div>
                    </div>
                    <div class="col-md-offset-0 col-md-2">{{returnFlight.cityTo}} ({{returnFlight.flyTo}})</div>
                </div>

                <div class="connection" ng-if="returnFlight.transferFlight">
                    {{returnFlight.arrivalTime | date:"h:mm"}}hr wait
                </div>
            </div>
        </div>
    </div>

CSS:

.searchResult {
  padding-left: 15px;
  padding-right: 15px;
  padding-top: 0px;
  padding-bottom: 0px;
}

.align-bottom {  /*added*/
  display: flex;
  align-items: flex-end;
}
.roundtrip {
  width: 100%;
  display: inline-flex;
  flex-direction: row;
  align-items: stretch;
}
.trip {
  //width: 100px;
  text-align: center;
  display: flex;
  flex-direction: column;
}
.flight {
  white-space: nowrap;
}
.date-time {
  text-align: center;
}
.flight-path {
  position: relative;
  width: 6px;
  min-height: 135px;
  flex-grow: 1;
  align-self: center;
  background-color: #6090FF;
}

.flight-duration {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  white-space: nowrap;
  background: rgba(255, 255, 255, .75);
  text-align: center;
  left:-15px;
}

.connection {
  height: 40px;
  align-self: center;
  width: 70px;
  color: red;
  border: 1px solid red;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

【问题讨论】:

  • 您能否提供一个发生错误的示例?我在plnkr.co/edit/nS6hnIAYWrv5kIGFf2CW?p=preview 看到的那个看起来不错...
  • @StefanBraun,没有错误。我的问题是入境航班的飞行路径(蓝线)长度与出境航班的长度不同。换句话说,如果回程航班的连接数为零或更少,则出境航班线路应该更长。无论有多少连接,两个航班的线路长度都应该完全相同。
  • @WildGoat - 这与您的earlier question 有何不同,为什么您再次发布不是MCVE 的问题?角度部分令人困惑,难以分析,对问题没有任何帮助。
  • @Amit,角度部分是唯一破坏这里一切的东西。我正在使用您提供的代码,它工作正常,但是一旦我使用ng-repeat 构造 html,它就会破坏一切。所以我虽然有人可能知道如何将当前的解决方案与 angular 集成。

标签: html css angularjs twitter-bootstrap less


【解决方案1】:

你没有关注my original answer,你又在不应该出现的地方插入了块元素,从而破坏了弹性框。

查看此plunker,使用 angular 的 ng-repeat-start/end 删除不必要的 &lt;div&gt;s 并且不破坏 flexbox。

关键变化在:

<div class="col-md-6 trip">Outbound
   <div class="flight align-bottom"
    ng-repeat-start="departureFlight in ticket.route.departureFlights">

【讨论】:

  • 谢谢!!!作品!你很有帮助,阿米特,我为自己发现了一些新东西。
【解决方案2】:

我建议您为出站和入站添加一个类,例如split2(一列中的 2 个)和 split3(一列中的 3 个)。然后你给每个 .trip 一个相对高度。 .split3 .trip 为 33%,.split2 .trip 为 50%。

虽然只是一个简单的草图,但我希望你能明白:http://plnkr.co/edit/Edj0BuPRWMCn6c74d0C3?p=info

【讨论】:

  • 据我所知,您建议对课程进行硬编码。不幸的是,我想让它完全动态,因为它可能是 5 个连接或直飞。
  • 一点 JS 可能会有所帮助,但我承认它不是很优雅。但我知道的唯一解决方案是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 2017-10-02
  • 2015-06-04
相关资源
最近更新 更多