TransDigm Group Incorporated (TDG) CEO Kevin Stein on Q4 2019 Results - Earnings Call Transcript
by SA Transcripts, https://seekingalpha.com/author/sa-transcriptsTransDigm Group Incorporated (NYSE:TDG) Q4 2019 Results Earnings Conference Call November 19, 2019 11:00 AM ET
Company Participants
Liza Sabol - Director, Investor Relations
Nick Howley - Executive Chairman
Kevin Stein - President and Chief Executive Officer
Michael Lisman - Chief Financial Officer
Conference Call Participants
Myles Walton - UBS
Ronald Epstein - Bank of America Merrill Lynch
Ken Herbert - Canaccord
Michael Ciarmoli - SunTrust
Greg Konrad - Jefferies
Gautam Khanna - Cowen and Company
Seth Seifman - JPMorgan
Operator
Ladies and gentlemen, thank you for standing by, and welcome to the Fourth Quarter 2019 TransDigm Group Inc. Earnings Conference Call. At this time, all participants are in a listen-only mode. After the speakers' presentation, there will be a question-and-answer session. [Operator Instructions] Please be advised that today's conference is being recorded. [Operator Instructions]
I will now hand the conference over to your speaker today, Liza Sabol, Investor Relations.
Liza Sabol
Thank you and welcome to TransDigm's fiscal 2019 fourth quarter earnings conference call. Presenting this morning are TransDigm's Executive Chairman, Nick Howley; President and Chief Executive Officer, Kevin Stein; and Chief Financial Officer, Mike Lisman. Please visit our website at transdigm.com to obtain a supplemental slide deck and call replay information.
Before we begin, we'd like to remind you that statements made during this call, which are not historical in fact, are forward-looking statements. For further information about important factors that could cause actual results to differ materially from those expressed or implied in the forward-looking statements, please refer to the company's latest filings with the SEC.
We'd also like to advise you that, during the course of the call, we will be referring to EBITDA, specifically EBITDA As Defined, adjusted net income and adjusted earnings per share, all of which are non-GAAP financial measures. Please see the tables and related footnotes in the earnings release for a presentation of the most directly comparable GAAP measures and applicable reconciliations.
I'll now turn the call over to Nick.
Nick Howley
Good morning and thanks for calling in. Today, as usual, I'll start with some summary comments on our consistent business strategy, a few comments on the operating performance and outlook and capital allocation.
To reiterate, we're unique in the industry due to both our consistency and our ability to create intrinsic shareholder value through all phases of the aerospace cycle. To summarize some of the reasons why we believe this, about 90% of our net sales are generated by proprietary products and over three quarters of our net sales come from products for which we believe we are the sole source provider.
Most of our EBITDA comes from aftermarket revenues, which typically have significantly higher margins and provide relative stability in the downturns. Our long-standing goal is to give our shareholders private equity-like returns with the liquidity of a public market. To do this, we have to stay focused on both the details of value creation as well as the careful allocation of our capital.
We follow a consistent long-term strategy. Specifically, we own and operate proprietary aerospace businesses with significant aftermarket content. Second, we utilize a simple, well proven, value-based operating methodology. Third, we have a decentralized organization structure and a unique compensation system that closely aligns our management team with the shareholders' interest.
Fourth, we acquire businesses that fit our strategy and we see a clear, simple path to PE-like returns. And lastly, our capital structure and our allocations are a key part of our value creation methodology.
As you saw from our press release, we had a solid operating performance in fiscal year 2019, where the revenue is up 37% and EBITDA As Defined up about 29% on a reported basis. Organically, our revenue was up almost 11% and EBITDA As Defined up 14%. Including the dividends paid in August, our shareholders made about a 48% return in the last fiscal year, a pretty good year.
Far and away, the largest portion of our business, our worldwide commercial aerospace markets, were strong in fiscal year 2019. The smaller worldwide defense segment also did well. The TransDigm legacy businesses performed well. The Esterline acquired businesses continue to exceed our acquisition model with a Q4 EBITDA As Defined margin of over 30%. In 2020, we will include Esterline in the core businesses and no longer break it out separately.
Fiscal year 2020 looks like another good year for TransDigm. Revenue and EBITDA As Defined are both estimated to be up nicely. All our market segments appear to be in pretty good shape. There are some potential clouds on the horizon in the commercial aerospace market, but we're watching this closely and we're prepared to react quickly if required. Kevin will discuss 2019 and 2020 in significant more detail.
With respect to M&A and capital allocation, as previously announced, we executed agreements to sell both the Souriau business for about $920 million, and the EIT group of businesses for about $190 million. We closed the EIT deal and received the cash in September.
We still hope to close the Souriau divestiture by the end of our fiscal first quarter 2020. We may still sell some smaller business with -- businesses with less proprietary aerospace and aftermarket content, but if we do so, at least as of today, I don't think they will be significant in size.
We also completed a roughly $2.6 billion financing recently. About $1.5 billion is for general corporate purposes and the balance is used to refinance and extend the payments on some other debt. We wanted to take advantage of an accommodating credit market and attractive rates.
With respect to capital allocation, we paid a $30 billion dividend in Q4 of 2019. We will review our capital allocation situation over the quarter and see where we stand towards the end of the calendar year.
Absent any new capital market activity and assuming our recent divestiture closes in a timely fashion, we'd expect to have almost $4 billion of cash at the end of Q1 2020. That's on or about 12/31/19.
We also have a significant additional borrowing capacity under our credit line and our credit agreement. We have substantial liquidity and the financial flexibility to deal with any currently anticipated capital deployment, allocation or other opportunities that may arise in the readily foreseeable future.
We continue to actively evaluate and seek M&A opportunities. We have a decent pipeline of possibilities, as usual mostly in the small and mid-sized. I cannot predict or comment on possible closings, but as I said before, we are working steadily at M&A and we're still open for business.
Now, let me hand it over to Kevin to review our 2019 performance, 2020 outlook, and some other items.
Kevin Stein
Thanks Nick. Today, I will review our results by key markets and discuss the profitability of the business for the quarter, provide fiscal 2020 guidance, and then review some other operational items.
As you've seen, we had a strong fourth quarter to end another very good year. Mike will provide more details on the financials. As Nick has said, full year revenue and EBITDA As Defined were up substantially over last year due in part to above-average organic growth as well as continued acquisition integration and performance.
Now, we will review our revenues by market category. For the remainder of the call, I will provide color commentary on a pro forma basis compared to the prior year period in 2018. That is assuming we own the same mix of businesses in both periods. Please note this market analysis section excludes Esterline for fiscal 2019. However, we will begin to include the former Esterline businesses in our market analysis for fiscal 2020.
In the commercial market, which makes up close to 70% of our revenue, we split our discussion into OEM and aftermarket. Our commercial OEM market revenue increased approximately 11% in both Q4 and for full year fiscal 2019 over the prior year periods.
This full year OEM revenue growth exceeded our last guidance expectation of growth in the mid- to high single-digit range. This growth occurred despite a limited headwind from the impact of 737 MAX grounding. The 737 MAX situation is one we continue to closely monitor.
Now, moving on to our commercial aftermarket business discussion. Total commercial aftermarket revenues grew by 9% over the prior year quarter. Total fiscal 2019 grew about 8%, in line with our full year guidance expectations of high single-digit percent growth.
In the quarter, growth in the commercial transport passenger and freight markets was slightly offset by a decline in the interior submarket. Repairs and retrofits for Telair International on Boeing 747 freighters and retrofit igniters for G650 business jets from Champion were a few of the strong areas for commercial aftermarket worth noting. Overall, commercial transport fundamentals continue to remain relatively strong, although a few items bear watching.
Global revenue passenger growth has decelerated slightly in the past few months, albeit growth is still near the long-term average. Additionally, cargo demand is weaker as FTKs have declined from reaching an all-time high in 2017.
Now, let me speak about our defense market, which is just over 30% of our total revenue. The defense market, which includes both OEM and aftermarket revenues, was up approximately 7% over the prior year Q4.
As a reminder, this quarter, we began to lap tougher prior year comparisons as our defense revenue started to accelerate in Q4 of last year. Full year defense revenue grew 14%.
Last year, we reported strong defense bookings that we saw materialize into sales this year. This robust growth was well distributed and appears to be driven from most businesses that support defense-related platforms.
Now, moving to profitability. I'm going to talk primarily about our operating performance or EBITDA As Defined. EBITDA As Defined of about $707 million for Q4 was up 35% versus prior Q4, and $2.42 billion or up 29% on a full year basis. EBITDA As Defined margin in the quarter of 45.9% was negatively impacted by acquisition dilution from Esterline.
Excluding Esterline, margins in our legacy business were over 50% and improved both sequentially as well as over the prior year's quarter. Margin improvement progress is always important to us and indicates that our base business continued to find opportunities to drive improvement by using our value drivers.
Now, let me give you an update on the Esterline integration and expectations. Over eight months post close, the Esterline integration continues to progress well. We have now largely wound down the former corporate office activities in Bellevue, Washington. The functions that used to be performed here have been migrated to the business units or moved over to our Cleveland corporate office.
As noted before, we have equipped the Esterline integration team with senior TransDigm legacy EVPs who are teaching our culture and operating model around value generation to all new business units.
We are making progress here, but as you know, culture change can be slow and requires constant reinforcement. To-date, we are exceeding our expectations for growth in this largest of TransDigm acquisitions.
Turning now to 2020 guidance, also found on slide seven in the presentation. In general, continued global revenue passenger mile growth, a favorable environment for defense spending, both domestically and internationally, and generally positive economic conditions provide a backdrop for continued success and growth in the marketplace.
Certainly, global trade dynamics, continued 737 MAX grounding and shipping delays, political risks, or other exogenous events could have a negative impact on market conditions for TransDigm. We will closely watch these, as we always do, and we'll react as necessary, including taking any preemptive steps that might be warranted.
Based on this and assuming no acquisitions in fiscal year 2020, our initial guidance for continuing operations is as follows. The midpoint of our fiscal year 2020 revenue guidance is $6.25 billion or up approximately 20%.
As in past years, with roughly 10% less working days in fiscal year 2020 quarter one, revenues, EBITDA, and EBITDA margin are anticipated to be lower than the other three quarters of fiscal year 2020, roughly in proportion to the lower working days. This revenue guidance is based on the following market channel growth assumptions. Note these pro forma market assumptions now include Esterline.
We expect commercial aftermarket revenue growth in the mid-single-digit to high single-digit percent range versus prior year, commercial OEM revenue growth in the low single-digit to mid-single-digit percent range, defense military revenue growth in the mid-single-digit percent range versus prior year.
The midpoint of fiscal year 2020 EBITDA As Defined guidance is $2.83 billion with an expected margin of around 45.2%, up almost 17%. This includes almost 6 points of margin dilution from Esterline.
Again, we anticipate EBITDA margin will move up throughout the year, as we have seen in previous years, with Q1 being the lowest and sequentially lower than Q4. The midpoint of adjusted EPS is anticipated to be $20.50. Mike will discuss in more detail shortly -- and the factors impacting EPS.
Finally, I would like now to briefly review some executive management changes. As you know, we continually work to improve our bench strength of promotable talent to keep a focus on succession planning. As such, we recently promoted Marko Enderlein and Patrick Murphy to the Executive Vice President role.
Marko has worked for TransDigm for over three years as the President of the Telair International team. And prior to joining us, he spent over 15 years at Airbus in financial and leadership roles. Marko will be our first EVP in Europe, responsible for much of our European footprint.
Patrick has worked for TransDigm for over 4 years now as the President of HarcoSemco and prior held a variety of senior roles in leadership at Danaher Corporation over an eight-year career.
These promotions give us the resources we need to oversee the expanded group of business units following the Esterline acquisition as well as to backfill for Jim Skulina, who is retiring at the end of the calendar year.
So, let me conclude by stating fiscal 2019 was another good year for TransDigm. We continue to be very pleased with the Esterline acquisition integration as well as the strong operational performance in our legacy businesses. We look forward to 2020 and expect that our consistent strategy will continue to provide the value you have come to expect from us.
With that, I would now like to turn it over to our CFO, Mike Lisman.
Michael Lisman
Good morning everyone. Nick and Kevin covered the highlights, so I'm just going to really quickly hit on a few additional financial details. First, for full year FY 2019 and then second, for the FY 2020 guidance that Kevin just covered.
As mentioned on our last earnings call, the Esterline organization as it used to exist, including the corporate office, is largely now gone, and the business units which used to comprise Esterline report independently into TransDigm within our power, airframe and non-aviation segments. We therefore don't plan to give any specific color around Esterline's performance, separate from that of legacy TransDigm.
During the quarter, both EIT and Souriau were moved into discontinued operations. When you make this accounting change, the results from these business units get completely removed from the individual line items of the P&L and collapsed onto the disc ops line. So, the net result was that it's almost like we never owned them, except for the discontinued operations line.
Now, for the consolidated TransDigm business, a few quick notes on how we ended FY 2019. Adjusted EPS for the year was $18.27, up 2.5% from FY 2018. And as a reminder, our FY 2018 EPS saw a significant onetime benefit from the implementation of U.S. tax reform that muddies any year-over-year EPS comparisons.
On taxes, we came in slightly better than expected with an FY 2019 GAAP and cash tax rates of 21% and an adjusted rate of 25%. On cash and liquidity, we ended the year with approximately $1.5 billion of cash on the balance sheet and net debt-to-EBITDA ratio of 6.2 times.
Pro forma for the recent debt raise, which we closed last week on the 13th, our cash balance increased to just under $3 billion. Should Souriau close as expected during our second quarter of FY 2020, we'll receive almost $900 million of cash proceeds and subsequently have the cash balance of just under $4 billion. We also currently have access to about $720 million of our revolver.
Next, on the FY 2020 guidance, I'm going to really quickly give some more details on the financial assumptions around the interest expense, taxes, and then the share count. Interest expense is expected to be about $1.02 billion in FY 2020. This estimate assumes an average LIBOR rate of 1.7% for the full year, which is just an average of the forward consensus curve currently. This yields a weighted average cash interest rate of about 5.5%.
On taxes, our fiscal 2020 GAAP cash and adjusted rates are all expected to be in the 24% to 26% range. We expect our weighted average shares outstanding to increase to $57.4 million from $56.3 million in FY 2019 and that assumes no buybacks occur during the fiscal year. Similar to prior years, the increase in shares outstanding is due to employee stock options that vested at the end of our FY 2019.
With regard to liquidity and leverage at the end of FY 2020 and assuming no additional acquisitions or capital market transactions, we expect to have roughly $5 billion of cash on hand at the end of the year. This assumes the Souriau divestiture closes as expected. And we estimate our net leverage will be below five times EBITDA as defined at September 30th, 2020.
In closing, we expect fiscal 2020 to be a good year for TransDigm. With that, I'll turn it back over to the operator to kick-off the Q&A.
Question-and-Answer Session
Operator
Thank you. [Operator Instructions]
And our first question is from Myles Walton with UBS. Please go ahead.
Myles Walton
Thanks so much. Good morning.
Nick Howley
Good morning.
Kevin Stein
Good morning.
Myles Walton
I wonder if you can, maybe, Nick, just tee us off. I know you didn't want to touch on the precision of the deals that may or not be in the pipeline. But just as you look at how open the debt markets have been to you, is it fair to think that you'll have excess liquidity relative to your pipeline that would point you more towards additional special dividends? Or do you think the pipeline is rich enough to satisfy as open as the debt markets are to you right now?
Nick Howley
Yes, I don't -- obviously, I know the question goes there. I don't want to comment on that. I think, as you know, if we have $4 billion at the end of the year, we won't sit on that. I mean we'll do -- either we'll have something significant in the gun sight or we'll do something else. As you know, we'll make some type of return some to the shareholders and we're just -- we're going to delay that decision a little bit.
Myles Walton
Fair enough. And then, Mike or Kevin, I don't know which, on the free cash flow, fiscal 2018 -- sorry, fiscal 2019 came a little light of fiscal 2018. I think you were looking for it to be as good, if not better. I don't know if that's the divested properties. And then also, can you give a comment on your expectation for free cash flow for 2020?
Michael Lisman
Yes. We -- it was a little bit light in FY 2019, and that's mainly a result of about $100 million of cash charges on Esterline, onetime items related to the integration. With regard to FY 2020, the way we look at it generally is that we expect EBITDA less CapEx, less cash interest, less cash taxes to be about 50% of EBITDA. I think we've mentioned the 50% stat to you guys.
Historically, if you looked at FY 2019 and stripped out the Esterline stuff, we hit about 50%, and we expect FY 2020 to be about the same.
Myles Walton
Okay, all right. Thanks. I'll leave at two. Thank you.
Operator
Thank you. Our next question comes from Ronald Epstein with Bank of America. Please go ahead.
Ronald Epstein
Hey good morning.
Nick Howley
Good morning Ron.
Ronald Epstein
When you think about potentially deploying some of that capital, are there areas in the portfolio that you think you need more coverage of? I mean is there any clue you can give us? And if you were to do some more M&A, what area would you be covering?
Nick Howley
Yes, I would say our -- what we're looking for is the same thing we're always looking for: proprietary aerospace businesses with significant aftermarket content. We're not biased towards one part of an airplane or another part of the airplane or one product or another. If it meets that criteria, and we see a clear path to our private equity-like return, we're a very interested buyer. And I -- we really don't hem it down any more than that.
Ronald Epstein
Got it. Got you. And then maybe just kind of peeling back the onion a little bit. When you think about the return of the 737 MAX into service, is it going to be a headwind or a tailwind? Meaning, there will be fewer older airplanes flying around, which would suggest a headwind. But if it's a new airplane going into service, you'll have provisioning, which would be a possible tailwind, right? So, on balance, how would you expect the return to service there to kind of impact you guys?
Kevin Stein
Yes. Ron, we look at it as somewhat neutral. Of course, the aftermarket's good. The OEM -- we do well with the OEM as a whole on the 737. But as a whole, it's deminimus to the business. It's -- 737 MAX is small enough that the noise of its actual ramp rates, or if anything else difficult happens there, would not have any impact -- noticeable impact on the business. So, I think its deminimus and that's how we model this. Certainly, more older planes flying is good for us, but we have OEM content as well, so it's kind of a push.
Ronald Epstein
Got you. Got you. And then one follow-on to that, if I may. As you mentioned in the prepared remarks, air traffic has slowed a bit this year, right? So, we're maybe a smidge below kind of the long-term mean, but maybe reverting to a mean. But we really haven't seen much impact on aftermarket demand because of that. Are you expecting that to change as we go into next year?
I mean is there some conservative in your outlook for next year because of what air traffic has been doing? I mean how can we think about it? I mean be it that air traffic has slowed pretty much across the industry, everybody has had a booming aftermarket performance.
Kevin Stein
Yes, I think the RPM growth has been impacted by the lack of availability of the 737. So, I don't want to overblow that to the industry and how it may impact us. So, I look at RPM, it's close to the 50-year average. I don't see a looming problem in the industry. So, I'm still optimistic about the future for this market as a whole, whether it's aftermarket or OEM.
I think aftermarket orders can be lumpy at times and we certainly see that. Last year, the POS, which is a nice forward-looking indicator, that was up high single-digits. So, that kind of reinforces how we feel about this year and why we guided to mid to high single-digit growth in the aftermarket. But certainly, we've put necessary conservatism into our forecast, and hence the mid to high comes into play.
Ronald Epstein
Great. Thank you so much,
Operator
Thank you. Our next question comes from David Strauss with Barclays. Please go ahead.
Unidentified Analyst
Hey good morning guys, it's actually Matt on for David.
Nick Howley
Good morning.
Unidentified Analyst
I wanted to see -- is there any update you guys can share on the Inspector General audit that you mentioned last quarter, to the extent that you can say anything about it? And then also, I think there was this pricing memo over the summer, the DoD was requesting more kind of pricing data. Is it -- are you still getting requests for that data? And is that having any meaningful impact on you?
Kevin Stein
Yes. So, two parts to your question. The IG update. The IG, that is an audit of the DLA and its buying practices of TransDigm-related products. We continue to work closely with the IG. I really don't have an estimate yet of when that will complete, but we're actively engaged and working through. It appears to be a similar scope as prior audits. That's really all I have to update right now, but we are working closely with them.
On the pricing memo, we have met with the DoD directly on this. The pricing memo was put out to hopefully clarify the situation. We're seeing some additional, we would say, pickiness on pricing or costs or different requests for information.
But as a whole, we continue to work closely with the DoD and the DLA on their purchases. There's been a little bit of slowdown on some orders, but as a whole, it hasn't -- we don't see any noticeable impact on the business.
These tend to be small orders, generally speaking, and we are busy cooperating with the DLA on the fair and reasonable acquisition process that is dictated by rules and laws, and we work within those completely. And so we're cooperating and working closely together and meeting with them directly.
Nick Howley
I might just add, the last couple of times we've had these, they've taken -- Kevin, I would say, 18 to 24 months to complete. I mean so we don't -- I don't know what this one will take, but that -- at least there's a couple of benchmarks.
Unidentified Analyst
Got it. Yes, that's really helpful. Thanks. And then, I guess, on Esterline. So last quarter, you commented there was some loss-making contract write-up. Can you say what that level was for the quarter and kind of what the level is you'd expect going forward on that?
Michael Lisman
Yes, it was $15 million in Q4. We expect it to continue with that kind of level going out quarterly. The average over the next, say, three, four years should be about, rough, just as $40 million per year, more in the earlier years than in the out years.
Kevin Stein
It's gradually tapering off, right.
Michael Lisman
Yes.
Unidentified Analyst
Got it. Thanks.
Operator
Thank you. Our next question comes from Ken Herbert with Canaccord. Please go ahead.
Ken Herbert
Hi good morning.
Nick Howley
Good morning Ken.
Ken Herbert
I just wanted to ask, Nick or Kevin, in prior periods when you've started to maybe see some cautionary signs in your commercial market or other, maybe reasons for a bit of pessimism on the broader outlook, you've been fairly quick to take action and adjust your cost structure ahead of that. Are you at the point where you might start to think about that? Or is it way too early to think about that?
And if so, what would you want to see specifically? Or how is your outlook near term as you think about some of the clouds you mentioned on the horizon and some of the lower growth we've seen in passenger traffic?
Kevin Stein
Yes. I think, really, your question is how cautious are we on the market and what do we see. We've provided guidance that says -- and our order book, so far, doesn't indicate that we're starting the year on a weak point with our guidance, so I feel okay.
I know Jorge Valladares and I talk about this frequently. We've been together often over the last couple weeks, and it's something we talk about but neither of us see it as something we have to act on this second because the forward-looking indicators, bookings specifically, look decent, look strong. So, I don't think we have to take an adjustment yet, but it is something that we're actively debating so that we don't fall behind.
We recognize that once you fall behind, you can never catch up on productivity. So, we certainly don't want to do that, but we don't want to jeopardize the business and deliveries by making that jump too soon. We continue to discuss, I think, is the answer.
Ken Herbert
Okay, that's helpful, Kevin. And I just wanted to follow-up on your comments around sort of the wind-down of the legacy Esterline corporate office in Bellevue and a lot of the transition to your operating businesses over there to Cleveland. Is it fair to say that you'd have the capacity now and the bandwidth for a larger acquisition? Or do you still feel like there's significant integration around Esterline and sort of realization of the upside that you'd maybe not be as excited near term about a larger deal?
Nick Howley
Yes, I would say we're making very good progress on Esterline. And frankly, it's moved faster than we expected. I don't think -- if we saw the right opportunity, I don't think we'd be reticent to pull the trigger because of bandwidth now, where we're more restricted by the sort of value and where the opportunities might be.
Ken Herbert
Okay, great. Thank you very much. I'll pass it back.
Operator
Thank you. Our next question comes from Michael Ciarmoli with SunTrust. Please go ahead.
Michael Ciarmoli
Hey good morning guys. Thanks for taking my questions.
Nick Howley
Good morning.
Michael Ciarmoli
Maybe, Nick or Kevin, just on Esterline, I think you said EBITDA margins were running above 30%, and I mean that's come a pretty long way. I think the initial guide was maybe low-20% level. Can you just maybe give us some color on what's really helping to drive the improvement there? I mean maybe even compartmentalize it? I mean is it price, is it getting rid of excess overhead? Is it just implementing better productivity and better execution initiatives?
Kevin Stein
Yes, I think, Michael, the answer is yes to that. We've seen opportunities on productivity, on price. Certainly, better leveraging the overhead structure that we have in place already is important to that. We've continued to see new business wins in this business at Esterline. That's important.
I think one of the most important points is that we reported that we modeled that the aftermarket at Esterline was somewhere around 30%, and that's up from the 12% that was most recently reported when Esterline was a public company. We found that 30% to maybe be a little conservative. It's better than even what we had modeled similar, directionally, to TransDigm.
And so that has been a great reason why we're seeing improvement faster than what we had originally planned. But it's a balance of productivity and price. It's not one thing or the other. We emphasize all areas including new business growth in our improvement.
Nick Howley
The other thing I'd add is -- the only thing I'd add is we -- as I think we continually said when we bought it, our goals are to be fairly conservative in our modeling when we make an acquisition. We don't -- we want to be sure if we're going to give our money away, we have a pretty darn good chance of making it.
Michael Ciarmoli
That better than expected aftermarket exposure, what do you guys attribute that to? I mean, was that just Esterline taking its eye off the ball, not having the systems in place to sort of track the life cycle of their products, not having good turnaround times? I mean anything you can attribute the better than expected 30% exposure?
Kevin Stein
I think we define the market very carefully on aftermarket because we understand how valuable that segment is. So, I think it's largely definitional, and we spent the time combing through the data for those opportunities so that we understood our product mix very well and our market mix.
Nick Howley
And I'd just like repeat the same. Going into something like this, when the data is unclear and we're unsure, we tend to be conservative. Yes.
Kevin Stein
Yes.
Michael Ciarmoli
Got it. Just the last one, maybe housekeeping on capital deployment. But I guess, with the interest expense, where you guys are for fiscal 2020 as a percent of EBITDA, I think the tax law still restricts deductibility at 30%. I mean do you guys have any plans to get that interest expense below that 30% threshold, whether it's paying down?
Nick Howley
No.
Michael Ciarmoli
Okay. Got it.
Nick Howley
No, we think of it the same way. The cost of the debt is 5.5% now. So, it's -- depending on how much is or isn't deductible, the after-tax cost is 3.5% to 4.25% or something like that in that range. We always compare that to the cost of our equity on an after-tax basis, which we say we want to give you a PE-like return. So, that still looks pretty good compared to the 15%, 20% PE-like return.
Michael Ciarmoli
Got it, perfect. Thanks guys.
Operator
Thank you. Our next question comes from Greg Konrad with Jefferies. Please go ahead.
Greg Konrad
Good morning.
Nick Howley
Good morning.
Greg Konrad
Overall, in defense, you didn't call out bookings like the other two end markets. I mean what type of activity are you seeing from an order perspective and how do you think about that backlog as we head into 2020?
Kevin Stein
We had a strong bookings year in defense, not as strong as the year before, but our total defense bookings were up in that mid-single-digit range, much like we guided to. That's produced by stronger bookings on the defense OE side and a slowdown in bookings in the aftermarket, which may indicate that maybe some of the sequestration, refilling of spares and maintenance-related activities in the defense sector has been caught up. Time will tell.
Greg Konrad
Thanks. And then just one more. You called out business jet and helicopter aftermarket being up 20% in the quarter. I mean what is driving that, whether it's activity or mandate driven? And what type of visibility are you seeing in that market?
Kevin Stein
Your question was specifically around business jet and helicopter?
Greg Konrad
Exactly.
Kevin Stein
Yes, I think we're surprised, a little bit cautious surprise there about the performance. We certainly don't see the support on the business jet side on the takeoff and landing cycles, which is how we follow and monitor the business, much like all of you. So, we continue to be pleasantly surprised by the strength of the OE and the aftermarket on the business jet defense.
On the helicopter side of the business, I really don't have that much comment. It's a pretty small sector and nothing jumps to mind as worthy of commentary.
Greg Konrad
Thank you.
Operator
Thank you. [Operator Instructions]
And our next question is from Gautam Khanna with Cowen and Company. Please go ahead.
Gautam Khanna
Yes, thanks. Good morning guys.
Nick Howley
Good morning.
Gautam Khanna
Maybe inside the air transport aftermarket numbers, could you give us some granularity on discretionary versus nondiscretionary? Maybe if you saw any differences by region or by channel distribution or direct, any color there?
Kevin Stein
Yes. So, I can give you a little bit by submarkets, like we did earlier. We had -- we saw some strength in the freight area that was largely due to 737 freighter. The -- any weakness we saw in the interior side was largely an artifice of stocking packages that were put in the year before. So, we had big stocking packages for some of our interiors businesses and that just didn't repeat. So that will come out in time.
Business jet continued pretty strong. Our passenger segments of the commercial aftermarket is right on the multiyear average and right about where we expected it to be. So, the segments are performing more or less as we expected.
The freight side has been a pleasant surprise and the interiors is actually -- they're going through a cycle right now. They've recently won a number of international OEM projects on the interiors business as a whole, and that will translate to growth and opportunities for aftermarket in the future. So, I think these are the lumps of some of these submarkets that we see on the aftermarket side.
Gautam Khanna
Thanks Kevin, that's helpful. And just a separate question on -- if you could maybe comment on where you are in the value-based pricing implementation of Esterline's aftermarket. Have you had--?
Kevin Stein
Yes, we don't really talk about it that way. Our value drivers are a constant focus for us. We don't look at it as the journey is complete and we've reached Nirvana. We continue to work these, it's part of our discipline, it's part of our process.
So, we see opportunities ongoing in our legacy TransDigm businesses, just like we see them on the old Esterline side, and we'll actually stop referring to it as the Esterline businesses. It'll just be part of our power, airframe and non-aerospace sectors as we go forward. But that's kind of how we see it.
Gautam Khanna
That's a fair answer, I appreciate it. Maybe asked a better way, of the 30%-plus of Esterline's revenue that is aftermarket, do you have a sense for how much is sort of spot aftermarket or, if you will, off contract?
Kevin Stein
No, I do not. I do not have that knowledge as I sit here, sorry.
Gautam Khanna
That's okay. Thank you very much. appreciate it.
Kevin Stein
Sure.
Operator
Thank you. And our next question is from Seth Seifman with JPMorgan. Please go ahead sir, your line is open.
Seth Seifman
Thanks very much and good morning.
Nick Howley
Good morning.
Seth Seifman
Nick, I think it was back in like 2011 when you guys took the kind of target return down from 20% to 17.5% at the top and maybe I guess 12.5% down to 10% at the bottom. And I think one of the reasons at that time was the growth in the business, and at that point, it was about $1.2 billion.
Obviously, much, much bigger now and I think you guys have probably exceeded your own and everybody else's expectations. Does that -- now that we're above $6 billion here, does that return framework still work?
Nick Howley
We don't have any -- we do not have any plans to change it now. Well, let me make sure I understand your question. Is your question what do we expect go forward growth in the shares to be? Or is it what do you -- what do we plan to do with our compensation plan?
Seth Seifman
I think the -- well, the compensation plan is intended to reflect I guess the shares, right? And so, let's say the shares then.
Nick Howley
All right. I'll answer both questions anyway. I would say our goal on the shares is we hope to continue to do this, is to give you a private equity-like return. And we define that as somewhere in the 15% to 20% over a long period of time. Each year won't be that. Clearly it's done -- I want to say the growth in the public market for the last, whatever it is, 12 or 13 years has been more like 35%. I don't think that will continue going forward. And our goal is still, as I say, a PE-like return, and we still think that's reasonable to expect.
On the compensation targets, where we -- the 7 -- what the 17.5% roughly is, it's about what top quartile PE funds return. So, we -- and that's how we have targeted through the years. And as we get bigger, it made more sense to look like a top quartile PE fund and that's why we went to the 17.5%. Should that go to 15% someday? I don't know, perhaps, but it's not in the gun sight right now.
Seth Seifman
Got it. Got it. Okay. And then as a follow-up, just to make sure I understand, last quarter without Esterline, it looked like the pro forma of commercial aftermarket contribution to the company was 36% of revenue, and this quarter it's 31%. And so it would seem that the Esterline piece is coming in with below 30% commercial aftermarket. Or is that like an incorrect reading on my part?
Nick Howley
We're not following your math. I'm not sure that's correct. I guess if the Esterline contribution is well below 30%, we know that's not correct.
Seth Seifman
Right. Okay, okay. Okay. I was just looking at the slides from last quarter and this quarter. But maybe two more quick cleanup ones. On the defense piece that's 37% now, what's the rough split there with Esterline and the total TransDigm defense pie between aftermarket and OE?
Kevin Stein
I think it's similar to our commercial business, but that's as much as we guide on that.
Seth Seifman
Right. Okay. Okay. And then the last piece is you talked about $4 billion of cash at year-end. I guess the -- yes, actually I'll leave it there. Yes.
Operator
Thank you. And I'm not showing any further questions in the queue. I would like to turn the call back to Liza Sabol for her final remarks.
Liza Sabol
Thank you. That concludes our call today. We just would like to thank you again for calling in.
Operator
Thank you. Ladies and gentlemen, this concludes today's conference call. Thank you for participating, and you may now disconnect.


Example:
Field stringHashField() throws NoSuchFieldException {
return String.class.getField("hash");
}
After the quick-fix is applied:
Field stringHashField() throws NoSuchFieldException {
return String.class.getDeclaredField("hash");
}
With a final
class, it's clear if there is a field or method with the specified name in the class.
With non-final
classes, it's possible that a subclass has a field or method with that name, so there could be false positives.
Use the inspection's settings to get rid of such false positives everywhere or with specific classes.
New in 2017.2


The exception is triggered by two buttons, one of which will handle the exception, the other will not.
The demo shows that unhandled exceptions are caught at top level and
the stack trace is written to System.out
.
The demo is coded in ExceptionDemo.java.
Note that we compiled the demo with the compiler option generateLineNumbers="true"
.


Available menu
Let's share information with collegues
Mwafrika Josue
10min ago
Oh My God! Help me to this last challenge
Oh My God! Help
Oh My God! Help me to this last
challenge
Oh My God! Help me to this last
challenge
Mwafrika Josue
10min ago
Oh My God! Help me to this last challenge
Oh My God! Help
Oh My God! Help me to this last
challenge
Oh My God! Help me to this last
challenge
Amani Mbavumbili
10min ago
Oh My God! Help me to this last challenge
Oh My God! Help
Oh My God! Help me to this last
challenge
Oh My God! Help me to this last
challenge
Find People you may know
Akonkwa
Mudekereza
Kulimushi
Mutoka mbali
Chakupewa
Lushombo
Mulomoderwa
Manegabe
Ponga
Kyalondawa
You may be interested in our Articles
Details : 2 bed rooms 1 bathroom 1 kitchen
Date : 12/02/2019
Location : Rwanda
Address :KIGALI
Contact<EMAIL_ADDRESS>Phone : (+250) 787564203
Details : 2 bed rooms 1 bathroom 1 kitchen
Date : 12/02/2019
Location : Rwanda
Address :KIGALI
Contact<EMAIL_ADDRESS>Phone : (+250) 787564203
Status :
Available
Details : Java Programming course
Post Date : 12/02/2019
Website : W3School
Price :100.99 $
Author :Mwafrika Mufungizi Josue
Phone : (+250) 787564203


--- layout: page title: About header-img: "img/about-bg.png" ---
This is my blog about coding and software engineering.


 Once you're at a class page, use the Next/Previous links to browse through classes in that package alphabetically. The link called "This Package" in the navigation bar takes you to the list of classes in that package. |
| Use the Index of Fields and Methods |
Level 1 - All Packages
Example: Java Platform Core APIThis page provides a list of all packages and is the front page of this document.
Level 2 - All Classes and Interfaces within a Package
Example: Package java.awtThis type of page provides links to the public classes and interfaces in a given package. It can contain four categories:
- Interfaces
- Classes
- Exceptions
- Errors
Level 3 - A Single Class or Interface
Example: Class LabelNear the top of the page is a class inheritance diagram, starting with java.lang.Object and ending with the class or interface. This is followed by the class declaration and a general class description.
Following this are two sections: the indexes for this page, followed by detailed descriptions. (Each index entry contains the first sentence from the detailed description for that item.) The index entries are ogical groupings established by the programmer. These are the categories, in order (where a category is omitted when it has no entries):
- Field Index
- Constructor Index
- Method Index
- Fields
- Constructors
- Methods
The fields, constructors and methods have additional color coding as follows:
- Instance Variable (Non-Static Field)
- Static Field (Class Variable)
- Constructor
- Instance Method (Non-Static Method)
- Class Method (Static Method)
Class Hierarchy
The Class Hierarchy contains a list of all the classes and interfaces starting with java.lang.Object, organized first by their inheritance structure, and within that structure sorted alphabetically by class or interface. Most every page has a "Class Hierarchy" link in the navigation bar to get to this page.Index of Fields and Methods
The Index of Fields and Methods contains a list of all fields, methods and constructors, sorted alphabetically. Most every page has an "Index" link in the navigation bar to get to this page.


Cache.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Cache.php |
Config.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Config.php |
Controller.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Controller.php |
Database.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Database.php |
Dispatcher.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Dispatcher.php |
Event.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Event.php |
Format.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Format.php |
Front.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Front.php |
Model.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Model.php |
Notice.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Notice.php |
Profiler.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Profiler.php |
Request.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Request.php |
Route.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Route.php |
Router.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Router.php |
Store/Apc.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/Apc.php |
Store/Cookie.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/Cookie.php |
Store/Memcache.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/Memcache.php |
Store/Request.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/Request.php |
Store/Session.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/Session.php |
Store/StorageInterface.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Store/StorageInterface.php |
Validate.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file Validate.php |
View.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file View.php |
ViewHelper.php1
| Type |
Line |
Description |
| error |
0 |
No page-level DocBlock was found in file ViewHelper.php |


This plugin invokes Signtool under the hood. Here you can specify extra custom CLI arguments to pass to Signtool.
These arguments will be appended to the Signtool CLI invocation. If they overlap with any arguments implicitly passed by this plugin, then Signtool will raise an error.


shoppy
shoppy
Dashboard
categories
products
sales
logout
welcome
tell people about our new products
Items in our store
Proceed to Checkout
previous
next
×
Product Added to Cart
OK


Currency
@objcMembers
public final class Currency : NSObject
Currency structure.
-
Lowercased 3-letters currency ISO code.
Declaration
Swift
public let isoCode: String
-
Pretty printed object description.
Declaration
Swift
public override var description: String { get }
-
Initializes currency with 3-lettered ISO code.
Throws
Invalid currency exception.Declaration
Swift
@objc(initWithISOCode:error:) public init(isoCode: String) throws
Parameters
isoCode
ISO code.
-
Initializes the currench with 3-lettered ISO code.
Warning
This method returnsnil
if ISO code is not valid.Declaration
Swift
@objc(initWithISOCode:) public convenience init?(_ isoCode: String)
Parameters
isoCode
3-lettered ISO code.
-
Creates and returns an instance of
Currency
with the givenisoCode
.Declaration
Swift
@objc(withISOCode:) public static func with(isoCode: String) -> Currency?
Parameters
isoCode
Three-lettered currency ISO code.
Return Value
An instance of
Currency
ornil
if ISO code is invalid. -
Checks if 2 objects are equal.
Declaration
Swift
public static func == (lhs: Currency, rhs: Currency) -> Bool
Parameters
lhs
First object.
rhs
Second object.
Return Value
true
if 2 objects are equal,false
otherwise. -
Checks if the receiver is equal to
object.
Declaration
Swift
public override func isEqual(_ object: Any?) -> Bool
Parameters
object
Object to test equality with.
Return Value
true
if the receiver is equal toobject
,false
otherwise.
-
Declaration
Swift
public static let allCases: [Currency]
-
Encodes the contents of the receiver.
Throws
EncodingErrorDeclaration
Swift
public func encode(to encoder: Encoder) throws
Parameters
encoder
Encoder.
-
Declaration
Swift
public convenience init(from decoder: Decoder) throws
-
Creates a copy of the receiver.
Declaration
Swift
public func copy(with zone: NSZone? = nil) -> Any
Parameters
zone
Zone.
Return Value
Copy of the receiver.


This report summarizes the number of SMTP sessions that happened in the past week, grouped by sender.
{{range .result}}This is the result from {{.OrganizationName}} ({{.Domain}}), which can be reached at {{.ContactInfo}}.
|
{{if eq $type "no-policy-found"}}
No policy found {{else if eq $type "sts"}} MTA-STS {{else}} {{$type}} {{end}} |
{{if $stats.SuccessCount}}
{{end}}
{{if $stats.FailureCount}}
{{end}}
|


Almost There
Please Enter an Emergency Contact
What time blocks are you regularly available to work? (select all that apply)
AM refers to 8:00am-12:00pm. PM refers to 12:00pm-4:00pm
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
CUSTOMIZE YOUR AVAILABILITY
Based on your general settings, we've updated the calendar to show your standard availability. Use the calendar to customize dates and times select the days you are available and unavailable.
How far are you willing to travel for a job?
Tell our customers why they can trust you in their home while they are away.
This will show on your profile. Tell people why you would make an excellent sitter for their house.
Please provide your insurance information.
We require our sitters to be self-insured or bonded with a minimum of $###### in what kind of insurance. Don't have the gift insurance yet? You can save your profile information and add this later, but we won't be able to match you for jobs until this is received.
Background Check Information
Background Check Information While we do require a social security number for the background check, this information will not be stored in you profile. We use the highest level of date encryption to help protect and secure your personal information.


|
Assimp
5.0.1, master @ cd42b955
|
Represents a row-major 3x3 matrix. More...
Public Member Functions | |
| aiMatrix3x3t () AI_NO_EXCEPT | |
| aiMatrix3x3t (const aiMatrix4x4t< TReal > &pMatrix) | |
| Construction from a 4x4 matrix. More... | |
| aiMatrix3x3t (TReal _a1, TReal _a2, TReal _a3, TReal _b1, TReal _b2, TReal _b3, TReal _c1, TReal _c2, TReal _c3) | |
| TReal | Determinant () const |
| bool | Equal (const aiMatrix3x3t< TReal > &m, TReal epsilon=1e-6) const |
| aiMatrix3x3t & | Inverse () |
| Invert the matrix. More... | |
| template<typename TOther > | |
| operator aiMatrix3x3t< TOther > () const | |
| bool | operator!= (const aiMatrix3x3t< TReal > &m) const |
| aiMatrix3x3t | operator* (const aiMatrix3x3t &m) const |
| aiMatrix3x3t & | operator*= (const aiMatrix3x3t &m) |
| bool | operator== (const aiMatrix3x3t< TReal > &m) const |
| TReal * | operator[] (unsigned int p_iIndex) |
| const TReal * | operator[] (unsigned int p_iIndex) const |
| aiMatrix3x3t & | Transpose () |
| Transpose the matrix. More... | |
Static Public Member Functions | |
| static aiMatrix3x3t & | FromToMatrix (const aiVector3t< TReal > &from, const aiVector3t< TReal > &to, aiMatrix3x3t &out) |
| A function for creating a rotation matrix that rotates a vector called "from" into another vector called "to". More... | |
| static aiMatrix3x3t & | Rotation (TReal a, const aiVector3t< TReal > &axis, aiMatrix3x3t &out) |
| Returns a rotation matrix for a rotation around an arbitrary axis. More... | |
| static aiMatrix3x3t & | RotationZ (TReal a, aiMatrix3x3t &out) |
| Returns a rotation matrix for a rotation around z. More... | |
| static aiMatrix3x3t & | Translation (const aiVector2t< TReal > &v, aiMatrix3x3t &out) |
| Returns a translation matrix. More... | |
Public Attributes | |
| TReal | a1 |
| TReal | a2 |
| TReal | a3 |
| TReal | b1 |
| TReal | b2 |
| TReal | b3 |
| TReal | c1 |
| TReal | c2 |
| TReal | c3 |
Represents a row-major 3x3 matrix.
There's much confusion about matrix layouts (column vs. row order). This is always a row-major matrix. Not even with the aiProcess_ConvertToLeftHanded flag, which absolutely does not affect matrix order - it just affects the handedness of the coordinate system defined thereby.
|
inline |
|
inline |
|
explicit |
Construction from a 4x4 matrix.
The remaining parts of the matrix are ignored.
| AI_FORCE_INLINE TReal aiMatrix3x3t< TReal >::Determinant |
| AI_FORCE_INLINE bool aiMatrix3x3t< TReal >::Equal | ( | const aiMatrix3x3t< TReal > & | m, |
| TReal | epsilon = 1e-6 |
||
| ) | const |
|
static |
A function for creating a rotation matrix that rotates a vector called "from" into another vector called "to".
Input : from[3], to[3] which both must be normalized non-zero vectors Output: mtx[3][3] – a 3x3 matrix in column-major form Authors: Tomas Möller, John Hughes "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999
Input : from[3], to[3] which both must be normalized non-zero vectors Output: mtx[3][3] – a 3x3 matrix in colum-major form Authors: Tomas Möller, John Hughes "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999
| AI_FORCE_INLINE aiMatrix3x3t< TReal > & aiMatrix3x3t< TReal >::Inverse |
Invert the matrix.
If the matrix is not invertible all elements are set to qnan. Beware, use (f != f) to check whether a TReal f is qnan.
| aiMatrix3x3t< TReal >::operator aiMatrix3x3t< TOther > |
| AI_FORCE_INLINE bool aiMatrix3x3t< TReal >::operator!= | ( | const aiMatrix3x3t< TReal > & | m | ) | const |
| AI_FORCE_INLINE aiMatrix3x3t< TReal > aiMatrix3x3t< TReal >::operator* | ( | const aiMatrix3x3t< TReal > & | m | ) | const |
| AI_FORCE_INLINE aiMatrix3x3t< TReal > & aiMatrix3x3t< TReal >::operator*= | ( | const aiMatrix3x3t< TReal > & | m | ) |
| AI_FORCE_INLINE bool aiMatrix3x3t< TReal >::operator== | ( | const aiMatrix3x3t< TReal > & | m | ) | const |
| AI_FORCE_INLINE TReal * aiMatrix3x3t< TReal >::operator[] | ( | unsigned int | p_iIndex | ) |
| AI_FORCE_INLINE const TReal * aiMatrix3x3t< TReal >::operator[] | ( | unsigned int | p_iIndex | ) | const |
|
static |
Returns a rotation matrix for a rotation around an arbitrary axis.
| a | Rotation angle, in radians |
| axis | Axis to rotate around |
| out | To be filled |
|
static |
Returns a rotation matrix for a rotation around z.
| a | Rotation angle, in radians |
| out | Receives the output matrix |
|
static |
Returns a translation matrix.
| v | Translation vector |
| out | Receives the output matrix |
| AI_FORCE_INLINE aiMatrix3x3t< TReal > & aiMatrix3x3t< TReal >::Transpose |
Transpose the matrix.
| TReal aiMatrix3x3t< TReal >::a1 |
| TReal aiMatrix3x3t< TReal >::a2 |
| TReal aiMatrix3x3t< TReal >::a3 |
| TReal aiMatrix3x3t< TReal >::b1 |
| TReal aiMatrix3x3t< TReal >::b2 |
| TReal aiMatrix3x3t< TReal >::b3 |
| TReal aiMatrix3x3t< TReal >::c1 |
| TReal aiMatrix3x3t< TReal >::c2 |
| TReal aiMatrix3x3t< TReal >::c3 |


Copyright © 2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
This specification describes multi-column layouts in CSS, a style sheet language for the web. Using functionality described in the specification, content can be flowed into multiple columns with a gap and a rule between them.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This document was produced by the CSS Working Group as a Candidate Recommendation.
A Candidate Recommendation is a document that has been widely reviewed and is ready for implementation. W3C encourages everybody to implement this specification and return comments to the (archived) public mailing list<EMAIL_ADDRESS>(see instructions). When sending e-mail, please put the text “css3-multicol” in the subject, preferably like this: “[css3-multicol] …summary of comment…”
Publication as a Candidate Recommendation does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document has been a Working Draft in the CSS Working Group for several years. Multi-column layouts are traditionally used in print. On screen, multi-column layouts have been considered experimental, and implementation and use experience was deemed necessary in order to proceed. Several implementations have occurred over the past years, and this specification incorporates useful feedback from implementors as well as authors and users.
The specification was updated in April 2011 to correct a contradiction between the text and the pseudo-algorithm in section 3.4. The pseudo-algorithm was corrected and also made easier to read. The wording of a few other sections was improved in places, without changes to the functionality.
This document will remain Candidate Recommendation at least until 12 May 2011. See the CR exit criteria.
(This section is not normative.)
This module describes multi-column layout in CSS. By using functionality described in this document, style sheets can declare that the content of an element is to be laid out in multiple columns.
On the Web, tables have also been used to describe multi-column layouts. The main benefit of using CSS-based columns is flexibility; content can flow from one column to another, and the number of columns can vary depending on the size of the viewport. Removing presentation table markup from documents allows them to more easily be presented on various output devices including speech synthesizers and small mobile devices.
Multi-column layouts are easy to describe in CSS. Here is a simple example:
body { column-width: 12em }
In this example, the body
element is set to
have columns at least ‘12em
’ wide. The
exact number of columns will depend on the available space.
The number of columns can also be set explicitly in the style sheet:
body { column-count: 2 }
In this case, the number of columns is fixed and the column widths will vary depending on the available width.
The shorthand ‘columns
’ property can be used to set
either, or both, properties in one declaration.
In these examples, the number of columns, the width of columns, and both the number and width are set, respectively:
body { columns: 2 } body { columns: 12em } body { columns: 2 12em }
However, as described below, setting both the width and number of columns rarely makes sense.
Another group of properties introduced in this module describe gaps and rules between columns.
body { column-gap: 1em; column-rule: thin solid black; }
The first declaration in the example above sets the gap between two
adjacent columns to be 1em. Column gaps are similar to padding areas. In
the middle of the gap there will be a rule which is described by the
‘column-rule
’ property.
The values of the ‘column-rule
’ property are similar to those
of the CSS border properties. Like ‘border
’, ‘column-rule
’ is a shorthand property.
In this example, the shorthand ‘column-rule
’ declaration from the above
example has been expanded:
body { column-gap: 1em; column-rule-width: thin; column-rule-style: solid; column-rule-color: black; }
The ‘column-fill
’ and ‘column-span
’
properties give style sheets a wider range of visual expressions in
multi-column layouts.
In this example, columns are set to be balanced, i.e., to have
approximately the same length. Also, h2
elements are set to
span across all columns.
div { column-fill: balance } h2 { column-span: all }
This specification introduces ten new properties, all of which are used in the examples above.
To indicate where column breaks should (or should not) appear, new keyword values are introduced.
In this example, h1
elements will always have a column
break before them, but the formatter will try to avoid column breaks
inside and after the element.
h1 { break-before: column; break-inside: avoid-column; break-after: avoid-column; }
If all column properties have their initial value, the layout of an element will be identical to a multi-column layout with only one column.
A multi-column element (or
multicol element for short) is an element whose ‘column-width
’
or ‘column-count
’ property is not ‘auto
’ and therefore acts as a container for
multi-column layout.
In the traditional CSS box model, the content of an element is flowed into the content box of the corresponding element. Multi-column layout introduces a new type of container between the content box and the content, namely the column box (or column for short). The content of a multicol element is flowed into its column boxes.
Column boxes in a multi-column element are arranged into rows. Like table cells, the column boxes in a row are ordered in the inline direction of the multicol element. The column width is the length of the column box in the inline direction. The column height is the length of the column box in the block direction. All column boxes in a row have the same column width, and all column boxes in a row have the same column height. Within each row in the multi-column element, adjacent column boxes are separated by a column gap, which may contain a column rule. All column gaps in the same row are equal. All column rules in the same row are also equal, if they appear; column rules only appear between columns that both have content.
In the simplest case a multicol element will contain only one row of columns, and the height of each column will be equivalent to the used height of the multi-column element's content box. If the multi-column element is paginated, the height of each row is constrained by the page and the content continues in a new row of column boxes on the next page; a column box never splits across pages. The same effect occurs when a spanning element divides the multi-column element: the columns before the spanning element are balanced and shortened to fit their content. Content after the spanning element then flows into a new row of column boxes.
It is not possible to set properties/values on column boxes. For example, the background of a certain column box cannot be set and a column box has no concept of padding, margin or borders.
Future specifications may add additional functionality. For example, columns of different widths and different backgrounds may be supported.
Column gaps (yellow) and column rules (green) are shown in this sample rendition of a multi-column element with padding (blue). The blue and yellow is present for illustrational purposes only. In actual implementations these areas will be determined by the background.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
Pqr stu vw xyz.
To illustrate the effects of the various properties described in this specification, variations on a sample document will be used. Here is the source code of the sample document:

Ab cde fgh i jkl. Mno pqr stu vw xyz. A bc  def g hij ...

The nonsensical text in the example is the English alphabet which shows how text flows from one column to another. To simplify the visualization, the textual content of the different examples vary slightly.
Column boxes act as the containing block for their content. That is,
column boxes behave like block-level, table cell, and inline-block boxes
as per CSS 2.1, section 10.1, item 2 [CSS21]. However, column boxes do not
establish containing blocks for elements with ‘position: fixed
’ or ‘position: absolute
’.
In this example, the width of the image is set with these rules:
img { display: block; width: 100% }
Given that the width is calculated relative to the column box, the image will be as wide as the column box:
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz.
Floats that appear inside multi-column layouts are positioned with regard to the column box where the float appears.
In this example, this CSS fragment describes the presentation of the image:
img { display: block; float: right }
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g
hij klm
nopq
rs tuv
wxy x
yz. Ab
cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
The black box represents the image.
A multi-column element establishes a new block formatting context, as per CSS 2.1 section 9.4.1.
A top margin set on the first child element of a multicol element will not collapse with the margins of the multicol element.
Nested multi-column elements are allowed, but there may be implementation-specific limits.
Finding the number and width of columns is fundamental when laying out multi-column content. When the block direction is unconstrained and no column breaks are added through style sheets, these two properties determine the outcome:
A third property, ‘columns
’, is a shorthand property which
sets both ‘column-width
’ and ‘column-count
’.
column-width
’| Name: | column-width |
| Value: | <length> | auto |
| Initial: | auto |
| Applies to: | non-replaced block-level elements (except table elements), table cells, and inline-block elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | the absolute length, zero or larger |
This property describes the width of columns in multicol elements.
column-count
’, if it has a non-auto
value).
For example, consider this style sheet:
div { width: 100px; column-width: 45px; column-gap: 0; column-rule: none; }
There is room for two 45px wide columns inside the 100px wide element. In order to fill the available space the actual column width will be increased to 50px.
Also, consider this style sheet:
div { width: 40px; column-width: 45px; column-gap: 0; column-rule: none; }
The available space is smaller than the specified column width and the actual column width will therefore be decreased.
To ensure that ‘column-width
’ can be used with vertical
text, column width means the length of the line boxes inside the columns.
The reason for making ‘column-width
’ somewhat flexible is to
achieve scalable designs that can fit many screen sizes. To set an exact
column width, all length values (in horizontal text these are:
‘width
’, ‘column-width
’,
‘column-gap
’, and ‘column-rule-width
’) must be specified.
column-count
’| Name: | column-count |
| Value: | <integer> | auto |
| Initial: | auto |
| Applies to: | non-replaced block-level elements (except table elements), table cells, and inline-block elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | specified value |
This property describes the number of columns of a multicol element.
column-width
’, if it has a non-auto
value).
column-width
’
and ‘column-count
’ have non-auto values, the
integer value describes the maximum number of columns.
Example:
body { column-count: 3 }
columns
’| Name: | columns |
| Value: | <‘column-width ’> || <‘column-count ’>
|
| Initial: | see individual properties |
| Applies to: | non-replaced block-level elements (except table elements), table cells, and inline-block elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | see individual properties |
This is a shorthand property for setting ‘column-width
’
and ‘column-count
’. Omitted values are set to
their initial values.
Here are some valid declarations using the ‘columns
’ property:
columns: 12em; /* column-width: 12em; column-count: auto */ columns: auto 12em; /* column-width: 12em; column-count: auto */ columns: 2; /* column-width: auto; column-count: 2 */ columns: 2 auto; /* column-width: auto; column-count: 2 */ columns: auto; /* column-width: auto; column-count: auto */ columns: auto auto; /* column-width: auto; column-count: auto */
The pseudo-algorithm below determines the used values for ‘column-count
’
(N) and ‘column-width
’ (W). There are two other
variables in the pseudo-algorithm:
available-width
: if the used width of the multi-column
element has not been determined when the ‘column-count
’
and ‘column-width
’ must be determined (e.g.,
if it is floating with a ‘width
’
of ‘auto
’ as per CSS 2.1 section
10.3.5) this variable is unknown
, otherwise it is the same
as the used width of the multi-column element. In vertical text, the used
height replaces used width in this calculation.
shrink-to-fit
: this variable represents the result of a
shrink-to-fit computation. CSS does not define the exact
algorithm.
Two assumptions are being made by the pseudo-algorithm:
The floor()
function rounds a number to the next smaller
integer.
(01) if ((column-width = auto) and (column-count = auto)) then (02) exit; /* not a multicol element */ (03) if ((available-width = unknown) and (column-count = auto)) then (04) exit; /* no columns */ (05) if (available-width = unknown) and (column-count != auto) and (column-width != auto) then (06) N := column-count; (07) W := column-width; (08) exit; (09) if (available-width = unknown) then (10) available-width := shrink-to-fit; (11) if (column-width = auto) and (column-count != auto) then (12) N := column-count; (13) W := max(0, (available-width - ((N - 1) * column-gap)) / N); (14) exit; (15) if (column-width != auto) and (column-count = auto) then (16) N := max(1, floor((available-width + column-gap) / (column-width + column-gap))); (17) W := ((available-width + column-gap) / N) - column-gap; (18) exit; (19) if (column-width != auto) and (column-count != auto) then (20) N := min(column-count, floor((available-width + column-gap) / (column-width + column-gap))) (21) W := ((available-width + column-gap) / N) - column-gap; (22) exit
In paged media, user agents may perform this calculation on a per-page basis.
Note that, in most cases, only one of ‘column-width
’
and ‘column-count
’ affect the layout. If
‘column-width
’ has a value other than
‘auto
’, ‘column-count
’
indicates the maximum number of columns. However, both ‘column-width
’
and ‘column-count
’ are honored when the width
of the element has not been determined. This can, e.g., be the case for
table cells and floats.
All column boxes in a multi-column element are in the same stacking context and the drawing order of their contents is as specified in CSS 2.1.
Column gaps and rules are placed between columns in the same multicol element. The length of the column gaps and column rules is equal to the length of the columns. Column gaps take up space. That is, column gaps will push apart content in adjacent columns (within the same multicol element).
A column rule is drawn in the middle of the column gap with the
endpoints at opposing content edges of the multicol element. Column rules
do not take up space. That is, the presence or thickness of a column rule
will not alter the placement of anything else. If a column rule is wider
than its gap, the column rule will overlap adjacent column boxes, and
possibly extend outside the box of the multicol element. Column rules are
painted just above the background of the multicol element. This allows
child elements with ‘z-index
’
values to be on top of column rules. Column rules are only drawn between
two columns that both have content.
column-gap
’| Name: | column-gap |
| Value: | <length> | normal |
| Initial: | normal |
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | absolute length or ‘normal ’
|
The ‘column-gap
’ property sets the gap between
columns. If there is a column rule between columns, it will appear in the
middle of the gap.
The ‘normal
’ value is UA-specific. A
value of ‘1em
’ is suggested.
Column gaps cannot be negative.
column-rule-color
’| Name: | column-rule-color |
| Value: | <color> |
| Initial: | same as for ‘color ’ property
[CSS21]
|
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | the same as the computed value for the ‘color ’ property [CSS21]
|
This property sets the color of the column rule. The <color> values are defined in [CSS21].
column-rule-style
’| Name: | column-rule-style |
| Value: | <border-style> |
| Initial: | none |
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | specified value |
The ‘column-rule-style
’ property sets the style
of the rule between columns of an element. The <border-style> values
are defined in [CSS21] and the values are
interpreted as in the the
collapsing border model.
The ‘none
’ value forces the
computed value of ‘column-rule-width
’ to be
‘0
’.
column-rule-width
’| Name: | column-rule-width |
| Value: | <border-width> |
| Initial: | medium |
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | absolute length; ‘0 ’ if the
column rule style is ‘none ’ or
‘hidden ’
|
This property sets the width of the rule between columns. Negative values are not allowed.
column-rule
’| Name: | column-rule |
| Value: | <‘column-rule-width ’> || <‘column-rule-style ’> || [ <‘column-rule-color ’> | transparent ]
|
| Initial: | see individual properties |
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | see individual properties |
This property is a shorthand for setting ‘column-rule-width
’, ‘column-rule-style
’, and ‘column-rule-color
’ at the same place in
the style sheet. Omitted values are set to their initial values.
In this example, the column rule and the column gap have the same width. Therefore, they will occupy exactly the same space.
body { column-gap: 1em; column-rule-width: 1em; column-rule-style: solid; column-rule-color: black; }
If a tall image is moved to a column on the next page to find room for it, its natural column may be left empty. If so, the column is is still considered to have content for the purpose of deciding if the column rule should be drawn.
When content is laid out in multiple columns, the user agent must determine where column breaks are placed. The problem of breaking content into columns is similar to breaking content into pages.
Three new properties are introduced to allow column breaks to be
described in the same properties as page breaks: ‘break-before
’,
‘break-after
’, and ‘break-inside
’.
These properties take the same values as ‘page-break-before
’, ‘page-break-after
’, and ‘page-break-inside
’ [CSS21]. In addition, some new
keyword values are added.
break-before
’, ‘break-after
’,
‘break-inside
’| Name: | break-before |
| Value: | auto | always | avoid | left | right | page | column | avoid-page | avoid-column |
| Initial: | auto |
| Applies to: | block-level elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | paged |
| Computed value: | specified value |
| Name: | break-after |
| Value: | auto | always | avoid | left | right | page | column | avoid-page | avoid-column |
| Initial: | auto |
| Applies to: | block-level elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | paged |
| Computed value: | specified value |
| Name: | break-inside |
| Value: | auto | avoid | avoid-page | avoid-column |
| Initial: | auto |
| Applies to: | block-level elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | paged |
| Computed value: | specified value |
These properties describe page/column break behavior before/after/inside the generated box. These values are normatively defined in [CSS21]:
This specification adds the following new values:
When a page or column break splits a box, the box's margins, borders, and padding have no visual effect where the split occurs. However, the margin immediately after a forced page/column break will be preserved. A forced page/column break is a break that does not occur naturally.
In the future, new properties may describe alternate ways to handle margins, borders and padding around page/column breaks.
In this example, forced column breaks appear before h2
elements and after img
elements:
.multicol { column-width: 8em } .multicol h2 { break-before: column; margin-top: 2em } .multicol img { break-after: column }
The top margin of h2
elements will be preserved since the
column break is forced.
In this example, the formatter will try avoid column breaks inside
p
elements:
p { break-inside: avoid-column }
The ‘column-span
’ property makes it possible
for an element to span across several columns.
column-span
’| Name: | column-span |
| Value: | none | all |
| Initial: | none |
| Applies to: | block-level elements, except floating and absolutely positioned elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | visual |
| Computed value: | as specified |
This property describes how many columns an element spans across. Values are:
An element that spans more than one column is called a spanning element.
In this example, an h2
element has been added to the
sample document after the first sentence in the fourth sentence (i.e.,
after the word "jkl."). This styling applies:
h2 { column-span: all; background: silver } img { display: none }
By setting ‘column-span
’ to ‘all
’, all content that appear before the
h2
element is shown before the h2
element.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
def g hij klm nopqrs
tuv wxy z. Abc de fg
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz.
A spanning element takes up more space than the element would take up
otherwise. When space is limited, it may be impossible to find room for
the spanning element. In these cases, user agents may treat the element as
if ‘none
’ had been specified on
this property.
This is a variation of the previous example. In this example, the H2
element appears later in the content, and the height of the multicol
element is constrained. Therefore, the H2 element appears in the overflow
and there is not room to make the element spanning. As a result, the
element appears as if ‘column-span:
none
’ was specified.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz.
There are two strategies for filling columns: columns can either be
balanced, or not. If columns are balanced, UAs should minimize the
variation in column length. Otherwise, columns are filled sequentially and
some columns may end up partially filled, or with no content at all. In
any case, the user agent should try to honor the ‘widows
’ and ‘orphans
’ properties.
column-fill
’| Name: | column-fill |
| Value: | auto | balance |
| Initial: | balance |
| Applies to: | multicol elements |
| Inherited: | no |
| Percentages: | N/A |
| Media: | see below |
| Computed value: | as specified |
The values are:
In continuous media, this property will only be consulted if the length of columns has been constrained. Otherwise, columns will automatically be balanced.
In continous media, this property does not have any effect in overflow columns (see below).
In paged media, this property will only have effect on the last page the multicol element appears on.
Content in the normal flow that extends into column gaps (e.g., long words or images) is clipped in the middle of the column gap.
In this example, the black image is wider than the column, and is therefore clipped.
Lorem ipsum dolor
sit amet. Nam at jus.
Sed imp er di et ris.
Cur abi tur et sapen.
Lorem ipsum dolor
sit amet. Nam at jus.
Sed imp er di et ris.
Cur abi tur et sapen.
Vivamus a metus.
Aenean at risus
pharetra ante luctu
feugiat quis enim.
Cum sociis natoque
penatibus et magni.
Lorem ipsum dolor
sit amet. Nam at jus.
Sed imp er di et ris.
Cur abi tur et sapen.
Vivamus a metus.
Aenean at risus
pharetra ante luctu
feugiat quis enim.
Cum sociis natoque
penatibus et magni.
Content and column rules that extend outside column boxes at the edges
of the multi-column element are clipped according to the ‘overflow
’ property.
A multicol element can have more columns than it has room for due to:
height
’ or ‘max-height
’). In this case, additional column
boxes are created in the inline direction
Columns that appear outside the multicol element in continous media are called overflow columns.
In this example, the height of the multi-column element has been constrained to a maximum height. Also, the style sheet specifies that overflowing content should be visible:
div { max-height: 5em; overflow: visible; }
As a result, the number of columns is increased.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
M nop qrst uv wx yz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno. Pqrstu vw
x yz. Abc def ghi jkl.
In this example, explicit column breaks are generated after paragraphs:
p { break-after: column; }
As a result, the number of columns increases and the extra columns added in the inline direction:
Ab cde fgh i jkl. Mno
pqr stu vw xyz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z.
Ab cde fgh i jkl mno.
Pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno pqr stu v
wx yz.
In paged media, extra columns are shown on the next page. Given the same code as the previous example:
p { break-after: column; }
As a result, the number of columns is increased and placed on the next page. This would appear on the first page:
Ab cde fgh i jkl. Mno
pqr stu vw xyz.
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z.
Ab cde fgh i jkl.
This would appear on the second page:
Ab cde fgh i jkl. Mno
pqr stu vw xyz. A bc
def g hij klm nopqrs
tuv wxy z. Abc de fg
hi jklmno.
Conforming UAs must flow the content of an element into several columns according to this specification.
The conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification. All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]
As described in the W3C process document, a Candidate Recommendation (CR) is a specification that W3C recommends for use on the Web. The next stage is Recommendation, when the specification is sufficiently implemented.
For this specification to be proposed as a W3C Recommendation, the following conditions shall be met. There must be at least two independent, interoperable implementations of each feature. Each feature may be implemented by a different set of products, there is no requirement that all features be implemented by a single product. For the purposes of this criterion, we define the following terms:
A minimum of sixth months of the CR period must have elapsed. This is to ensure that enough time is given for any remaining major errors to be caught.
Features will be dropped if two or more interoperable implementations are not found by the end of the CR period.
Features may/will also be dropped if adequate/sufficient (by judgment of CSS WG) tests have not been produced for those feature(s) by the end of the CR period.
This document is based on several older proposals and comments on older proposals. Contributors include Øyvind Stenhaug, Sylvain Galineau, Giovanni Campagna, David Hyatt, David Singer, David Woolley, Elika Etemad, Björn Höhrmann, Joost de Valk, Peter-Paul Koch, Shelby Moore, Till Halbach, Cédric Savarese, Andy Clarke, Robert O'Callahan, Markus Mielke, Alex Mogilevsky, Sergey Genkin, Michael Day, Melinda Grant, Kevin Lawver, David Baron, Bert Bos, Dave Raggett, Chris Wilson, Robert Stevahn, Peter Linss, Chris Lilley, Steve Zilles, Tantek Çelik, Daniel Glazman and Ian Hickson.
| Property | Values | Initial | Applies to | Inh. | Percentages | Media |
|---|---|---|---|---|---|---|
| break-after | auto | always | avoid | left | right | page | column | avoid-page | avoid-column | auto | block-level elements | no | N/A | paged |
| break-before | auto | always | avoid | left | right | page | column | avoid-page | avoid-column | auto | block-level elements | no | N/A | paged |
| break-inside | auto | avoid | avoid-page | avoid-column | auto | block-level elements | no | N/A | paged |
| column-count | <integer> | auto | auto | non-replaced block-level elements (except table elements), table cells, and inline-block elements | no | N/A | visual |
| column-fill | auto | balance | balance | multicol elements | no | N/A | see below |
| column-gap | <length> | normal | normal | multicol elements | no | N/A | visual |
| column-rule | <‘column-rule-width’> || <‘column-rule-style’> || [ <‘column-rule-color’> | transparent ] | see individual properties | multicol elements | no | N/A | visual |
| column-rule-color | <color> | same as for ‘color’ property [CSS21] | multicol elements | no | N/A | visual |
| column-rule-style | <border-style> | none | multicol elements | no | N/A | visual |
| column-rule-width | <border-width> | medium | multicol elements | no | N/A | visual |
| columns | <‘column-width’> || <‘column-count’> | see individual properties | non-replaced block-level elements (except table elements), table cells, and inline-block elements | no | N/A | visual |
| column-span | none | all | none | block-level elements, except floating and absolutely positioned elements | no | N/A | visual |
| column-width | <length> | auto | auto | non-replaced block-level elements (except table elements), table cells, and inline-block elements | no | N/A | visual |


Enabled:
HTTP API Token:
Bot password (optional):
API Host (optional):
SOCKS5 Proxy (optional):
Get
Send a message when one of consumables is expired:
Every cleaning send a message when one of consumables is expired:
Which status changes to notify about:


git-stage - Add file contents to the staging area
git stage args...
This is a synonym for git-add(1). Please refer to the documentation of that command.
Part of the git(1) suite


This site was created for the National Science Project Compeition, by Orpheus.
[KC Defense]
Return to main page.


Coursera - HTML, CSS, and Javascript for Web Developers - John Hopkins University
Text - Open Data Structures
GitHub - Open Data Structures Text Source Code
YouTube - Open Data Structures Channel
YouTube - Database Design Course - Learn how to design and plan a database for beginners - freeCodeCamp.org